A handwriting drill for Japanese, from a 53-minute prototype to a card game with a dealer, a sound palette and ink you can replay.
I shuffled already. You are welcome.
v1 took 53 minutes on a train, and it worked. The next seven weeks went into turning a working drill into something you want to open: a dealer with a voice, a deck that lands, ink that dries into print.
Romaji prompt → you write the character by hand.
Flip → animated stroke reveal, your attempt still visible.
Got it / missed it.
Missed cards replay at the end of the deck.
That was v1. The loop is the same today: romaji prompt, write it by hand, the real stroke order draws over your attempt, you grade yourself. But now it is dealt from a deck. Characters, words and kanji come in sets, every correct word earns a card, and a dealer called the Joker runs the table.
Before any of the polish below, the mechanism had to work. This is the only measurement there is, and it was taken on the 53-minute version.



This is one person, one day. It's not a study. It's a log.
He has dealt this deck ten thousand times, and you are the most entertaining thing at his table.
He is a guide, not a hero.
I shuffled already. You are welcome.
Two frames, mouth open and closed, swapped every 110 ms while the line types at 22 ms a character. His voice is the one synthesized sound in the app.
The first premise was that he thinks he is the Kana Hero. The creator's cold read of draft 1: too much about him, too vague. Eight of thirty lines survived, and the premise changed.
They named the app after me. Choose a deck.
I shuffled already. You are welcome.
Ego as service: something he did for you.
Pick a deck. I will be magnificent in any of them.
First try means a shiny card. No pressure. Some pressure.
Information first, the joke in the last words.
I have never missed a stroke. Pick a deck and watch.
No signal needed. Underground too. Excuses? なし.
The user is the subject.
Any deck. I look good in all of them.
Katakana spells borrowed words. コーヒー, タクシー, probably your name.
Japanese in kana, never needed to get the line.
A script, joker-audit, compiles the corpus and fails the build when a line breaks a rule. Every claim that can go stale is tagged with the fact it depends on, and the facts are checked too. If a fact stops being true, the lines that need it go silent.
The dialogue is tested like code.
98 LINES SHIP IN THE GLOBAL CORPUS, PLUS LINES SCOPED TO EACH SET
Every animation answers a question you have at that moment. Has the deal started? Did that count? What did I earn? The demos below are not recordings. They are the app's own code, running in your browser on the app's timings — the deal, the reward, a full round of the drill, and the stroke reveal. The receipt is live too, in §07.
Reduced motion is designed for every beat, not just switched off. The deal seats every card behind one 120 ms fade, the reward arrives finished in one 160 ms fade, the melt becomes the same 160 ms fade, the meaning peek keeps its full second but loses its rise, the hand tick only updates the count, and a held receipt shows its ink whole instead of writing it out. Each demo takes that path when your system asks for it.
Brush, paper, cardstock, felt and wood, and one metal. Every cue is an object you would find at a card table. Graphite was cut when both hands became brushes.
The Joker's voice is the one sound with no file: a square-wave blip with pitch jitter, in the line of old RPG dialogue. A voice should not be made of the same material as the furniture. The app has two visual layers, the card table and THE LOG's razor geometry, and the sound follows the same split.
Cues were generated, then trimmed and levelled in a sound lab built for the job. The lab's settings override the design numbers. The voice was tuned the same way, on a phone speaker, against the longest real line.
deal.press was wired, then removed on 2026-09-25: the next screen mounted in the same tap and the riffle landed on top of it.
SYNTHESIZED LIVE, ONE BLIP PER 6TH CHARACTER OF HIS LONGEST LINE HERE: “Every run deals the whole set, shuffled. No memorizing my order.”
Loudness is hierarchy. The voice is the quietest thing in the app, the worn flip sits under the base flip, and the shiny flip is the loudest card. You can hear rarity.
| joker voice | −28.0 · SET |
|---|---|
| prompt.melt | −23.9 |
| ui.nav | −22.1 |
| flip.worn | −17.4 |
| deal.land | −16.8 |
| flip.base | −16.0 |
| ui.toggle | −16.0 |
| drawer.open | −16.0 |
| ui.primary | −14.4 |
| hand.tick | −12.2 |
| reveal.skip | −12.1 |
| reveal.end | −11.8 |
| flip.shiny | −9.0 |
Progress is a collection of cards, not a percentage.
A word earns a card when you grade it correct. First try is shiny, second is base, third or later is worn. The rarity is fixed when it is earned.
Nothing is kept until the run finishes. Leave halfway and you keep nothing. The reward belongs at the end, so GOT IT is a 260 ms tick and the celebration happens on the result screen.
Shiny is the only glowing thing on any screen.
v6 added the first thing the app keeps that is not a number: your actual ink.
This is the one thing points can do that a PNG cannot.
The app runs on the channel's own system, THE LOG: seven greys and four signals.
| ✕ Handwriting recognition | Judging your own stroke against the animation is what makes you look closely at it. |
|---|---|
| ✕ Hints | A hint converts recall into tracing. |
| ✕ Skip | The only way past a card is to write something and grade it. |
| ✕ Streaks, notifications | Retention theater. |
| ✕ An account | The number is worth more when it is yours, on one device. |
| ✕ Percentages | 38 of 71 says what is left. 54% says how much you are failing. |
Every version that shipped code has a design handoff and a written spec in the repo. v1's spec was rewritten in place for v2, so it survives as v2's. v4 shipped nothing: it was a design round, two briefs and a handoff, and no code.

the loop
Wireframes · Hi-Fi

katakana · THE LOG
v2 Handoff

capture bank · offline
v3 Handoff

the Joker and the card, designed · no code
two briefs · v4 Handoff

the Joker, decks, sets, motion, sound
v5 · v5a · v5c handoffs · sound inventory

the receipt
v6 Receipt
THUMBNAILS: THE TOP OF EACH VERSION'S HANDOFF FILE, AS RENDERED. v4'S AND v5'S MASCOT IMAGE IS NOT IN THE FILES, SO ITS SLOTS ARE BLANK.
v1's first prompt asked for the spec before any code. From v5 on, git shows the order: spec, then handoff, then code. v2 and v3 committed their docs together with their code, so the record can't prove which came first, and this page doesn't claim it.
51 COMMITS · 11 WORKING DAYS · 2026-08-04 → 2026-09-25
WATCH v1 GET BUILT ON THE TRAIN →There's no App Store link. It's a website that installs like an app — that's why it's free, and why it works with no signal. It works fully offline after the first load, including on a plane or underground.
TAP A STEP TO HOLD IT