Skip to content
mreysei · Michael Reyes
Theme

Mamoru Japan

An installable web app to keep your Japanese alive, from kana to the JLPT, that works offline.

Type
Web
Year
Categories
Mamoru cover on an indigo background: the 守 logo, the name and the line "Keep your Japanese alive", next to three phones showing the levels, the home screen and a kanji writing exercise.

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.
Words per JLPT level N1 asks for over four times the words of N5.
Show the data: Words per JLPT level
Words per JLPT level
CategoryWords
N5674
N4622
N31,625
N21,731
N12,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.

Offline first

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

Technologies

Screenshots