My son had a big English exam coming up. He needed to memorize 1,743 vocabulary words.
Flashcards weren't working. He'd stare at them passively, feel like he was studying, then blank on the actual test. Sound familiar?
I remembered something from a psychology paper I once read: recognition is not the same as recall. Being able to see a word and nod at it is completely different from being able to produce it when the cue is on the other side. Tests measure the harder thing.
So I built him a tile-matching game.
How it works
Eight word pairs appear on screen. Chinese on one side, English on the other. You tap to match them. Get them right: combo streak, points, satisfying animation. Get them wrong: the tiles shake and you try again.
The trick is in the direction: you always see one language and have to recall the other. It's not passive. Your brain has to do work.
1,743 words. 217 levels. 8 words per round.
Level 1 → words 1–8
Level 2 → words 9–16
...
Level 217 → words 1,737–1,743
Progress saves in localStorage. No backend, no login, no account. Open the page, play, close it. Come back tomorrow and you're where you left off.
The tech (it's boring, intentionally)
- Vanilla JS, single HTML file
- localStorage for progress + mastered words
- CSS animations for the match/shake feedback
- No build step, no framework, no dependencies
I kept it simple because my son was going to use it on his phone during lunch break. No time for slow loads or broken installs.
The accidental flip
After he used it for a few months, I realized: the whole game works in reverse too.
Chinese ↔ English is the same game whether you're a Chinese student learning English or an English speaker learning Mandarin.
So I made a second version, same codebase, just flipped the default direction. HSK 1–4 vocabulary. 1,743 words. Same 217 levels.

It's live here (free, no login):
👉 https://ordinarymantrying.com/tools/mandarin-match.html

The gaokao (Chinese college entrance exam) English version is here:
👉 https://ordinarymantrying.com/tools/gaokao/vocab-match.html
What I learned
The "testing effect" is real and criminally underused in language learning apps. Most apps show you words and ask you to rate yourself ("Hard / Good / Easy"). That's still passive — you're judging your recognition, not exercising recall.
The matching format forces recall. You can't fake it. Either you know which tile pairs with which, or you don't. That friction is the learning.
If you've built learning tools, I'd love to know: what mechanic has actually moved the needle for your users?
Top comments (0)