diff --git a/package.json b/package.json
index 0c7fde7be56a82cde31cb2814a44dae5b0d573a5..5a3f31ad89792964ea65f7fa957214b653b79005 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,7 @@
   "version": "0.1.0",
   "private": true,
   "dependencies": {
+    "@ant-design/icons": "^4.6.2",
     "@testing-library/jest-dom": "^5.11.4",
     "@testing-library/react": "^11.1.0",
     "@testing-library/user-event": "^12.1.10",
diff --git a/src/App.js b/src/App.js
index 89dee0d49eca57f5166bbb93936f1b90e62f9127..29596416d2f21fbdcbbf4f1f695028f07ebebf5a 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,25 +1,11 @@
-import logo from './logo.svg';
-import './App.scss';
+import 'antd/dist/antd.css';
 
-function App() {
-  return (
-    <div className="App">
-      <header className="App-header">
-        <img src={logo} className="App-logo" alt="logo" />
-        <p>
-          Edit <code>src/App.js</code> and save to reload.
-        </p>
-        <a
-          className="App-link"
-          href="https://reactjs.org"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          Learn React
-        </a>
-      </header>
-    </div>
-  );
+import MainPage from "./js/pages/MainPage";
+
+const App = () => {
+    return (
+        <MainPage />
+    );
 }
 
 export default App;
diff --git a/src/App.scss b/src/App.scss
index 0c2d0fb6a517a9722e455a9d36b2b4556c11da8c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -1,41 +0,0 @@
-@import 'style/colors';
-@import 'style/fonts';
-.App {
-  text-align: center;
-}
-
-.App-logo {
-  height: 40vmin;
-  pointer-events: none;
-}
-
-@media (prefers-reduced-motion: no-preference) {
-  .App-logo {
-    animation: App-logo-spin infinite 20s linear;
-  }
-}
-
-.App-header {
-  background-color: $primary_black;
-  min-height: 100vh;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  font-size: calc(10px + 2vmin);
-  color: white;
-  font-family: $primary_font;
-}
-
-.App-link {
-  color: #61dafb;
-}
-
-@keyframes App-logo-spin {
-  from {
-    transform: rotate(0deg);
-  }
-  to {
-    transform: rotate(360deg);
-  }
-}
diff --git a/src/assets/curves/Courbe 1.png b/src/assets/curves/Courbe 1.png
deleted file mode 100644
index 657b478ce320ebf9d3d0ef81b57ce5b48f3409de..0000000000000000000000000000000000000000
Binary files a/src/assets/curves/Courbe 1.png and /dev/null differ
diff --git a/src/assets/curves/courbe_1.png b/src/assets/curves/courbe_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a4326cc16f692097b5464b27880d667d1050a5d
Binary files /dev/null and b/src/assets/curves/courbe_1.png differ
diff --git a/src/assets/curves/Courbe 1.svg b/src/assets/curves/courbe_1.svg
similarity index 100%
rename from src/assets/curves/Courbe 1.svg
rename to src/assets/curves/courbe_1.svg
diff --git a/src/assets/curves/Courbe 2.png b/src/assets/curves/courbe_2.png
similarity index 100%
rename from src/assets/curves/Courbe 2.png
rename to src/assets/curves/courbe_2.png
diff --git a/src/assets/curves/Courbe 2.svg b/src/assets/curves/courbe_2.svg
similarity index 100%
rename from src/assets/curves/Courbe 2.svg
rename to src/assets/curves/courbe_2.svg
diff --git a/src/assets/curves/Courbe 3.png b/src/assets/curves/courbe_3.png
similarity index 100%
rename from src/assets/curves/Courbe 3.png
rename to src/assets/curves/courbe_3.png
diff --git a/src/assets/curves/Courbe 3.svg b/src/assets/curves/courbe_3.svg
similarity index 100%
rename from src/assets/curves/Courbe 3.svg
rename to src/assets/curves/courbe_3.svg
diff --git a/src/assets/curves/Courbe 4.png b/src/assets/curves/courbe_4.png
similarity index 100%
rename from src/assets/curves/Courbe 4.png
rename to src/assets/curves/courbe_4.png
diff --git a/src/assets/curves/Courbe 4.svg b/src/assets/curves/courbe_4.svg
similarity index 100%
rename from src/assets/curves/Courbe 4.svg
rename to src/assets/curves/courbe_4.svg
diff --git a/src/assets/main/poulpe_ludique_big.png b/src/assets/main/poulpe_ludique_big.png
index d62ea1894369dec151f515ab9d7587575439258f..03826a768f04c58a8ca05b50d2ff1a38425234e0 100644
Binary files a/src/assets/main/poulpe_ludique_big.png and b/src/assets/main/poulpe_ludique_big.png differ
diff --git a/src/assets/main/poulpe_ludique_version_mobile.png b/src/assets/main/poulpe_ludique_version_mobile.png
index 1eb5700d4fcb25cec1ae6eb28fd8131428ca32f7..506392d3f6f3b469143c22430c31ba272cc44054 100644
Binary files a/src/assets/main/poulpe_ludique_version_mobile.png and b/src/assets/main/poulpe_ludique_version_mobile.png differ
diff --git a/src/assets/logos/JS.svg b/src/assets/props/JS.svg
similarity index 100%
rename from src/assets/logos/JS.svg
rename to src/assets/props/JS.svg
diff --git a/src/assets/logos/Logo.c++.svg b/src/assets/props/Logo.c++.svg
similarity index 100%
rename from src/assets/logos/Logo.c++.svg
rename to src/assets/props/Logo.c++.svg
diff --git a/src/assets/logos/Logo.go.svg b/src/assets/props/Logo.go.svg
similarity index 100%
rename from src/assets/logos/Logo.go.svg
rename to src/assets/props/Logo.go.svg
diff --git a/src/assets/logos/Logo.java.svg b/src/assets/props/Logo.java.svg
similarity index 100%
rename from src/assets/logos/Logo.java.svg
rename to src/assets/props/Logo.java.svg
diff --git a/src/assets/logos/Logo.kotlin.svg b/src/assets/props/Logo.kotlin.svg
similarity index 100%
rename from src/assets/logos/Logo.kotlin.svg
rename to src/assets/props/Logo.kotlin.svg
diff --git a/src/assets/logos/Logo.python.svg b/src/assets/props/Logo.python.svg
similarity index 100%
rename from src/assets/logos/Logo.python.svg
rename to src/assets/props/Logo.python.svg
diff --git a/src/assets/logos/Logo.ruby.svg b/src/assets/props/Logo.ruby.svg
similarity index 100%
rename from src/assets/logos/Logo.ruby.svg
rename to src/assets/props/Logo.ruby.svg
diff --git a/src/assets/logos/Poulpe.ludique.svg b/src/assets/props/Poulpe.ludique.svg
similarity index 100%
rename from src/assets/logos/Poulpe.ludique.svg
rename to src/assets/props/Poulpe.ludique.svg
diff --git a/src/assets/logos/algue.svg b/src/assets/props/algue.svg
similarity index 100%
rename from src/assets/logos/algue.svg
rename to src/assets/props/algue.svg
diff --git a/src/assets/logos/bateau.svg b/src/assets/props/bateau.svg
similarity index 100%
rename from src/assets/logos/bateau.svg
rename to src/assets/props/bateau.svg
diff --git a/src/assets/logos/donjon.svg b/src/assets/props/donjon.svg
similarity index 100%
rename from src/assets/logos/donjon.svg
rename to src/assets/props/donjon.svg
diff --git a/src/assets/props/epf_logo.png b/src/assets/props/epf_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a512323e12cb0e65e8762aae4bea8796e34c9856
Binary files /dev/null and b/src/assets/props/epf_logo.png differ
diff --git "a/src/assets/logos/e\314\201toile.de.mer.svg" "b/src/assets/props/e\314\201toile.de.mer.svg"
similarity index 100%
rename from "src/assets/logos/e\314\201toile.de.mer.svg"
rename to "src/assets/props/e\314\201toile.de.mer.svg"
diff --git a/src/assets/props/insa_logo.png b/src/assets/props/insa_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f52d38829da743d43c61f01f57f045119d7c0154
Binary files /dev/null and b/src/assets/props/insa_logo.png differ
diff --git a/src/assets/logos/logo.rust.png b/src/assets/props/logo.rust.png
similarity index 100%
rename from src/assets/logos/logo.rust.png
rename to src/assets/props/logo.rust.png
diff --git a/src/assets/logos/personnage.professeur.svg b/src/assets/props/personnage.professeur.svg
similarity index 100%
rename from src/assets/logos/personnage.professeur.svg
rename to src/assets/props/personnage.professeur.svg
diff --git a/src/assets/logos/pieuvre.svg b/src/assets/props/pieuvre.svg
similarity index 100%
rename from src/assets/logos/pieuvre.svg
rename to src/assets/props/pieuvre.svg
diff --git a/src/js/components/Button/Button.js b/src/js/components/Button/Button.js
new file mode 100644
index 0000000000000000000000000000000000000000..b460a6d84468b3592a84c6fd393650e1e3c391e4
--- /dev/null
+++ b/src/js/components/Button/Button.js
@@ -0,0 +1,19 @@
+import {Button as AntButton}  from "antd";
+import styles from './Button.module.scss';
+
+const Button = (props) => {
+    return (
+        <AntButton
+            className={styles.TakiButton}
+            type={"primary"}
+            shape={"round"}
+            icon={props.icon}
+            disabled={props.disabled}
+            onClick={props.action}
+        >
+            {props.children}
+        </AntButton>
+    );
+}
+
+export default Button;
\ No newline at end of file
diff --git a/src/js/components/Button/Button.module.scss b/src/js/components/Button/Button.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..af9a9c962caa215981ce746f5f61fe71a8615455
--- /dev/null
+++ b/src/js/components/Button/Button.module.scss
@@ -0,0 +1,21 @@
+@import '../../../style/colors';
+@import '../../../style/fonts';
+
+.TakiButton {
+    font-family: $primary_font;
+    background: $primary_pink;
+    color: white;
+    border-color: $primary_pink;
+
+    &:hover {
+        border-color: white;
+        background-color: $primary_pink;
+    }
+
+    &:focus {
+        background: $primary_pink;
+        border-color: $primary_pink;
+    }
+
+}
+
diff --git a/src/js/components/Link/Link.js b/src/js/components/Link/Link.js
new file mode 100644
index 0000000000000000000000000000000000000000..21d918b32730d28f64c3c3eb73e1be157ed4703d
--- /dev/null
+++ b/src/js/components/Link/Link.js
@@ -0,0 +1,17 @@
+import {Button as AntButton}  from "antd";
+import styles from './Link.module.scss';
+
+const Link = (props) => {
+    const {active} = props;
+    return (
+        <AntButton
+            className={styles.TakiLink}
+            type={"link"}
+            active={active}
+        >
+            {props.children}
+        </AntButton>
+    );
+}
+
+export default Link;
\ No newline at end of file
diff --git a/src/js/components/Link/Link.module.scss b/src/js/components/Link/Link.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..8cb47ca8068541273782a6e0f3ac0e05785b146f
--- /dev/null
+++ b/src/js/components/Link/Link.module.scss
@@ -0,0 +1,21 @@
+@import '../../../style/colors';
+@import '../../../style/fonts';
+
+.TakiLink {
+  font-family: $primary_font;
+  color: $primary_black;
+  font-weight: $primary_font_weight;
+
+  &:hover {
+    color: $primary_pink;
+    text-underline-position: under;
+  }
+
+  &:focus {
+    color: $primary_pink;
+  }
+
+  &:active {
+    color: $primary_pink;
+  }
+}
diff --git a/src/js/components/MultiColoredText/MultiColoredText.js b/src/js/components/MultiColoredText/MultiColoredText.js
new file mode 100644
index 0000000000000000000000000000000000000000..b12b35f8c9b59023aaf4a46b4d5039b5bc5f6cd1
--- /dev/null
+++ b/src/js/components/MultiColoredText/MultiColoredText.js
@@ -0,0 +1,14 @@
+const MultiColoredText = (props) => {
+    const {content} = props;
+    // content = [{text, color}]
+    return (
+        <div>
+            {content.map((part) => {
+                return <span style={{color: part.color}}>{part.text}</span>
+            })
+            }
+        </div>
+    );
+};
+
+export default MultiColoredText;
\ No newline at end of file
diff --git a/src/js/components/MultiColoredText/MultiColoredText.module.scss b/src/js/components/MultiColoredText/MultiColoredText.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/js/components/TopLinks/TopLInks.js b/src/js/components/TopLinks/TopLInks.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdad68297e479bcfb4d43bc8d62f8be99b410170
--- /dev/null
+++ b/src/js/components/TopLinks/TopLInks.js
@@ -0,0 +1,18 @@
+import Link from "../Link/Link";
+
+
+const TopLinks = () => {
+    return (
+        <div className="top-links">
+            <div className="logo">DEADLOCK</div>
+            <Link>Un IDE complet</Link>
+            <Link>L'algorithme est votre mâitre mot ?</Link>
+            <Link>Comment suivre vos étudiants ?</Link>
+            <Link>Apprendre de manière ludique</Link>
+            <Link>Article</Link>
+            <Link>Contact</Link>
+        </div>
+    );
+}
+
+export default TopLinks;
\ No newline at end of file
diff --git a/src/js/components/TopLinks/TopLinks.module.scss b/src/js/components/TopLinks/TopLinks.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e6f725ad1feda997f693ebfef21f6a5647dc3a09
--- /dev/null
+++ b/src/js/components/TopLinks/TopLinks.module.scss
@@ -0,0 +1,15 @@
+@import '../../../style/colors';
+@import '../../../style/fonts';
+
+.logo {
+  float: left;
+  max-width: 5vw;
+  max-height: 3vh;
+  font-size: 3rem;
+  font-family: $primary_font;
+}
+
+.top-links {
+  font-family: $primary_font;
+  font-size: 3rem;
+}
\ No newline at end of file
diff --git a/src/js/pages/MainPage,module.scss b/src/js/pages/MainPage,module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e0f549157550f4928db01ccbe3770e68d2fc69bd
--- /dev/null
+++ b/src/js/pages/MainPage,module.scss
@@ -0,0 +1,36 @@
+@import '../../style/colors';
+@import '../../style/fonts';
+
+
+
+.top-bar{
+    background: $primary_beige;
+    position: fixed;
+    z-index: 1;
+    width: 100%;
+
+    .logo {
+        float: left;
+        width: 120px;
+        height: 31px;
+        font-size: 12px;
+        font-family: $primary_font;
+    }
+
+    .top-links {
+        font-family: $primary_font;
+        font-size: 12px;
+    }
+
+}
+
+.site-layout {
+    background: $primary_lightblue;
+}
+
+.footer {
+    text-align: center;
+    font-family: $primary_font;
+    font-weight: $primary_font_weight
+}
+
diff --git a/src/js/pages/MainPage.js b/src/js/pages/MainPage.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ee297db46a90515b612d740b51fc920229d5cad
--- /dev/null
+++ b/src/js/pages/MainPage.js
@@ -0,0 +1,44 @@
+import {Layout} from "antd";
+import "./MainPage,module.scss";
+import Link from "../components/Link/Link";
+import LandingSection from "../sections/LandingSection/LandingSection";
+import VscodeSection from "../sections/VscodeSection/VscodeSection";
+
+
+import TopLinks from "../components/TopLinks/TopLInks";
+import CloudSection from "../sections/CloudSection/CloudSection";
+import StatsSection from "../sections/StatsSection/StatsSection";
+import FeatureSection from "../sections/FeatureSection/FeatureSection";
+import TowerSection from "../sections/TowerSection/TowerSection";
+import OctopusSection from "../sections/OctopusSection/OctopusSection";
+import BottomSection from "../sections/BottomSection/BottomSection";
+
+const {Header, Content, Footer} = Layout;
+
+
+const MainPage = () => {
+    return (
+        <Layout>
+            <Header className={"top-bar"}>
+                <TopLinks/>
+            </Header>
+            <Content className="site-layout">
+                <LandingSection/>
+                <VscodeSection/>
+                <CloudSection/>
+                <StatsSection/>
+                <FeatureSection/>
+                <TowerSection/>
+                <OctopusSection/>
+                <BottomSection/>
+            </Content>
+            <Footer className="footer">
+                <Link>Contact</Link>
+                <Link>Démo</Link>
+                <Link>Fait avec amour par Takima {"<3"}</Link>
+            </Footer>
+        </Layout>
+    );
+}
+
+export default MainPage;
\ No newline at end of file
diff --git a/src/js/sections/BottomSection/BottomSection.js b/src/js/sections/BottomSection/BottomSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2bf7efb2c8bc5ed38b76b8b19f39ea7c025377a
--- /dev/null
+++ b/src/js/sections/BottomSection/BottomSection.js
@@ -0,0 +1,54 @@
+import styles from "./BottomSection.module.scss";
+import Button from "../../components/Button/Button";
+
+import logoInsa from "../../../assets/props/insa_logo.png";
+import logoEpf from "../../../assets/props/epf_logo.png"
+
+
+
+const BottomSection = () => {
+    return (
+        <div className={styles.BottomSection}>
+            <div className={styles.MiddleBlock}>
+                <p className={styles.Title}>
+                    On en parle à l'INSA de Rouen avec Takima
+                </p>
+                <div className={styles.Caption}>
+                    <div className={styles.Comments}>
+                        <p className={styles.FirstComment}>
+                            Comment garder la proximité des TPs sur site lorsque vos étudiants sont confinés.
+                        </p>
+                        <p className={styles.SecondComment}>
+                            Retour d'expérience sur l'outillage et notamment Deadlock pour des séances de tp@home en période de confinement.
+                        </p>
+                    </div>
+                    <div className={styles.ButtonContainer}>
+                        <Button>Acceder à l'article</Button>
+                    </div>
+                </div>
+
+                <div className={styles.BottomBlock}>
+                    <div className={styles.Logos}>
+                        <img src={logoInsa} alt={"insa logo"}/>
+                        <img src={logoEpf} alt={"epf logo"}/>
+                        <p>
+                            Ils ont déjà expérimenté notre plateforme.
+                        </p>
+                    </div>
+                    <div className={styles.ContactLinks}>
+                        <p className={styles.BigCaption}>
+                            Offrez à vos étudiants les meilleurs outils pour apprendre.
+                        </p>
+                        <Button>Contactez-nous</Button>
+                        <p className={styles.SmallCaption}>
+                            Pour être les prochains !
+                        </p>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    );
+}
+
+export default BottomSection;
\ No newline at end of file
diff --git a/src/js/sections/BottomSection/BottomSection.module.scss b/src/js/sections/BottomSection/BottomSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2a1927f24f08c50069e015ca2d531e93ce984602
--- /dev/null
+++ b/src/js/sections/BottomSection/BottomSection.module.scss
@@ -0,0 +1,141 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.BottomSection {
+  background-image: url('#{$assetPath}/curves/courbe_4.png'), url('#{$assetPath}/props/bateau.svg'), url('#{$assetPath}/props/algue.svg');
+  background-repeat: no-repeat;
+  background-position: bottom, 105% 40%, -5% 55%;
+  background-size: 100% 50%, 35% 35%, 40% 40%;
+  min-height: 180vh;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  font-family: $primary_font;
+  font-weight: $primary_font_weight;
+  padding-top: 10%;
+  position: relative;
+
+  .MiddleBlock {
+    padding: 2% 2%;
+    background: $primary_beige;
+    color: $primary_black;
+    border-radius: 10px;
+    min-height: 30%;
+    max-width: 50vw;
+
+    display: flex;
+    flex-direction: column;
+    text-align: left;
+
+
+    .Title {
+      font-size: 3em;
+      text-align: center;
+    }
+
+    .Caption {
+      padding: 0 2% 0 0;
+      display: flex;
+      flex-direction: row;
+
+
+      .Comments {
+        display: inline-block;
+
+
+        .FirstComment {
+          font-size: 1.5em;
+          max-width: 70%;
+        }
+
+        .SecondComment {
+          font-size: 1em;
+          max-width: 70%;
+        }
+
+      }
+
+      .ButtonContainer {
+        flex-basis: 35%;
+        min-width: 30%;
+        position: center;
+        padding-top: 5%;
+        padding-right: 10%;
+
+
+        Button {
+          font-family: $primary_font;
+          font-weight: $primary_font_weight;
+
+          width: 100%;
+          height: 50%;
+
+        }
+
+      }
+
+
+    }
+
+  }
+
+  .BottomBlock {
+
+    position: absolute;
+    bottom: 10%;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+
+    .Logos {
+      max-width: 40%;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+
+      img {
+        margin-bottom: 2%;
+        width: 50%;
+        height: 40%;
+        background: white;
+      }
+
+      p {
+        text-align: center;
+        color: white;
+        font-size: 1em;
+      }
+    }
+
+    .ContactLinks {
+      max-width: 20%;
+      align-items: center;
+
+
+      display: flex;
+      flex-direction: column;
+
+      .BigCaption {
+        text-align: left;
+        color: white;
+        font-size: 1.5em;
+      }
+
+      Button {
+        align-items: center;
+        margin-bottom: 5%;
+        font-family: $primary_font;
+        font-weight: $primary_font_weight;
+        width: 90%;
+
+      }
+
+      .SmallCaption {
+        color: white;
+        font-size: 1em;
+      }
+    }
+  }
+
+}
diff --git a/src/js/sections/CloudSection/CloudSection.js b/src/js/sections/CloudSection/CloudSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..c00bb96797c4d8ae1a881f292fa109f1294997d9
--- /dev/null
+++ b/src/js/sections/CloudSection/CloudSection.js
@@ -0,0 +1,41 @@
+import styles from "./CloudSection.module.scss";
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+
+import cloud from "../../../assets/main/nuage_icones.png";
+
+
+
+const black = "#1D2C38";
+const white = "white";
+const blue = "#6FACC6";
+
+const upperBlockContent = [
+    {text: "Le langage n'a pas d'importance, ", color: blue},
+    {text: "l'algorithme est votre maître-mot ?", color: black}
+];
+
+const bottomBlockTitle = [
+    {text: "Nous possédons ", color: white},
+    {text: "des exercices multi-langages.", color: black}
+];
+
+
+const CloudSection = () => {
+    return (
+        <div className={styles.CloudSection}>
+            <div className={styles.UpperBlock}>
+                <MultiColoredText content={upperBlockContent} />
+
+            </div>
+            <img src={cloud} alt="technologies cloud" className={styles.Cloud}/>
+            <div className={styles.BottomBlock}>
+                    <MultiColoredText content={bottomBlockTitle} />
+                <p className={styles.Caption}>
+                    Vous pouvez en ajouter autant que vous le souhaitez !
+                </p>
+            </div>
+        </div>
+    );
+}
+
+export default CloudSection;
\ No newline at end of file
diff --git a/src/js/sections/CloudSection/CloudSection.module.scss b/src/js/sections/CloudSection/CloudSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e5a39201e1e7ca4e2cd7a0eeede322893f90f525
--- /dev/null
+++ b/src/js/sections/CloudSection/CloudSection.module.scss
@@ -0,0 +1,39 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.CloudSection {
+  background-image: url('#{$assetPath}/curves/courbe_2.png');
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100% 100%;
+  min-height: 100vh;
+  vertical-align: center;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  font-family: $primary_font;
+  font-weight: $primary_font_weight;
+
+  .UpperBlock {
+    padding-top: 5%;
+    font-size: 2.5em;
+
+  }
+
+  .Cloud {
+    padding-top: 5%;
+    max-width: 50vw;
+    max-height: 60vh;
+  }
+
+  .BottomBlock {
+    padding-top: 5%;
+    font-size: 2rem;
+
+    .Caption {
+      padding-top: 10px;
+      font-size: 1.5rem;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/js/sections/FeatureSection/FeatureSection.js b/src/js/sections/FeatureSection/FeatureSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1238acf20d0d4747e5314407fbd258eb4c01dc2
--- /dev/null
+++ b/src/js/sections/FeatureSection/FeatureSection.js
@@ -0,0 +1,57 @@
+import styles from "./FeatureSection.module.scss";
+import {Col, Row} from "antd";
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+import {CheckOutlined} from "@ant-design/icons";
+
+const pink = "#CB2F73";
+const black = "#1D2C38";
+
+const feature1 = [
+    {text: "Créer facilement ", color: pink},
+    {text: "des parcours d'exercice pour faire ses évaluations sur la palteforme.", color: black}
+];
+
+const feature2 = [
+    {text: "Créer des TP ", color: pink},
+    {text: "sur la plateforme sans devoir configurer plein de machines.", color: black}
+];
+
+const FeatureSection = () => {
+    return(
+        <div className={styles.FeatureSection}>
+            <Row>
+                <Col span={12}>
+                    <div className={styles.LeftSide}>
+                        <div className={styles.Feature}>
+                            <CheckOutlined className={styles.Checkmark}/>
+                            <MultiColoredText content={feature1}/>
+                        </div>
+                        <div className={styles.Feature}>
+                            <CheckOutlined className={styles.Checkmark}/>
+                            <MultiColoredText content={feature2}/>
+                        </div>
+                    </div>
+                </Col>
+                <Col span={12}>
+                    <div className={styles.RightSide}>
+                        <div className={styles.Bubble}>
+                            <p>
+                                "L'un des points forts de Deadlock, sur le volet rapprochement de l'enseignant et de l'étudiant en situation distante, tient notamment à la frise temporelle."
+                            </p>
+                            <p>
+                                "Les fonctionnalités fournies par Deadlock (catalogue d'exercices, environnement prêt à l'emploi en mode web, inscription en SSO, frise temporelle) ont permis de réduire la distance."
+                            </p>
+                        </div>
+                        <div className={styles.Author}>
+                            Frédéric BAUCHER, <br/>
+                            Professeur Associé, INSA-ROUEN
+                        </div>
+
+                    </div>
+                </Col>
+            </Row>
+        </div>
+    );
+};
+
+export default FeatureSection;
\ No newline at end of file
diff --git a/src/js/sections/FeatureSection/FeatureSection.module.scss b/src/js/sections/FeatureSection/FeatureSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7986b1871e49e5b15be958070782bf7cf2dc487d
--- /dev/null
+++ b/src/js/sections/FeatureSection/FeatureSection.module.scss
@@ -0,0 +1,71 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.FeatureSection {
+  background: white;
+  background-size: 100% 100%;
+  position: relative;
+  min-height: 60vh;
+
+  .LeftSide {
+    padding-top: 5%;
+    padding-left: 30%;
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    display: flex;
+    flex-direction: column;
+
+    .Feature {
+      display : flex;
+      flex-direction: row;
+      padding: 10% 5% 5% 5%;
+      font-size: 2em;
+      line-height: 2.5rem;
+
+      .Checkmark {
+        padding-right: 5%;
+        font-size: 4rem;
+      }
+    }
+  }
+
+  .RightSide {
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    color: $primary_black;
+    padding-top: 10%;
+
+    // taken from
+    // https://codingislove.com/css-speech-bubbles/
+
+    .Bubble {
+
+      width: 70%;
+      margin: 50px auto;
+      position:relative;
+      border: solid $primary_black;
+      padding: 5px 5px;
+
+      &:before {
+        content: "";
+        width: 0px;
+        height: 0px;
+        position: absolute;
+        border-right: 10px solid $primary_black;
+        border-left: 10px solid transparent;
+        border-top: 10px solid $primary_black;
+        border-bottom: 10px solid transparent;
+        bottom: -20px;
+        left: 50px;
+      }
+
+    }
+
+    .Author {
+      position: relative;
+      padding-left: 25%;
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/js/sections/LandingSection/LandingSection.js b/src/js/sections/LandingSection/LandingSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a5cfb4f526635b447f980d130bbd30a90fd29a5
--- /dev/null
+++ b/src/js/sections/LandingSection/LandingSection.js
@@ -0,0 +1,35 @@
+import React from 'react';
+
+import styles from "./LandingSection.module.scss";
+import {Col, Row} from "antd";
+import octopus from '../../../assets/props/pieuvre.svg'
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+
+// TODO export variables from colors.scss
+const landingPageMessage = [
+    {text: "Votre outil pour ", color: "#1D2C38"},
+    {text: "enseigner l'informatique", color: "#CB2F73"}
+];
+
+
+const LandingSection = () => {
+    return (
+        <div className={styles.LandingSection}>
+            <Row>
+                <Col span={12}>
+                    <div className={styles.LeftSide}>
+                        <img src={octopus} alt={"octopus"} className={styles.Octopus}/>
+                    </div>
+                </Col>
+                <Col span={12}>
+                    <div className={styles.RightSide}>
+                        <p className={styles.Title}>DEADLOCK <br/>
+                        <span className={styles.Caption}><MultiColoredText content={landingPageMessage}/></span></p>
+                    </div>
+                </Col>
+            </Row>
+        </div>
+    );
+}
+
+export default LandingSection;
\ No newline at end of file
diff --git a/src/js/sections/LandingSection/LandingSection.module.scss b/src/js/sections/LandingSection/LandingSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..30e962e28fcc7da9120f413bf1fc4037fd7d967a
--- /dev/null
+++ b/src/js/sections/LandingSection/LandingSection.module.scss
@@ -0,0 +1,41 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.LandingSection {
+  background-image: url('#{$assetPath}/curves/courbe_1.png');
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100% 100%;
+  min-height: 100vh;
+
+  .LeftSide {
+    padding-top: 20%;
+    padding-left: 40%;
+
+    .Octopus {
+      max-width: 45vw;
+      max-height: 45vh;
+    }
+  }
+
+  .RightSide {
+    color: $primary_black;
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    padding-top: 30%;
+    padding-right: 30%;
+    text-align: center;
+    vertical-align: middle;
+
+    .Title {
+      font-size: 7rem;
+
+      .Caption {
+        font-size: 2rem;
+      }
+
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/js/sections/OctopusSection/OctopusSection.js b/src/js/sections/OctopusSection/OctopusSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..4cf8a9c1a81b13ca704debdefddc4c23aa7671e5
--- /dev/null
+++ b/src/js/sections/OctopusSection/OctopusSection.js
@@ -0,0 +1,14 @@
+import styles from "./OctopusSection.module.scss";
+
+import octopusImage from "../../../assets/main/poulpe_ludique_big.png";
+
+
+const OctopusSection = () => {
+    return (
+        <div className={styles.OctopusSection}>
+            <img src={octopusImage} alt="octopus" className={styles.OctopusImage}/>
+        </div>
+    );
+}
+
+export default OctopusSection;
\ No newline at end of file
diff --git a/src/js/sections/OctopusSection/OctopusSection.module.scss b/src/js/sections/OctopusSection/OctopusSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b3375a9c0a7c6b2275ad7e47afa8599b58c79c05
--- /dev/null
+++ b/src/js/sections/OctopusSection/OctopusSection.module.scss
@@ -0,0 +1,16 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.OctopusSection {
+  background-image: url('#{$assetPath}/curves/courbe_3.png');
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100% 100%;
+  min-height: 100vh;
+
+  .OctopusImage {
+    max-width: 100%;
+    max-height: 90%;
+  }
+}
diff --git a/src/js/sections/StatsSection/StatsSection.js b/src/js/sections/StatsSection/StatsSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..ced055621d2195e3c7bd1a796f7fa574d186877b
--- /dev/null
+++ b/src/js/sections/StatsSection/StatsSection.js
@@ -0,0 +1,39 @@
+import styles from "./StatsSection.module.scss";
+import {Col, Row} from "antd";
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+
+import statsImage from "../../../assets/main/notes.png";
+
+const black = "#1D2C38";
+const white = "white";
+
+const title = [
+    {text: "Comment suivre ", color: white},
+    {text: "vos étudiants ? ", color: black},
+];
+
+const StatsSection = () => {
+    return (
+        <div className={styles.StatsSection}>
+            <Row>
+                <Col span={12}>
+                    <div className={styles.LeftSide}>
+                        <p className={styles.Title}>
+                            <MultiColoredText content={title}/>
+                        </p>
+                        <p className={styles.Caption}>
+                            Vous pouvez relire le code de vos étudiants, les évaluer, leur faire des retours
+                        </p>
+                    </div>
+                </Col>
+                <Col span={12}>
+                    <div className={styles.RightSide}>
+                        <img src={statsImage} alt={"notes screen"} className={styles.NotesImage}/>
+                    </div>
+                </Col>
+            </Row>
+        </div>
+    );
+}
+
+export default StatsSection;
\ No newline at end of file
diff --git a/src/js/sections/StatsSection/StatsSection.module.scss b/src/js/sections/StatsSection/StatsSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..9a6ef58e158fec534cf9471f005499244e00a05a
--- /dev/null
+++ b/src/js/sections/StatsSection/StatsSection.module.scss
@@ -0,0 +1,48 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.StatsSection {
+  background-color: $primary_lightblue;
+  background-image: url('#{$assetPath}/props/personnage.professeur.svg');
+  background-position: 15% 100%;
+  background-size: 25% 25%;
+  background-repeat: no-repeat;
+  position: relative;
+  min-height: 80vh;
+
+  .LeftSide {
+
+    color: $primary_black;
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    padding-top: 25%;
+    padding-left: 10%;
+    vertical-align: middle;
+    line-height: 4em;
+
+    .Title {
+
+      font-size: 3rem;
+
+    }
+
+    .Caption {
+      font-size: 1.5em;
+      line-height: 1em;
+      color: white;
+    }
+
+  }
+
+  .RightSide {
+
+
+    .NotesImage {
+      padding-top: 20%;
+      max-width: 50vw;
+      max-height: 50vh;
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/js/sections/TowerSection/TowerSection.js b/src/js/sections/TowerSection/TowerSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..a437312c52dc537ec1d7e1b08d22af5985b86e06
--- /dev/null
+++ b/src/js/sections/TowerSection/TowerSection.js
@@ -0,0 +1,40 @@
+import styles from "./TowerSection.module.scss";
+import {Col, Row} from "antd";
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+
+import towerImage from "../../../assets/props/donjon.svg";
+
+const black = "#1D2C38";
+const white = "white";
+
+const title = [
+    {text: "Nous pensons que  ", color: white},
+    {text: "apprendre de manière ludique ", color: black},
+    {text: "favorise l'investissement des étudiants.", color: white}
+];
+
+const TowerSection = () => {
+    return (
+        <div className={styles.TowerSection}>
+            <Row>
+                <Col span={12}>
+                    <div className={styles.LeftSide}>
+                        <img src={towerImage} alt={"tower"} className={styles.TowerImage}/>
+                    </div>
+                </Col>
+                <Col span={12}>
+                    <div className={styles.RightSide}>
+                        <p className={styles.Title}>
+                            <MultiColoredText content={title}/>
+                        </p>
+                        <p className={styles.Caption}>
+                            C'est pourquoi nous avons ajouté plusieurs éléments de jeux au sein de notre palteforme.
+                        </p>
+                    </div>
+                </Col>
+            </Row>
+        </div>
+    );
+}
+
+export default TowerSection;
\ No newline at end of file
diff --git a/src/js/sections/TowerSection/TowerSection.module.scss b/src/js/sections/TowerSection/TowerSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..88c3b451b6cafcc998b809bb2a9ee269f3f33cd2
--- /dev/null
+++ b/src/js/sections/TowerSection/TowerSection.module.scss
@@ -0,0 +1,42 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.TowerSection {
+  background: $primary_lightblue;
+  background-size: 100% 100%;
+  position: relative;
+  min-height: 70vh;
+
+  .LeftSide {
+    padding-top: 10%;
+    padding-left: 50%;
+
+    .TowerImage {
+      max-width: 40vw;
+      max-height: 45vh;
+    }
+  }
+
+  .RightSide {
+    color: $primary_black;
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    padding-top: 15%;
+    padding-right: 30%;
+    vertical-align: middle;
+    line-height: 4em;
+
+    .Title {
+
+      font-size: 3rem;
+
+    }
+    .Caption {
+      font-size: 1.5em;
+      line-height: 1em;
+      color: white;
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/js/sections/VscodeSection/VscodeSection.js b/src/js/sections/VscodeSection/VscodeSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3f711ccbf70cd743bcb147bbcea4008b49c43a7
--- /dev/null
+++ b/src/js/sections/VscodeSection/VscodeSection.js
@@ -0,0 +1,40 @@
+import styles from "./VscodeSection.module.scss";
+import {Col, Row} from "antd";
+import MultiColoredText from "../../components/MultiColoredText/MultiColoredText";
+
+import vscodeImage from "../../../assets/main/vscode_screen.png";
+
+const black = "#1D2C38";
+const white = "white";
+
+const vscodeTitle = [
+    {text: "Un ", color: white},
+    {text: "IDE complet ", color: black},
+    {text: "pour chacun de vos étudiants", color: white}
+];
+
+const VscodeSection = () => {
+    return (
+        <div className={styles.VscodeSection}>
+            <Row>
+                <Col span={16}>
+                    <div className={styles.LeftSide}>
+                        <img src={vscodeImage} alt={"vscodeScreen"} className={styles.VscodeImage}/>
+                    </div>
+                </Col>
+                <Col span={8}>
+                    <div className={styles.RightSide}>
+                        <p className={styles.Title}>
+                            <MultiColoredText content={vscodeTitle}/>
+                        </p>
+                            <p className={styles.Caption}>
+                                Plus besoin de se soucier de l'environnement, de la machine, un navigateur connecté suffit.
+                            </p>
+                    </div>
+                </Col>
+            </Row>
+        </div>
+    );
+}
+
+export default VscodeSection;
\ No newline at end of file
diff --git a/src/js/sections/VscodeSection/VscodeSection.module.scss b/src/js/sections/VscodeSection/VscodeSection.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..4c2f9bc5c4ef654e6b8ecb399182a46565d42c40
--- /dev/null
+++ b/src/js/sections/VscodeSection/VscodeSection.module.scss
@@ -0,0 +1,43 @@
+@import "../../../utils";
+@import "../../../style/fonts";
+@import "../../../style/colors";
+
+.VscodeSection {
+  background: $primary_lightblue;
+  background-size: 100% 100%;
+  position: relative;
+  min-height: 85vh;
+
+  .LeftSide {
+    padding-top: 15%;
+    padding-left: 30%;
+
+    .VscodeImage {
+      max-width: 40vw;
+      max-height: 45vh;
+    }
+  }
+
+  .RightSide {
+    color: $primary_black;
+    font-weight: $primary_font_weight;
+    font-family: $primary_font;
+    padding-top: 35%;
+    padding-right: 30%;
+    text-align: center;
+    vertical-align: middle;
+    line-height: 4em;
+
+    .Title {
+
+      font-size: 3rem;
+
+    }
+    .Caption {
+      font-size: 1.5em;
+      line-height: 1em;
+      color: white;
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/style/colors.scss b/src/style/colors.scss
index c9ad617e0ce94d6d5cee377446b6df919222906f..b59dc69e59cba04cbdc97580a82538af13e7a2ce 100644
--- a/src/style/colors.scss
+++ b/src/style/colors.scss
@@ -2,4 +2,9 @@ $primary_black: #1D2C38;
 $primary_pink: #CB2F73;
 $primary_lightblue: #6FACC6;
 $primary_beige: #FDE7D3;
-$primary_very_lightblue: #B1DEF2;
\ No newline at end of file
+$primary_very_lightblue: #B1DEF2;
+
+:export {
+  primaryBlack: $primary_black;
+  primaryPink: $primary_pink;
+}
\ No newline at end of file
diff --git a/src/style/fonts.scss b/src/style/fonts.scss
index af643f2c72e511849979e9069655e7c8ad7c9293..520dd6b6533dfd348714d0da33330021340cf3f7 100644
--- a/src/style/fonts.scss
+++ b/src/style/fonts.scss
@@ -1 +1,2 @@
-$primary_font: Hiragino Kaku Gothic StdN;
\ No newline at end of file
+$primary_font: Hiragino Kaku Gothic StdN 800;
+$primary_font_weight: 800;
\ No newline at end of file
diff --git a/src/utils.scss b/src/utils.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d2ed4007e9a8ee217463faf383099e91987e4b2d
--- /dev/null
+++ b/src/utils.scss
@@ -0,0 +1 @@
+$assetPath : "/assets";
\ No newline at end of file