Kanji learning SRS companion
Production
Personal
Full-stack Developer
2024 - Present

View live:
https://flashkanji.tenyain.com/
Technologies:
Flash Kanji is an online interactive Kanji learning web application designed to help learners master Japanese Kanji and Jukugo (compound words) through flashcards, quizzes, and spaced repetition. The product is built as a three-repo system: the learner-facing client web app, the API server, and an admin console. Together they deliver guided JLPT-level learning (N5 to N1), a PWA experience, multi-locale content (en, ja, my), and a full content management workflow. It was also developed as my B.Sc (Hons) Computing Final Year Project of University of Greenwich, focusing on learning effectiveness, user experience, and scalable system design.
| Challenge | Result |
|---|---|
| Keep study progression structured | A Flash Map roadmap with phased steps and sequential unlocking |
| Build an SRS system that respects time zones | Custom SRS scheduling with review calendar and local day boundaries |
| Provide rich tools without leaving the app | Dictionary, reader, converter, stroke viewer, and writing board built in |
| Run content and user ops at scale | Admin dashboard with deck/category CRUD and user progress management |
Japanese Kanji learning is difficult because learners must remember thousands of characters, multiple readings, stroke orders, and real usage. Many tools either:
Flash Kanji addresses these gaps by combining a JLPT-aligned roadmap with a customized SRS review engine and engaging study features.
A chapter-based learning path aligned with JLPT N5–N1, guiding learners step-by-step instead of random decks.
Every Kanji is connected to real compound words, helping learners move beyond memorization into practical understanding.
A modified SM-2 spaced repetition algorithm schedules reviews based on user performance to improve long-term retention.
The platform is split into a Next.js App Router web app, an Express API server, and a Next.js admin console. The web app handles the learning experience and UI, the API handles data access and game logic, and the admin console manages decks, categories, and user insights. Supabase provides authentication and Postgres storage across all three.
Flash Map is the guided roadmap for Kanji study. Users choose a JLPT level and chapter, then progress through phases like cards, repetition, quiz, and match. Each step is validated sequentially so learners cannot skip ahead, and progress is stored in a structured chapter_progress model with resume points.
The SRS system uses quality scoring (again, hard, good, easy) to drive interval changes, ease factor updates, and next review dates with a hard cap on long intervals. Reviews are scheduled by user-local days, and the dashboard shows a review calendar with upcoming and expired sessions. Deck reviews use SRS sessions so users can study in blocks without losing context.
The app includes XP, ranks, streaks, and a lives system. Expired reviews trigger penalties, and completed sessions reward XP and restore hearts. Daily Kanji cards, Pomodoro timers, and victory or loss modals keep the study loop motivating and clear.
Flash Kanji includes a dictionary that merges Kanji, Jukugo, and deck card results, a Furigana reader powered by Kuromoji tokenization, a Hiragana/Katakana converter, and a stroke-order viewer. Gemini AI generates mnemonics and example usage inside detail modals, and text-to-speech supports pronunciation practice. A writing board built with perfect-freehand lets users practice stroke shapes directly in the browser.
Supabase handles Google and email sign-in, and a Next.js middleware proxy protects learning routes until profiles are created. The API validates Supabase tokens, and admin-only endpoints are restricted with an allowlist. WaniKani keys are stored encrypted and used to enrich Kanji detail views.
The web app ships as a PWA with offline fallback and aggressive cache behavior for smoother study sessions. Next-Intl powers the multi-locale routing and metadata, so SEO and copy stay aligned across English, Japanese, and Myanmar.
The SRS engine and kana conversion utilities are covered with Jest tests to prevent regressions in scheduling logic and reading helpers.
Supabase schema covers Kanji, Jukugo, decks, SRS tables, progress tracking, and user profiles. Import scripts ingest the Joyo Kanji CSV and WaniKani subject IDs, ensuring consistent seed data and future enrichment paths.
The Express server exposes REST endpoints for Kanji, Jukugo, quizzes, decks, progress, and admin operations. OpenAPI documentation is served via Scalar, making it easy to test and extend the API surface.
The UI is built around a warm orange theme with card-first layouts that keep study content scannable. Flash Map and dashboard views focus on clarity, while detail modals provide depth without breaking the learning flow. Onboarding tours guide new users through the roadmap, dashboard stats, and deck selection.
I followed DSDM Atern (Agile) with:
Flash Kanji was designed with:
This project demonstrates my ability to:
Flash Kanji delivers a complete learning system: structured progression, a custom SRS engine, AI-assisted study aids, and a scalable backend with an admin console. It is designed to help learners stay consistent, review intelligently, and explore Kanji at their own pace.