Skip to content

work / mandarin-tutor · Built

Mandarin Tutor

Real-time voice lessons that feed a spaced-repetition word bank.

Week of Claude Maxing

Practising with an AI works until the next session, when it has forgotten everything. There is no continuity, so you keep restarting instead of progressing. The fix was less about the conversation and more about memory: hold what I learned last time and this time, and feed it back as context so every lesson builds on the last one.

Why I built it

Speaking practice and vocabulary memory live in different apps, so neither compounds.

The problem

Live voice conversation lessons (ElevenLabs) that debrief into an FSRS spaced-repetition word bank, with tone-coloured pinyin, tap-to-hear audio and a built-in HSK curriculum.

What it does
  • React 19
  • Dexie
  • ts-fsrs
  • Claude
  • ElevenLabs
Stack
Design the core loop to work with zero API keys; the paid layer is an upgrade, not a dependency.
What I learned

A pure-frontend replica with mock data: nothing is saved, nothing leaves the page. The real app is richer; this is the feel of it.

loading the demo…

Play with it

The thinking

user · pains · gap · tools

Intermediate Mandarin learners (I am one, HSK 4 and up) who can study vocabulary but rarely get to speak.

Target user

  • Speaking practice and vocabulary memory live in separate apps, so neither compounds
  • Tutors are expensive and hard to schedule
  • Flashcards without audio teach reading, not conversation

Pain points

Real-time voice conversation that debriefs into a spaced-repetition word bank, so every lesson feeds tomorrow’s reviews automatically.

Gap in the market

  • ElevenLabs conversational voice
  • Claude (debrief + sentences + mnemonics)
  • ts-fsrs spaced repetition
  • Claude Code (build)

AI + tooling

  • Spaced repetition against the forgetting curve (FSRS scheduling)
  • Comprehensible input: conversation slightly above current level
  • Dual coding: tone-coloured pinyin + audio pairs visual and sound memory
  • HSK 1 to 6 curriculum strands
  • Zero-key core loop (the paid layer is an upgrade, not a dependency)

Frameworks

  • TBD: words retained, lessons per week, review streak

Success metrics

A retro pixel virtual office with proximity voice chat.

← all work