Kana Hero

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.

§ 01

What it does

45S AT 2× · NO AUDIO TRACK · LOOPS
v1, AS SHIPPED ON 2026-08-04

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.

§ 02

It worked before it was pretty

MEASURED ON v1 · HIRAGANA ONLY · NO JOKER, NO SOUND, NO DECKS

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.

The baseline answer sheet: a hand-written romaji grid running a, i, u, e, o down to wa, wo, n, with a hiragana character under some prompts and a hand-drawn question mark under the rest.
✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕
GREEN — FROM MEMORY
✕ — BLANK OR WRONG
RESULTBASELINE WRITING TEST · BEAT 2/6
16/46FROM MEMORY
34.8% OF BASE KANA · NIGHT BEFORE THE TEST
22.5% OF ALL 71 KANA
CORRECT16
WRONG / MISSED30
VS ALL KANA16/71
IN MEMORY
あ い う か き く こ す て と は ひ へ ほ わ ん
WRONG / MISSED — 30
え お が ぎ ぐ げ ご さ し せ そ た ち な に ぬ ね の ふ ま み む め も や ゆ よ ら り る
OVL-02D · BEAT 2 RESULTS — THE LIVE OVERLAY FROM THE VIDEO · PLAYS ON SCROLL, ~6S, THEN HOLDS
SAME 46-CHARACTER TEST · THREE RUNS · FROM MEMORYSTRICT CONFIDENCE GRADING
BASELINE · DAY 016/46 · 34.8%
+5 MIN AFTER THE DRILL39/46 · 84.8%
NEXT DAY · +12 HRS43/46 · 93.5%
+27 KANA+58.7 PTS · ONE DAY+4 OVERNIGHT — NO PRACTICE BETWEEN THE TWO TESTS
THE CAVEATS — READ THESE
  • n = 1. It's me.
  • I already read hiragana fluently. This measures production, not learning from zero.
  • "Correct" meant strict confidence grading — vague recollection or "kinda looks like it" counted as a fail.
  • Baseline was the 46 base kana; the app covers all 71. The comparison run re-uses the identical 46-character test, so the numbers are actually comparable.

This is one person, one day. It's not a study. It's a log.

§ 03

The Joker

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.

JOKER

I shuffled already. You are welcome.

12 OF THE 98 SHIPPED LINES, VERBATIM · 22 MS A CHARACTER · MOUTH SWAPS EVERY 110 MS · ONE SQUARE-WAVE BLIP EVERY 6TH CHARACTER, ±7% PITCH, −28 DBFS
HE TALKS

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 RULES
  • Positive only
  • Information first, joke in the last 1–4 words
  • Under twelve words
  • The user is the subject — at most 1 line in 3 about him
  • Target: 70% of lines carry some Japanese, in kana, never needed to understand the line
  • Never spoils the card
  • Never streaks, XP or guilt
THE REWRITE

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.

DRAFT 1 · CUT

They named the app after me. Choose a deck.

SHIPPED

I shuffled already. You are welcome.

Ego as service: something he did for you.

DRAFT 1 · CUT

Pick a deck. I will be magnificent in any of them.

SHIPPED

First try means a shiny card. No pressure. Some pressure.

Information first, the joke in the last words.

DRAFT 1 · CUT

I have never missed a stroke. Pick a deck and watch.

SHIPPED

No signal needed. Underground too. Excuses? なし.

The user is the subject.

DRAFT 1 · CUT

Any deck. I look good in all of them.

SHIPPED

Katakana spells borrowed words. コーヒー, タクシー, probably your name.

Japanese in kana, never needed to get the line.

THE POLICE

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.

“First try means a shiny card. No pressure. Some pressure.”
needs:rule.rarityByTries
↳ holds: SPEC-v5a §1.4 · rarityFor()

The dialogue is tested like code.

98 LINES SHIP IN THE GLOBAL CORPUS, PLUS LINES SCOPED TO EACH SET

§ 04

Motion

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.

D1 · THE DEAL · S6bLIVE · NOT A RECORDING
ONE CARD EVERY 90 MS · 420 MS IN THE AIR · ARC LIFTS 26 PX AND OVERSHOOTS THE SLOT · WRIST FLICKS -7° PER CARD. THE LAND SOUND FIRES AT 197 MS, NOT 420: THE EASING SEATS THE CARD AT 46.8% OF ITS FLIGHT AND SPENDS THE REST SETTLING, AND THE SOUND ANSWERS THE SEAT.
D2 · THE REWARD · S8LIVE · NOT A RECORDING
BEAT ONE: THE HAND IS DEALT FACE DOWN, 80 MS APART. BEAT TWO: IT TURNS WORN → BASE → SHINY, 240 MS A CARD. EVERY SHINY WAITS 450 MS IN SILENCE, THEN TAKES 320 MS TO TURN, LIFTING AND FLARING PINK. WHEN THE LAST CARD IS DOWN, EVERY SHINY SWIPES TOGETHER, EVERY 3 S. TAP THE SCREEN ONCE TO HURRY IT (140 MS FLIPS, 70 MS APART, NO HOLDS) AND AGAIN TO SNAP IT FLAT. A TAP HURRIES; IT DOES NOT SKIP.
D3 · THE ROUND · S7LIVE · NOT A RECORDING
GOT IT → WITH MEANING OFF, THE CARD GIVES ITS ENGLISH UP FOR 1 S AND THE GRADE WAITS → A FACE-DOWN GHOST FLIES TO HAND IN 260 MS AND THE COUNT POPS TO 1.15× WHEN IT LANDS → THE NEXT PROMPT MELTS INTO THE SLOT WHILE THE GHOST IS STILL IN THE AIR: NOISE, DISPLACEMENT AND BLUR DRAINING TO ZERO OVER 900 MS. NO RARITY HERE — THAT IS THE RESULT SCREEN'S TO REVEAL.
D4 · THE STROKE REVEALLIVE · NOT A RECORDING
EACH CENTERLINE IS REVEALED START TO END, CLIPPED TO ITS OWN SHADOW, AT 1600 UNITS A SECOND ON A 1024 GRID — SO A LONG SWEEP TAKES LONGER THAN A TICK. 140 MS FLOOR, 260 MS PEN-LIFT BETWEEN STROKES. TWO SOURCES, ONE ANIMATOR.

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.

§ 05

Sound

The palette is a card table.

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.

Objects are foley. The character is synthesized.

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.

Tuned by ear, not by table.

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.

Cutting is part of it.

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.

EVERY CUE · CLICK TO HEAR
THE LOOP
THE DEAL
THE REVEAL
THE INTERFACE
THE CHARACTER · NO FILE

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

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.

Peak level of each sound, in dBFS, quietest first
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
PEAK DBFS, MEASURED OFF THE SHIPPED FILES (FFMPEG VOLUMEDETECT, 2026-10-22). THE VOICE HAS NO FILE: −28 IS ITS SYNTH GAIN SETTING. SCALE −30 → 0.
Turn the sound on and replay the reward above. The flips climb in pitch with rarity, and the hold before a shiny is silent. ↑ D2
§ 06

The card: earned, worn, shiny

Progress is a collection of cards, not a percentage.

SHINY
新幹線
SHINKANSEN
shiny · FIRST TRY
BASE
出口
DEGUCHI
base · SECOND TRY
WORN
禁煙
KIN'EN
worn · THIRD OR LATER
LIVE COMPONENT, NOT A SCREENSHOT · THE SAME FACES D2 TURNS OVER, AT 1.15×
  1. 01

    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.

  2. 02

    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.

  3. 03

    Shiny is the only glowing thing on any screen.

§ 07

The receipt

v6 added the first thing the app keeps that is not a number: your actual ink.

D5 · THE RECEIPT · v6LIVE · YOURS TO DRIVE
WRITE 出口 ON THE BOARD AND GRADE IT YOURSELF: GOT IT ON THE FIRST TRY IS SHINY, AFTER ONE MISS BASE, AFTER TWO WORN. THE CARD OPENS ON YOUR INK FOR 500 MS, THEN THE PRINT FADES IN OVER IT IN 300. HOLD IT (150 MS STILL) AND YOUR STROKES REPLAY IN THE TIME YOU WROTE THEM, CAPPED AT 2 S, UNDER THE MODEL. WRITE MORE COPIES AND SWIPE THROUGH THEM, NEWEST FIRST, EACH DATED. NOTHING IS KEPT OR SENT.
  • Every card you earn keeps the ink you graded GOT IT on, as timed points, not a picture.
  • Hold the card and it turns into your attempt. The strokes replay in the time you wrote them, compressed to at most 2 s, with the model word faint over them.
  • Swipe through every copy of a word, newest first, each one dated: SHINY · 9-18-26.

This is the one thing points can do that a PNG cannot.

§ 08

The system: THE LOG

The app runs on the channel's own system, THE LOG: seven greys and four signals.

CHASSIS
PLATE
SEAM
CARBON
RAIL
PRINT
BONE
STRIKE
LIVE
CAUTION
BLUEPRINT
  • Strike is the only color spent on interaction.
  • Live and caution are reserved for GOT IT and MISSED. That is why DELETE in the bank is caution-bordered and never strike: deletion is permitted, not wanted.
FOUR TYPEFACES
  • Klee OneTHE KANA HAND
  • ArchivoDISPLAY
  • JetBrains MonoEVERY INSTRUMENT LABEL
  • Noto Sans JPJAPANESE IN THE INTERFACE
§ 09

What it refuses to do

✕ Handwriting recognitionJudging your own stroke against the animation is what makes you look closely at it.
✕ HintsA hint converts recall into tracing.
✕ SkipThe only way past a card is to write something and grade it.
✕ Streaks, notificationsRetention theater.
✕ An accountThe number is worth more when it is yours, on one device.
✕ Percentages38 of 71 says what is left. 54% says how much you are failing.
§ 10

Process: the paper trail

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.

  1. v1 design handoff: Wireframes · Hi-Fi
    v12026-08-04

    the loop

    Wireframes · Hi-Fi

  2. v2 design handoff: v2 Handoff
    v22026-08-30

    katakana · THE LOG

    v2 Handoff

  3. v3 design handoff: v3 Handoff
    v32026-08-30 → 31

    capture bank · offline

    v3 Handoff

  4. v4 design handoff: two briefs · v4 Handoff
    v42026-09-16

    the Joker and the card, designed · no code

    two briefs · v4 Handoff

  5. v5 design handoff: v5 · v5a · v5c handoffs · sound inventory
    v52026-09-16 → 25

    the Joker, decks, sets, motion, sound

    v5 · v5a · v5c handoffs · sound inventory

  6. v6 design handoff: v6 Receipt
    v62026-09-25

    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 →
§ 11

Use it

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

OPEN KANAHERO.JOEYGUIERRA.COM →