Forgotten KanjiIn Development
Jul 2026 – Present
A JRPG-styled mobile game where learning Japanese is the gameplay.
Forgotten Kanji is my largest project so far: a JRPG-styled mobile game built in Flutter and Flame where learning Japanese is the gameplay. Players cast spells by drawing kanji. Quests, boss fights, and NPC conversations all center on the basics of the language, and the puzzles and battle system run on what you've actually learned.
Drawing kanji
You draw each kanji by hand. I wrote a pure-Dart stroke grader that scores shape, order, and direction against 23,356 KanjiVG paths covering 2,230 kanji, so drawing works offline on Android, web, and PC without ML Kit. Google ML Kit's digital ink recognition is in the stack as well.
The learning engine uses FSRS, a proven spaced-repetition algorithm, so practice feels like play while the game still tracks what you've retained.
Engineering
1,400+ unit and widget tests run in GitHub Actions CI. Riverpod handles state and Drift handles saves.
Code is only one piece of the work. The pixel art, map design, and NPC writing are just as big a part of this project, if not bigger.
Tech stack
- Framework: Flutter (Dart)
- Game engine: Flame
- State: Riverpod
- Tilemaps: flame_tiled with the Tiled editor
- Stroke grading: pure-Dart grader against KanjiVG paths
- Handwriting recognition: google_mlkit_digital_ink_recognition
- Stroke order display: stroke_order_animator
- Spaced repetition: FSRS
- Local database: Drift (SQLite)
- Audio: flame_audio and flutter_tts (Japanese)
- Testing: 1,400+ unit and widget tests in GitHub Actions CI