Gradis app — preview surfaces.
These are the next-generation app screens, built in the same design language as the v5 marketing site. Nothing here is reachable from the live root; production routes (/parent-signup, /studio, /chat, /parent/dashboard) are unchanged. Cutover happens in a separate Phase B once these surfaces are reviewed.
Home (post-login hub)
Post-login hub showing the kid's active project + Passport + (eventual) daily Spark. Reuses /api/passport/state — zero new API.
Space — start (trajectory picker)
Empty-state. Three hand-curated starter trajectories + 'tell me your own'. After dev sign-off, the recommender personalises the cards.
Space — active session
The unified Space. Trajectory + 5 mode tabs (always visible) + chat (per-mode agent) + AI nudges to switch modes. Persistent notes panel (kid-only, never shown to parents). Build mode opens an artifact canvas (open text, no templates) alongside chat. Visual draft; orchestrator wiring next.
Begin (invite gate)
Enter invite code → routes to dev signup. Use FNDFAM if you minted the Founding Families cohort.
Signup
5-field parent signup. Real Supabase auth + parents insert. Replaces the 6-step wizard. Bounces to dev /begin if no invite.
Kid login
Where app-v1 kids sign in (kid login email points here). Routes to /intro if first time, /home otherwise. Sticky errors for parents/facilitators/pilot kids who land here by mistake — production /login stays untouched.
Parent login
Where app-v1 parents sign in. Routes to /preview/app-v1/parent on success. Sticky errors for kids/facilitators who land here by mistake — production /parent-login stays untouched.
Today (daily Spark + Voice)
Daily 2-min Spark ritual. R7 wired: GET /api/spark/today (cron 06:00 IST or lazy-gen) + POST /api/spark/respond. Cap 10 kid replies, then 'come back tomorrow'. Mic via /api/transcribe. Triple-gated: SPARK_ENABLED env + signal_provenance.parent_welcome + intro chat done.
Reads (daily curated explainer)
Daily curated explainer feed. Hand-seeded with 6 articles (supabase/seeds/reads_seed_articles.sql); daily harvest cron at 09:30 IST rewrites public RSS sources to kid voice. R10 wired: GET /api/reads/today (deterministic per-kid selector against shared pool) + POST /api/reads/react + POST /api/reads/discuss (3-turn cap). Pool harvest cap 10/day = ~₹0.50/day platform-wide. Triple-gated: READS_ENABLED env + signal_provenance.parent_welcome + intro chat done.
Passport
Longitudinal record. Assembles snapshot + every self-driven project (sittings + mode strip). Read-only; wired to /api/passport/state.
Parent dashboard
Parent read view. Latest snapshot + last-7-days sittings per project. Dinner-table prompt. Multi-kid picker when applicable. Wired to /api/parent/children + /api/parent/passport/[childId]/state.
Parent ingestion
Optional, skippable. 90-sec parent voice note + drag-and-drop file uploads at signup. Reached as part of the post-signup flow.
Marketing site (v5): /preview/landing-v5 · Live root (untouched): /