diff --git a/apps/landing/static/images/fact-1.png b/apps/landing/static/images/fact-1.png
new file mode 100644
index 0000000..d2f8bc8
--- /dev/null
+++ b/apps/landing/static/images/fact-1.png
Binary files differ
diff --git a/apps/landing/static/images/fact-2.png b/apps/landing/static/images/fact-2.png
new file mode 100644
index 0000000..3d24ceb
--- /dev/null
+++ b/apps/landing/static/images/fact-2.png
Binary files differ
diff --git a/apps/landing/static/images/fact-3.png b/apps/landing/static/images/fact-3.png
new file mode 100644
index 0000000..1f2b7e5
--- /dev/null
+++ b/apps/landing/static/images/fact-3.png
Binary files differ
diff --git a/apps/landing/static/images/fact-4.png b/apps/landing/static/images/fact-4.png
new file mode 100644
index 0000000..6254c72
--- /dev/null
+++ b/apps/landing/static/images/fact-4.png
Binary files differ
diff --git a/apps/landing/static/images/fact-5.png b/apps/landing/static/images/fact-5.png
new file mode 100644
index 0000000..30301cd
--- /dev/null
+++ b/apps/landing/static/images/fact-5.png
Binary files differ
diff --git a/apps/landing/static/images/fact-6.png b/apps/landing/static/images/fact-6.png
new file mode 100644
index 0000000..ee79e69
--- /dev/null
+++ b/apps/landing/static/images/fact-6.png
Binary files differ
diff --git a/apps/landing/static/images/fact-7.png b/apps/landing/static/images/fact-7.png
new file mode 100644
index 0000000..8e940d7
--- /dev/null
+++ b/apps/landing/static/images/fact-7.png
Binary files differ
diff --git a/apps/landing/static/js/main.js b/apps/landing/static/js/main.js
new file mode 100644
index 0000000..2e6a436
--- /dev/null
+++ b/apps/landing/static/js/main.js
@@ -0,0 +1,109 @@
+let mouseOverEnabled = true;
+
+function handleImageChange(imageURL, index, factTitle) {
+    const factImage = document.getElementById("factImage");
+    if (factImage.src.endsWith(imageURL)) {
+        return;
+    };
+    highlightFact(index);
+    factImage.classList.add("fade-out");
+    setTimeout(() => {
+        factImage.src = imageURL;
+        factImage.alt = factTitle;
+        factImage.classList.remove("fade-out");
+    }, 300);
+};
+
+function highlightFact(index) {
+    const facts = document.querySelectorAll(".facts");
+    facts.forEach((fact, i) => {
+        if (i === index) {
+            fact.classList.add("active-fact");
+        } else {
+            fact.classList.remove("active-fact");
+        };
+    });
+};
+
+function handleMouseover(imageURL, index, factTitle) {
+    if (!mouseOverEnabled) {
+        return;
+    };
+    handleImageChange(imageURL, index, factTitle);
+};
+
+let scrollTimeout;
+let mouseoverTimeout;
+
+function delayScroll(func, delay) {
+    return function (...args) {
+        clearTimeout(scrollTimeout);
+        scrollTimeout = setTimeout(() => {
+            func.apply(this, args);
+        }, delay);
+    };
+}
+
+function delayMouseoverEnable(delay) {
+    clearTimeout(mouseoverTimeout);
+    mouseoverTimeout = setTimeout(() => {
+        mouseOverEnabled = true;
+    }, delay);
+}
+
+let lastScrollTop = 0;
+
+function getFirstVisibleFact() {
+    const facts = document.querySelectorAll(".facts");
+    const factImage = document.getElementById("factImageBox");
+    const imageBottom = factImage.getBoundingClientRect().bottom;
+
+    const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
+    const isScrollingDown = scrollTop > lastScrollTop;
+    lastScrollTop = scrollTop;
+
+    if (isScrollingDown) {
+        for (let i = 0; i < facts.length; i++) {
+            const rect = facts[i].getBoundingClientRect();
+            if (rect.top < window.innerHeight && rect.top >= imageBottom) {
+                return i;
+            };
+        };
+        return 7;
+    } else {
+        for (let i = 0; i < facts.length; i++) {
+            const rect = facts[i].getBoundingClientRect();
+            if (rect.top >= 0 && rect.top >= imageBottom) {
+                return i;
+            };
+        };
+    };
+    return 0;
+};
+
+document.addEventListener("DOMContentLoaded", function () {
+    const gridContainer = document.querySelector(".grid-container");
+    const facts = JSON.parse(gridContainer.dataset.facts);
+
+    const handleScroll = () => {
+        clearTimeout(scrollTimeout);
+        mouseOverEnabled = false;
+        scrollTimeout = setTimeout(() => {
+            const currentSection = getFirstVisibleFact();
+            handleImageChange(facts[currentSection].params.image, currentSection, facts[currentSection].params.title);
+            delayMouseoverEnable(800);
+        }, 300);
+    };
+
+    const checkAddRemoveScrollListener = () => {
+        if (window.innerWidth <= 768) {
+            window.addEventListener("scroll", handleScroll);
+        } else {
+            window.removeEventListener("scroll", handleScroll);
+        }
+    };
+
+    checkAddRemoveScrollListener();
+
+    window.addEventListener("resize", checkAddRemoveScrollListener);
+});
diff --git a/apps/landing/static/styles/style.css b/apps/landing/static/styles/style.css
new file mode 100644
index 0000000..dbe4305
--- /dev/null
+++ b/apps/landing/static/styles/style.css
@@ -0,0 +1,454 @@
+:root {
+  --bg: #d6d6d6;
+  --formBg: #3a3a3a;
+  --text: #3a3a3a;
+  --formText: #d6d6d6;
+  --button: #7f9f7f;
+  --logo: #d4888d;
+  --fontSize: 14px;
+}
+
+body {
+  background: var(--bg);
+  color: var(--text);
+  margin: 0;
+  display: flex;
+  min-height: 100vh;
+  font-family: Hack, monospace;
+  font-size: var(--fontSize);
+}
+
+a {
+  color: inherit;
+  text-decoration: none;
+}
+
+.container {
+  display: flex;
+  flex-direction: column;
+  flex: 1;
+  position: relative;
+  width: 100%;
+}
+
+.navbar {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  position: sticky;
+  top: 0;
+  background-color: var(--bg);
+  border-bottom: 1px dashed var(--formBg);
+  padding: 0 20px;
+  z-index: 100;
+}
+
+.logo {
+  font-weight: bold;
+  font-size: 1.6rem;
+  align-content: center;
+  height: 100%;
+  background-color: var(--formBg);
+}
+
+.logo a {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+
+.links {
+  display: flex;
+  align-items: center;
+  height: 100%;
+}
+
+.links a {
+  border-right: 1px dashed var(--formBg);
+  padding: 0 20px;
+  height: 100%;
+  align-content: center;
+}
+
+.links a:hover {
+  transform: scaleX(1);
+  text-decoration-line: underline;
+  text-decoration-color: var(--logo);
+}
+
+.logo-part1 {
+  color: var(--bg);
+}
+
+.logo-part2 {
+  color: var(--logo);
+}
+
+/* FACTS Grid Container */
+
+.facts-content {
+  display: flex;
+  flex-grow: 1;
+}
+
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  grid-template-rows: repeat(4, 1fr);
+  grid-template-areas:
+    "fact-1 large-box large-box large-box"
+    "fact-2 large-box large-box large-box"
+    "fact-3 large-box large-box large-box"
+    "fact-4 fact-5 fact-6 fact-7";
+  padding: 0 20px;
+}
+
+.facts {
+  border: 1px dashed var(--formBg);
+  display: flex;
+  justify-content: center;
+  border-top: none !important;
+  flex-direction: column;
+  transition: background-color 0.5s ease, color 0.5s ease;
+}
+
+.fact-image-box {
+  grid-area: large-box;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-right: 1px dashed var(--formBg);
+  border-bottom: 1px dashed var(--formBg);
+  padding: 5px;
+}
+
+.fact-image {
+  max-width: 80%;
+  max-height: 80%;
+  object-fit: cover;
+  transition: opacity 0.3s ease-in-out;
+  opacity: 1;
+}
+
+.fade-out {
+  opacity: 0;
+}
+
+.fact-1 {
+  grid-area: fact-1;
+}
+.fact-2 {
+  grid-area: fact-2;
+}
+.fact-3 {
+  grid-area: fact-3;
+}
+.fact-4 {
+  grid-area: fact-4;
+}
+.fact-5 {
+  grid-area: fact-5;
+  border-left: none !important;
+}
+.fact-6 {
+  grid-area: fact-6;
+  border-left: none !important;
+}
+.fact-7 {
+  grid-area: fact-7;
+  border-left: none !important;
+}
+
+.no-bottom-border {
+  border-bottom: none !important;
+}
+
+.fact-title {
+  display: block;
+  margin: 4px;
+  font-weight: bold;
+  padding-left: 1rem;
+}
+
+.facts p {
+  margin: 4px;
+  padding-left: 1rem;
+}
+
+.active-fact {
+  background-color: var(--button);
+  cursor: pointer;
+}
+
+/* Responsive adjustments */
+@media (max-width: 768px) {
+  .grid-container {
+    grid-template-columns: 1fr;
+    grid-template-rows: auto;
+    grid-template-areas:
+      "large-box"
+      "fact-1"
+      "fact-2"
+      "fact-3"
+      "fact-4"
+      "fact-5"
+      "fact-6"
+      "fact-7";
+  }
+
+  .fact-image-box {
+    position: sticky;
+    top: 30px;
+    z-index: 10;
+    background: var(--bg);
+    border-left: 1px dashed var(--formBg) !important;
+  }
+
+  .fact-5 {
+    grid-area: fact-5;
+    border-left: 1px dashed var(--formBg) !important;
+  }
+  .fact-6 {
+    grid-area: fact-6;
+    border-left: 1px dashed var(--formBg) !important;
+  }
+  .fact-7 {
+    grid-area: fact-7;
+    border-left: 1px dashed var(--formBg) !important;
+  }
+
+  .fact-title {
+    margin: 4px;
+    padding-top: 8px;
+    padding-bottom: 8px;
+    padding-left: 0.5rem;
+  }
+  .facts p {
+    margin: 4px;
+    padding-bottom: 8px;
+    padding-left: 0.5rem;
+  }
+}
+
+@media (max-width: 1200px) {
+  .fact-image {
+    max-width: 85%;
+    max-height: 85%;
+  }
+
+  .fact-image {
+    max-width: 80%;
+    max-height: 80%;
+    object-fit: cover;
+    transition: opacity 0.3s ease-in-out;
+    opacity: 1;
+  }
+
+  .fade-out {
+    opacity: 0;
+  }
+}
+
+@media (max-width: 992px) {
+  .fact-image {
+    max-width: 90%;
+    max-height: 90%;
+  }
+}
+
+@media (max-width: 768px) {
+  .fact-image {
+    max-width: 100%;
+    max-height: 100%;
+  }
+}
+
+/* FOOTER FORM START */
+
+.form-page {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex: 1;
+}
+
+.form-container {
+  max-width: 800px;
+  width: 100%;
+  padding: 20px;
+  background-color: var(--formBg);
+  color: var(--formText);
+  margin-left: 20px;
+  margin-right: 20px;
+}
+
+.footer-form {
+  background-color: var(--formBg);
+  padding: 20px;
+  display: flex;
+  justify-content: center;
+}
+
+.form-container-footer {
+  width: 100%;
+  max-width: 800px;
+  background-color: var(--formBg);
+  color: var(--formText);
+}
+
+.form-container-footer h2 {
+  margin-bottom: 20px;
+  font-size: 24px;
+  color: var(--formText);
+}
+
+.form-group-footer {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-direction: column;
+}
+
+.form-group-footer label {
+  display: block;
+  margin-bottom: 5px;
+  color: var(--formText);
+  margin-right: auto;
+}
+.input-area {
+  margin-bottom: 15px;
+}
+
+.form-group-footer input,
+.form-group-footer textarea {
+  width: 100%;
+  padding: 10px;
+  border: 1px solid var(--formText);
+  box-sizing: border-box;
+  color: var(--formText);
+  background-color: var(--formBg);
+  resize: vertical;
+}
+
+.form-group-footer input,
+.form-group-footer textarea:focus {
+  outline: none !important;
+  border: 1px solid var(--button);
+}
+
+.form-group-footer button {
+  width: auto;
+  padding: 10px 20px;
+  border: none;
+  background-color: var(--button);
+  color: var(--text);
+  font-size: 16px;
+  cursor: pointer;
+  margin-left: auto;
+}
+
+.form-group-footer button:hover {
+  background-color: #d4888d;
+}
+
+/* FOOTER FORM END */
+
+/* APPS START */
+.apps-grid {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  border: 1px dashed var(--formBg);
+  border-top: none !important;
+  margin-left: 20px;
+  margin-right: 20px;
+  overflow-y: auto;
+  overflow-x: hidden;
+  padding-top: 20px;
+  gap: 20px;
+}
+
+@media (max-width: 1200px) {
+  .apps-grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+@media (max-width: 768px) {
+  .apps-grid {
+    grid-template-columns: repeat(1, 1fr);
+  }
+}
+
+.app-card {
+  background-color: var(--formBg);
+  color: var(--formText);
+  padding: 20px;
+  box-shadow: 0 2px 4px var(--formBg);
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  height: 100%;
+  box-sizing: border-box;
+  position: relative;
+}
+
+.app-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 10px;
+}
+
+.app-header h2 {
+  margin: 0;
+  font-size: 1.5em;
+}
+
+.app-icon {
+  width: 45px;
+  height: 45px;
+  display: flex;
+  align-items: center;
+  color: var(--logo);
+}
+
+.app-card p {
+  margin: 10px 0;
+  flex-grow: 1;
+}
+
+.app-card a {
+  display: inline-block;
+  color: var(--button);
+  text-decoration: underline;
+  margin-top: auto;
+}
+
+/* SINGLE APP START */
+.app-detail {
+  padding: 20px;
+}
+
+.app-detail h1 {
+  margin-top: 0;
+}
+
+.app-card-link {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1;
+}
+
+/* SINGLE APP END */
+
+/* APPS END */
+
+/* ABOUT START */
+
+.about {
+  padding: 0 20px;
+}
+
+/* ABOUT END */
