3,680 classes across 124 subjects. The job of the front of the site is to make that number feel like a shelf rather than a wall.
| tier | route | subjects | classes |
|---|---|---|---|
| Primary | /primary | 7 | 210 |
| Middle | /middle | 14 | 420 |
| High School | /high | 29 | 871 |
| College | /college | 50 | 1,500 |
| Topics | /topics | 24 | 679 |
Every tier page lists its subjects; every subject page (/high/hs-biology) lists its 30 classes in order. Topics is the odd one out: it is not a school year, it is adult-interest material — AI & LLMs, Critical Thinking, Forensic Science, The Attention Economy — and it carries its own skill ladder (Explorer → Builder → Scholar → Expert) instead of a grade.
/browse is the catalogue across all five tiers at once: search by subject or class title, filter by tier. It is the right link to send someone who does not already know which shelf they want, and it is where the spoken call-to-action in every social clip points.
Picking a tier changes more than the URL. The learning surfaces re-theme — Primary gets warmer colours and larger type, College gets denser layout — and the choice persists.
Two things worth knowing if you are debugging this:
lib/tier.js andin the pre-paint script in layout.js. Edit both, or the page flashes the wrong theme on load.
localStorage, not a bad deploy. Check thatbefore you blame the build.
Catalogue, tier pages, subject pages, and one public sample lesson at /lesson. Every real lesson at /lesson/[slug] requires an account — free to create, no card. See 8 · Plans, access and learners.
This gate is client-side. It keeps the full text out of the rendered page for anonymous visitors, which deters casual scraping; it is not hard protection of the media on the CDN.