Mamoru Japan
An installable web app to keep your Japanese alive, from kana to the JLPT, that works offline.
- Type
- Web
- Year
- Categories

About the project
Mamoru (守る, "to protect" in Japanese) is an installable web app for Spanish speakers who have already studied Japanese and do not want to lose it. It brings together exercises by JLPT level, a Spanish dictionary and a review of everything learned, and it works offline and without an account.
Goal. Japanese is forgotten fast without practice, and nearly all the material to study it is in English. Mamoru solves both: a few minutes of practice a day, in Spanish and matched to each learner's level, with progress kept on the phone itself so you can review at any moment, even without a signal.
What it does.
- Learn: N6, a level of its own with hiragana, katakana and the first words, and N5 to N1 with vocabulary, kanji, grammar, reading and listening, each level with its final exam. Over 7,500 words and about 32,000 exercises.
- Search: a dictionary of about 219,000 words in Spanish, with examples and the stroke order of 6,703 kanji.
- Handwriting: stroke recognition and stroke-order checking, written from scratch without third-party libraries.
- Review: a random review of everything learned, mistakes first.
- Study tables: particles, counters, keigo, dates and demonstratives.
- Specialties: the Japanese of a trade, starting with 165 programming words.
- Listening: the pronunciation of every word with the browser's own voice.
Show the data: Words per JLPT level
| Category | Words |
|---|---|
| N5 | 674 |
| N4 | 622 |
| N3 | 1,625 |
| N2 | 1,731 |
| N1 | 2,904 |
Accessibility. The target is WCAG 2.2 AA and it is checked on every change: Playwright and axe go through about twenty screens in the light and dark themes with a phone profile. The active section is never marked by colour alone, the preference for reduced motion is honoured, and the code passes the accessibility rules of jsx-a11y.
Performance. It is a PWA with Workbox: fonts are cached and the app opens without a network. Heavy views load on demand, the whole course is generated in about 70 ms and the home screen appears in 0.8 s on a phone with a CPU four times slower.
Security and privacy. Progress lives on the device, in IndexedDB, and an account only exists if you want to sync. Passwords are stored with salted scrypt and compared in constant time.
Architecture and quality. A monorepo with the app (React, Vite and i18next) and an API in Fastify with Drizzle and PostgreSQL, which runs similarity searches with pg_trgm. 31 unit test files and end-to-end tests.

Status. The five sections work and every level has content; the course keeps growing.



