4 Commits

Author SHA1 Message Date
itsrubberduck
2c5c2d5239 feat(classroom): show the full curriculum and raise the mastery bar
The overview rendered four anonymous module tiles and half a page of empty
space, which undersold 63 existing lessons. It now stacks four module
sections that list every lesson as a chip with status and variant dots, and
the header states the real scope: 4 modules, 63 lessons, 262 variations.

Mastery moves from a flat two-variation counter to per-module thresholds
(3/4/4/5) backed by persisted variant signatures — a hash over each roll's
expected answers. That triples the practice runs to full mastery without
authoring a single new lesson, and fixes a dedup hole where the same
variation counted twice after a page reload.

Existing progress is preserved: `done` is sticky, so raising the bar never
revokes a check mark someone already earned.

Also fixes `yarn test`, which passed quoted globs Node 20 does not expand —
it exited 0 without running a single test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 20:08:55 +02:00
itsrubberduck
e627d7be3b docs(classroom): design for raising classroom production value
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 19:16:55 +02:00
itsrubberduck
3488b54aa4 feat(classroom): use local speech bridge for instructor TTS when available
Mirrors the local-first routing live-atc already has via useRadioSpeech.ts:
requestSayAudio now tries a locally running Speech Bridge (127.0.0.1:8765-8770)
before falling back to the cloud /api/atc/say endpoint.
2026-07-29 08:54:13 +02:00
itsrubberduck
4cc88a9f81 docs(plans): add design for classroom local speech bridge support 2026-07-29 08:41:31 +02:00