Inspiration
Learning to read Japanese means 1,118 characters before you can trust a street sign. Apps either drill flashcards with canned feedback, or bolt on a chatbot that confidently invents readings. We wanted a third thing: a tutor that is never wrong about facts and always personal in explanation — and OpenAI Build Week was the push to build it.
What it does
Kanji Shisho teaches Japanese reading — 46 hiragana, 46 katakana, and all 1,026 MEXT Grade 1–6 kanji — through verified study cards, practice sessions, and applied sign-reading missions, wrapped in the Fujizakura design (Mount Fuji and sakura). Its resident guide, Shisho (司書, "the librarian"), lives in the header of every page: verified character facts, saved-progress recommendations, and — the GPT-5.6 heart of the project — live personalized mistake explanations that diagnose why you confused two readings, not just what the answer was.
The trust boundary: verified dictionary data (MEXT, KANJIDIC2/JMdict, KanjiVG) and deterministic logic own every fact, reading, score, and answer. GPT-5.6 owns only the explanation. The model receives a minimal fact envelope; on live questions the correct answer is structurally absent from its context, so it cannot leak. A fail-closed output guard rejects responses that drift out of the learner's language. When the model is unavailable, learners see clearly-labeled verified fallback guidance — never fabricated output.
How we built it
Built with Codex end to end: an artifact-promotion CI/CD pipeline (build once, hash, promote the same bytes dev→production), a CloudFormation-managed serverless backend (Lambda + API Gateway, key in SSM SecureString, never in code), change-set-reviewed infrastructure, and parallel CI at 2m38s per run. Every change landed through a protected PR with deterministic quality gates: 200+ tests, 8,963 exercise contracts, a rendered site-governance pass, and a full-tree security scan.
Challenges we ran into
Getting GPT-5.6 inside an honest latency budget. First live attempts timed out; instead of guessing, we instrumented: warm-path measurement showed generation length — not cold start — was the bottleneck. Capping output at 192 tokens (the envelope supplies the facts; the model only words them) brought live responses to 5.0 s measured, 137 output tokens, zero reasoning tokens. One paid request per hypothesis. A second challenge found us: our own English-language guard initially rejected good teaching (citing the contrast character you confused counts as "uncited Japanese"), so we calibrated it from zero-tolerance to a small budget — fail-closed, but not over-caffeinated.
Accomplishments we're proud of
Live GPT-5.6 personalization shipped with a provenance label on every message; a trust boundary that survived adversarial thinking; zero production incidents across ~30 gated deployments in one day; and a demo where every state on camera is real.
What we learned
Measurement beats intuition (three different latency hypotheses, three different answers); fail-closed guards need calibration budgets; and a solo builder plus AI agents can run a full change-management discipline without slowing down — the discipline is what made the speed safe.
What's next for Kanji Shisho
The full resident-guide specification is already designed and peer-reviewed: multilingual explanations, a verified pronunciation pipeline where the model paces but never supplies the kana, graduated hints wired to scoring, and speech practice with honestly-calibrated feedback.
Built With
- api-gateway
- aws-lambda
- cloudformation
- cloudfront
- codex
- gpt-5.6
- node.js
- s3
- typescript
Log in or sign up for Devpost to join the conversation.