Product map
Every route that exists in the app, in one place. 27 of them: 11 screens you can walk through now, 3 real pages waiting on a database, and 13 endpoints that never render anything.
No database is connected. Every screen marked Demo renders from fixture data held in the page itself — there is no Supabase, no Stripe and no LiveKit behind any of them. The numbers are representative and stable, not live: nothing you click writes anywhere, and nothing you see came from a real student. Pages marked Needs DB are the genuine article and will only work once the backend is wired up.
What the statuses mean
Renders right now from fixture data. Click the path — it works with no account and no backend.
A real page against the live schema. The link is here, but without Supabase and an admin account it redirects to sign-in.
A route handler, not a page. Opening one in a browser gets you JSON or a 405, so these are not linked.
Student demo
5The five screens a learner lives in. Fixture data, no account needed.
| Path | What it does | Status |
|---|---|---|
| /demo | Today — Accent Score, the next Lab, and what to work on this morning. | Demo |
| /demo/practice | Practice — solo drills, scored down to the phoneme on the last attempt. | Demo |
| /demo/book | Book a Lab — the week's schedule, seats left, coach and target sound. | Demo |
| /demo/lab | Live Lab — the classroom: video grid, speaking meter, breakouts, corrections. | Demo |
| /demo/progress | Progress — score history, the phoneme heatmap, and every session on record. | Demo |
Coach demo
1What a coach sees before, during and after a Lab.
| Path | What it does | Status |
|---|---|---|
| /demo/teach | Console — roster, prep notes, speaking time per student, corrections to file. | Demo |
Admin demo
3The control surface, rendered from fixtures so it can be shown to anyone.
| Path | What it does | Status |
|---|---|---|
| /demo/admin | Business — revenue, retention curve, acquisition funnel, score distribution. | Demo |
| /demo/admin/live | Live control — every room in progress, observe silently or end one. | Demo |
| /demo/admin/crm | CRM — pipeline board, the at-risk queue, and the broadcast composer. | Demo |
Admin (real)
3Built against the live schema. These redirect to sign-in until Supabase and an admin account exist.
| Path | What it does | Status |
|---|---|---|
| /admin/courses | Courses and cohorts, headlined by mean exit − entry Accent Score per cohort. | Needs DB |
| /admin/crm | Pipeline, at-risk students with one-click plays, and the campaign ledger. | Needs DB |
| /admin/crm/broadcast | Broadcast composer — segment facets, reach estimate per channel, send. | Needs DB |
API — admin
9Route handlers. Each re-verifies the admin role and writes an audit row; none of them render a page.
| Endpoint | What it does | Status |
|---|---|---|
/api/admin/coursesPOST | Create and edit courses, cohorts and enrolments. | API |
/api/admin/crmGET POST | Estimated reach for a segment, and running one at-risk play for one student. | API |
/api/admin/impersonateGET POST PATCH DELETE | Start, inspect and end a “view as student” session. Never a session swap. | API |
/api/admin/paymentsPOST | Subscriptions, invoices, refunds and the dunning queue. | API |
/api/admin/payoutsGET POST | Teacher payouts: preview reads, commit replays the preview. Owner only. | API |
/api/admin/settingsPOST | Plans, pricing and platform settings. Pricing changes are owner only. | API |
/api/admin/storePOST | Products, private files, orders, refunds and entitlements. | API |
/api/admin/studentsGET POST | Student directory, GDPR export for one student, and account actions. | API |
/api/admin/teachersGET POST | Teacher pipeline, approved roster, and bulk reassignment with a preview. | API |
API — live classroom
4LiveKit-backed. They mint tokens and drive rooms, so they need a LiveKit server.
| Endpoint | What it does | Status |
|---|---|---|
/api/live/breakoutsGET POST | Split six students into three pairs, run the timer, recall everyone. | API |
/api/live/hostPOST | Host controls: mute one, mute all, disable a camera, remove, lock, end for all. | API |
/api/live/instantPOST | A coach opens a Lab on the spot and gets a shareable invite link. | API |
/api/live/invite/[token]GET POST | Redeem an invite. GET is the redeem path because the link is opened, not posted. | API |
The approved design prototype
The signed-off eight-screen prototype the demo screens are built to match — one static HTML file, no build step, its own theme toggle. It is the reference for layout, density and copy; where a demo screen and the prototype disagree, the prototype is right.
Routes are read from src/app. A path that is not on this page does not exist yet — if a link 404s, the page has not been built, not hidden.