Practice sets — browser pass, 2026-09-09

The real running app at localhost:3100, logged in as a student. Not a prototype — this is the shipped branch practice-sets, 15 commits. Desktop 1440×900 left, phone 390×844 right.

Format page — /mocks/TOEFL_IBT

Practice summary with the Continue control on the next unsat set, four skill cards, then the mock forms. Note Listening and Writing: "No practice sets yet — this section is in the full mock." with no pill. Only Speaking says Coming soon, because only Speaking is genuinely unbuilt. That was the defect this pass caught.


Library — /mocks/TOEFL_IBT/practice/reading

Two seeded Reading sets. Filter chips All / Not done / Done. Both rows link to the brief, never straight into a sitting.

Library, filtered to Done

Nothing sat yet, so this is the empty-filter state.


Unknown skill — /practice/telepathy

Renders the right copy. Answers 200, not 404 — a loading.tsx on the path opens a Suspense boundary and Next flushes the shell first. Known, measured, and decided in CLAUDE.md.


Catalogue — /mocks

Unchanged by this work, included so you can see it did not regress.

Screenshots only. Nothing pushed, nothing merged.