diff --git a/apps/web/src/components/landing/FeatureCards.tsx b/apps/web/src/components/landing/FeatureCards.tsx
new file mode 100644
index 0000000..849afd0
--- /dev/null
+++ b/apps/web/src/components/landing/FeatureCards.tsx
@@ -0,0 +1,45 @@
+const features = [
+ {
+ emoji: "📱",
+ title: "Mobile-first",
+ description: "Designed for your thumb. Play on the go, anytime.",
+ },
+ {
+ emoji: "🌍",
+ title: "5 languages",
+ description:
+ "English, Italian, German, French, Spanish — with more on the way.",
+ },
+ {
+ emoji: "⚔️",
+ title: "Multiplayer coming",
+ description: "Challenge friends and see who has the bigger vocabulary.",
+ },
+];
+
+const FeatureCards = () => {
+ return (
+
+
+ Why lila
+
+
+
+ {features.map(({ emoji, title, description }) => (
+
+
{emoji}
+
{title}
+
+ {description}
+
+
+ ))}
+
+
+ );
+};
+
+export default FeatureCards;
diff --git a/apps/web/src/components/landing/Hero.tsx b/apps/web/src/components/landing/Hero.tsx
new file mode 100644
index 0000000..0297e53
--- /dev/null
+++ b/apps/web/src/components/landing/Hero.tsx
@@ -0,0 +1,64 @@
+import { Link } from "@tanstack/react-router";
+import { useSession } from "../../lib/auth-client";
+
+const Hero = () => {
+ const { data: session } = useSession();
+
+ return (
+
+
+
+ Vocabulary trainer
+
+
+
+
+ Meet{" "}
+
+ lila
+
+
+
+
+ Learn words.{" "}
+ Beat friends.
+
+
+
+ {["🇬🇧", "🇮🇹", "🇩🇪", "🇫🇷", "🇪🇸"].map((flag) => (
+
+ {flag}
+
+ ))}
+
+
+
+ {session ? (
+
+ Start playing →
+
+ ) : (
+ <>
+
+ Get started →
+
+
+ Login
+
+ >
+ )}
+
+
+ );
+};
+
+export default Hero;
diff --git a/apps/web/src/components/landing/HowItWorks.tsx b/apps/web/src/components/landing/HowItWorks.tsx
new file mode 100644
index 0000000..b9791a8
--- /dev/null
+++ b/apps/web/src/components/landing/HowItWorks.tsx
@@ -0,0 +1,48 @@
+const steps = [
+ {
+ number: "01",
+ title: "See a word",
+ description:
+ "A word appears in your target language, ready to challenge you.",
+ },
+ {
+ number: "02",
+ title: "Pick the translation",
+ description:
+ "Choose from four options. Only one is correct — trust your gut.",
+ },
+ {
+ number: "03",
+ title: "Track your score",
+ description: "See how you did and challenge a friend to beat it.",
+ },
+];
+
+const HowItWorks = () => {
+ return (
+
+
+ How it works
+
+
+
+ {steps.map(({ number, title, description }) => (
+
+
+ {number}
+
+
{title}
+
+ {description}
+
+
+ ))}
+
+
+ );
+};
+
+export default HowItWorks;
diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx
index a17910a..2e9fd80 100644
--- a/apps/web/src/routes/index.tsx
+++ b/apps/web/src/routes/index.tsx
@@ -1,11 +1,16 @@
import { createFileRoute } from "@tanstack/react-router";
+import Hero from "../components/landing/Hero";
+import HowItWorks from "../components/landing/HowItWorks";
+import FeatureCards from "../components/landing/FeatureCards";
export const Route = createFileRoute("/")({ component: Index });
function Index() {
return (
-
-
Welcome Home!
+
+
+
+
);
}