Learning web application
Japanese Mastery
Japanese learning app for beginners living in Japan, with kana practice, structured lessons, spaced-repetition review and JLPT-style practice. Works offline.
- My role
- Designed and built the app.
- Audience
- Beginners studying Japanese in Japan, alongside a language school.
- Status
- First release live
- Stack
- Next.js
- React
- TypeScript
- Tailwind CSS
- Supabase
- PostgreSQL
- Zustand
- Zod
- Vitest
- Playwright

Overview
A personal Japanese tutor for learners in Japan who are starting from zero. It is meant to complement language school: it explains each concept in simple English and makes daily practice easy, with the long-term goal of JLPT N2 readiness.
The first release is live. The app is still under development, and later stages of its learning roadmap don’t have dedicated lessons yet.
Who it serves: Beginners studying Japanese in Japan, alongside a language school.
The problem
Language school moves quickly, and beginners need a place to review what they learned and practise a little every day, even on a train with no signal.
Features
In the first release
- Kana studio for hiragana and katakana, with several practice modes including handwriting and stroke order
- Structured lessons for the writing system, the basics and N5 grammar
- Vocabulary, grammar and kanji libraries (starter sets, not the full JLPT lists)
- Spaced-repetition review with daily and weekly revision
- Daily-life scenarios, reading and listening practice
- JLPT dashboards and practice exams
- Progress tracking, streaks and XP
- Works without an account; optional sign-in syncs progress across devices
Still in development
- Lessons for the later months of the learning roadmap, which currently point to the libraries instead
- Full vocabulary and kanji coverage for higher JLPT levels
Technical decisions
Local-first progress
Every answer is saved on the device first (IndexedDB), so the app works offline and without an account. Signed-in users’ changes queue in an outbox and sync to Supabase later.
Curriculum as typed data
Lessons, vocabulary, grammar and kanji are typed TypeScript data checked by automated tests, so content can be added without changing the interface.
Honest progress estimates
The app states that no tool can guarantee a JLPT result, and presents its readiness indicators as estimates based on the learner’s own results.
Challenges & solutions
Challenge
Progress recorded offline, possibly on more than one device, has to merge without double-counting or losing work.
Solution
Sync goes through one database function that applies each event only once and follows fixed rules: the newest review wins, completed lessons are never undone, and XP is de-duplicated.
Outcome
- First release deployed on Vercel and usable without an account.
- The repository includes unit, integration and end-to-end (Playwright) test suites.
Screens

Mobile landing page