Tsumugu — overnight build, first real read
Overnight, yesterday’s idea went from PRD to a working build, and today turns it from a scaffold into something to actually read with.
What got built (overnight)
Claude Code built Tsumugu from the spec unattended — twelve commits, Phases 0 through 7. A pnpm monorepo, fully client-side and offline-first:
- Engine — the language-agnostic core: a segmentation interface, hover/dictionary resolution (custom > pre-baked > dict), a compounding cross-language word store, a pull-based SRS (
ts-fsrs, no scheduler or nagging), Anki.apkgexport, the Hán-Việt bridge, and external-vocab cross-reference. DOM-, filesystem-, and network-free. - Reader (web app, Vite) — read with live word status, pre-baked instant hover, 1–4 grading by button or hotkey, next-unknown navigation, and Mandarin tone colouring; browser packs add OpenCC and zh-TW / vi-VN text-to-speech.
- Batch generation CLI (
scripts/gen) — content prep with pre-resolved unknowns (OpenCC-guarded), directed and autonomous modes, wiki / encoding / bridge generators, transcript ingestion, and a flag-for-clarification loop. No API in the core — the prompts brief Claude Code / Grok Build to do the writing. - Wiki — a Karpathy-style LLM-wiki on Quartz, live at https://logos52.github.io/tsumugu-wiki/, reusing the llm-knowledge-base stack.
Audited against the PRD’s twelve success criteria: eight done, four with open-core caveats, zero hard gaps (the ≥95% dictionary, the published wiki content, and the Migaku seed all live in the private layer). Verified by the test suite (368 public tests, ~416 with the private packs), five typecheck passes, the Phase-0 end-to-end checks, and a clean web build.
Private packs (kept out of the public repo): zh-Hant — jieba-wasm segmentation + 122k CC-CEDICT + official TOCFL leveling (14.8k words) + pinyin→Zhuyin + OpenCC; vi — longest-match tokenizer + 39k kaikki dictionary + IPA + tones + the Hán-Việt bridge hook. Scope calls: Phase 6 (Chromium extension) descoped; Phase 7 (transcript ingestion) done; Phase 8 (voice) deferred.
Today
- Plug the private zh-Hant pack into the reader and run a first real Traditional-Mandarin text — a Dcard thread or article — through the prep → read loop end to end, aiming for the ≥95% coverage target.
- Fill the first wiki / encoding / bridge pages through the agent step, so an idiom looked up in the reader lands as a durable page instead of a lookup that evaporates.
- Sign off the word-status model (1–4 plus Known / Ignore) against real reading before it hardens.
- Source the Hán-Việt bridge data and seed it from the Migaku known-Mandarin export, so the Mandarin already known starts cross-seeding Vietnamese.
- Evaluate a Vietnamese provider so the Vietnamese pack can follow the Mandarin one.
Prove the loop on one Mandarin text first, then widen. Full intent: Tsumugu.