Skip to content
Route index

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.

Read this first

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

Demo11

Renders right now from fixture data. Click the path — it works with no account and no backend.

Needs DB3

A real page against the live schema. The link is here, but without Supabase and an admin account it redirects to sign-in.

API13

A route handler, not a page. Opening one in a browser gets you JSON or a 405, so these are not linked.

Public

2

Open to anyone. No sign-in, nothing gated.

PathWhat it doesStatus
/Landing — the pitch, the three pillars, and the way into the product.Demo
/mapThis page. Every route in the app with its real status.Demo

Student demo

5

The five screens a learner lives in. Fixture data, no account needed.

PathWhat it doesStatus
/demoToday — Accent Score, the next Lab, and what to work on this morning.Demo
/demo/practicePractice — solo drills, scored down to the phoneme on the last attempt.Demo
/demo/bookBook a Lab — the week's schedule, seats left, coach and target sound.Demo
/demo/labLive Lab — the classroom: video grid, speaking meter, breakouts, corrections.Demo
/demo/progressProgress — score history, the phoneme heatmap, and every session on record.Demo

Coach demo

1

What a coach sees before, during and after a Lab.

PathWhat it doesStatus
/demo/teachConsole — roster, prep notes, speaking time per student, corrections to file.Demo

Admin demo

3

The control surface, rendered from fixtures so it can be shown to anyone.

PathWhat it doesStatus
/demo/adminBusiness — revenue, retention curve, acquisition funnel, score distribution.Demo
/demo/admin/liveLive control — every room in progress, observe silently or end one.Demo
/demo/admin/crmCRM — pipeline board, the at-risk queue, and the broadcast composer.Demo

Admin (real)

3

Built against the live schema. These redirect to sign-in until Supabase and an admin account exist.

PathWhat it doesStatus
/admin/coursesCourses and cohorts, headlined by mean exit − entry Accent Score per cohort.Needs DB
/admin/crmPipeline, at-risk students with one-click plays, and the campaign ledger.Needs DB
/admin/crm/broadcastBroadcast composer — segment facets, reach estimate per channel, send.Needs DB

API — admin

9

Route handlers. Each re-verifies the admin role and writes an audit row; none of them render a page.

EndpointWhat it doesStatus
/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

4

LiveKit-backed. They mint tokens and drive rooms, so they need a LiveKit server.

EndpointWhat it doesStatus
/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
Reference

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.

/prototype.html

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.