Y

YC W26

Book a demo →
← LifeTap

Engineering

Architecture

How the launch site is structured — loader, scroll-pinned sections, constants-driven copy, and the waitlist POST flow.

Next.js 16GSAP scrollLenisAPI stub

4 min read

Architecture

Page flow

Loader (0→100%)
  → Hero
  → Ticker
  → Problem
  → Two Futures (scroll-pinned, GSAP)
  → How It Works
  → SMS Mockup
  → Comparison
  → Waitlist CTA
  → Footer

Component layers

LayerPathRole
**App**`src/app/`Layout, metadata, page entry, API routes
**Sections**`src/components/sections/`Full-width page blocks
**Layout**`src/components/layout/`Nav, footer, scroll provider
**UI**`src/components/ui/`Buttons, loader, reveals, image slots
**Constants**`src/constants/`Copy, stats, image paths — edit copy here
**Lib**`src/lib/`GSAP registration, helpers

Motion

  • **Loader / hero**: Framer Motion stagger + `WordReveal`
  • **Scroll sections**: `ScrollReveal` (Intersection Observer)
  • **Two Futures**: GSAP timeline + ScrollTrigger scrub
  • **Smooth scroll**: Lenis via `SmoothScrollProvider`

Styling

  • Single font: **Poppins** (`layout.tsx`)
  • Design tokens in `src/app/globals.css`
  • Ditto-style highlights: `.highlight-green`, `.highlight-yellow`, `.highlight-amber`
  • Section spacing: `.section-pad` utility

Data flow (waitlist)

WaitlistCTA form
  → POST /api/waitlist
  → validate email
  → (future) Resend / Supabase / webhook

Unused sections (kept for later)

These exist in `src/components/sections/` but are not on the page:

  • `SignalJourney.tsx`
  • `HardwareBlueprint.tsx`
  • `StatsSection.tsx`
  • `ResultSection.tsx`
  • `WaitlistBenefits.tsx`

Re-enable by importing in `src/app/page.tsx`.