Instead of a binary pass/fail, every character goes through a 4-stage "session funnel" in a single sitting:
1. Matching: Simple pair matching to introduce characters and sounds.
2. Recognition: See Hiragana → Select Romaji.
3. Listening: Hear Audio → Select Hiragana
4. Writing: Hear Audio → Type the character
It's built using Svelte. A SvelteKit project but with a static build, plan is to use Capacitor to make Android and iOS versions of it.
Let me know what you think :)