I built an app to memorize 3000 English words. No account, no server, no build.
I wanted something specific to review my English: not a €9.99/month app with guilt-trip streaks, just the words that actually matter, in the order they matter, and a spaced-repetition engine that puts them back in front of me at the right time.
Since that didn’t quite exist, I built it. It’s called Mes mots d’anglais (“My English words”): demo here.
The idea: frequency first
The 3000 most frequent words cover the overwhelming majority of everyday English. Learning them from most frequent to rarest maximizes return on effort: each word you learn early unlocks more sentences than ten rare words learned at the end.
So the app sorts the 3000 words into 6 levels of 500, from most useful to most niche. You progress level by level, and you see your real progress (words discovered / mastered) instead of an empty gamified score.
The engine: Leitner, in your browser
Review runs on a classic Leitner system — 6 boxes. Answer correctly and the word moves up a box and comes back less often; get it wrong and it drops down and returns soon. Spaced repetition, simple, and it works.
The point I cared about most: no account, no server. Your progress lives in your browser’s localStorage. No database to host, no GDPR to manage, no data to leak — it never leaves your machine.
The architecture I’m proudest of: data is the truth
The real structural decision is this one: all content lives in JSON files, and the code only reads them.
words.json— the 3000 words (en,fr, part of speech, level).verbs.json— irregular verbs;phrasal.json,expressions.json— multiple-choice decks.sentences.json— fill-in-the-blank sentences for the “complete the sentence” exercise.
To add or fix content, I touch a JSON file, never the HTML or the JS. A small script (validate-data.mjs) checks the format every time. The result: enriching the app is data editing, not development. That’s what makes it maintainable by one person, over the long run.
Several exercises, one page
At first there was only a 3-choice quiz. I grew it into multi-exercise, organized in three sections: Vocabulary (the 6 levels), Grammar (irregular verbs, phrasal verbs, expressions), Practice (complete a sentence, tap-to-place).
I ran that rework spec-first: a short design doc before touching the code, to decide the categorization and the config-driven deck model before coding. On a build-less app where everything lives in a single app.js, writing the spec first kept me from painting myself into a corner.
What I take from it
The lesson isn’t “reinvent Anki.” It’s that a hard constraint — no server, no account, no build — pushes toward a cleaner architecture, not a poorer one. Data at the center, the browser as the runtime, GitHub as both host and database.
Try it here: Mes mots d’anglais → (the code is open). An experiment from my lab — built fast and designed to run on its own.