diff --git a/frontend/package.json b/frontend/package.json index 2921914..eb67aa0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,6 +30,7 @@ "react-day-picker": "^10.0.1", "react-dom": "^19.2.7", "react-resizable-panels": "^4.11.2", + "react-router-dom": "^7.18.1", "recharts": "3.8.0", "shadcn": "^4.12.0", "sonner": "^2.0.7", diff --git a/frontend/src/Landing.tsx b/frontend/src/Landing.tsx new file mode 100644 index 0000000..49d22c8 --- /dev/null +++ b/frontend/src/Landing.tsx @@ -0,0 +1,274 @@ +import { useCallback } from 'react'; +import { Link } from 'react-router-dom'; +import { + TrophyIcon, + ArrowRightIcon, + ChevronDownIcon, + EyeIcon, + GitMergeIcon, + UsersIcon, + BellIcon, + RadioIcon, + DatabaseIcon, + SparklesIcon, + PlayIcon, + MicIcon, +} from 'lucide-react'; + +/** + * Public marketing landing page for podman.live. + * Rendered at "/" without ClerkProvider — needs no secrets. + * The live app lives at "/app". + */ +export function Landing() { + const scrollToStory = useCallback(() => { + document.getElementById('story')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, []); + + return ( +
+ {/* ambient glows */} +
+
+
+
+ + {/* top nav */} +
+ + PodMan + PodMan + + + Launch app + +
+ + {/* hero */} +
+ + +

+ PodMan +

+

+ The teammate that sees what git can't. +

+

+ An ambient AI teammate that watches your pod's screens in realtime — catching merge + collisions, duplicated work, and missed handoffs before anyone pushes. +

+ + {/* award chips */} +
+ {[ + { label: '2nd Overall · 95+ teams', accent: 'text-amber-200 border-amber-300/25 bg-amber-400/10' }, + { label: 'LiveKit Track — Winner', accent: 'text-sky-200 border-sky-300/25 bg-sky-400/10' }, + { label: 'DigitalOcean — Best Use', accent: 'text-cyan-200 border-cyan-300/25 bg-cyan-400/10' }, + ].map((c) => ( + + {c.label} + + ))} +
+ + {/* CTAs */} +
+ + + Launch PodMan + +
+ + +
+ + {/* story */} +
+
+

+ PodMan was built at the{' '} + AI Engineer World's Fair 2026 Hackathon (June + 27–28) against 95+ teams. It took{' '} + 2nd place overall, and won both the{' '} + LiveKit track and{' '} + DigitalOcean's Best Use award. +

+

+ We shipped the live demo in a single sprint — a LiveKit room, Gemini watching the + screen-share, and a voice that speaks up the moment two engineers drift toward the same + code. There wasn't time on the clock to give it a proper home. +

+

+ So this is that home — and we're actively building PodMan out from the hackathon + prototype into something a team can actually run every day. +

+
+
+ + {/* what it does */} +
+
+ } + title="Ambient awareness" + body="Joins your pod's LiveKit room and samples every screen-share in realtime — no bots to invoke, no commands to remember." + /> + } + title="Merge-collision radar" + body="Recognizes when two people are converging on the same files or feature and warns them before the conflict ever reaches a push." + /> + } + title="Duplicated-work detection" + body="Notices when effort overlaps across the team and surfaces it early, so two engineers don't quietly build the same thing." + /> + } + title="Handoff nudges" + body="Speaks up about missed handoffs and stalled threads — and learns which nudges actually helped, so it stays useful, not noisy." + /> +
+
+ + {/* how it works */} +
+
+ } name="LiveKit" note="Realtime transport for the shared room and voice delivery." /> + } name="Gemini" note="Vision + event detection + the live voice that nudges the team." /> + } name="MongoDB" note="Engineer state, ownership map, events, and which nudges landed." /> +
+
+ {['LiveKit', 'Gemini Live', 'MongoDB Atlas', 'Voyage embeddings', 'Modular MAX', 'Hermes ops'].map((t) => ( + + {t} + + ))} +
+
+ + {/* demo */} +
+
+
+