Cadence

A typing trainer that thinks in beats, not just words per minute.

Speed on a keyboard is a rhythm problem. The fastest typists are not hammering keys, they are keeping an even tempo and letting the words fall on the beat. Cadence is built around that idea. It gives you a waveform, a metronome and a ghost of your past self, then gets out of the way so you can type.

Keystroke waveform

Every key you press paints a bar on a scrolling waveform. The spacing between bars is the real time gap between your strokes, so you can literally see your rhythm.

Tempo lock

A metronome reads the median interval between your keys and pulses at that pace. Turn on the tick and try to hold the beat.

Ghost race

Your best run for the current mode becomes a ghost that races beside you in real time. Stay ahead of the mark to beat it.

Live speed graph

Words per minute, raw speed, and error spikes are plotted while you type and again in full on the results card.

Per key heatmap and drills

Every run grades the keys you touched and tints a keyboard by accuracy. Your stats page keeps a lifetime version, and a weak-key drill builds runs out of real words that lean on the letters you miss.

Watch your run back

Every run records the exact timing of every character. Replay any of them, scrub through, and see where the tempo broke.

Five instrument themes

Midnight, Paper, Terminal, Synthwave and Nord. Each one remaps the entire surface, including the scrollbar, caret, selection, dropdowns and counters.

Local and private

No account, no server. Settings live in local storage and your run history and progress live in IndexedDB on your device.

Keyboard shortcuts
TabRestart the current run with fresh text
EscReset back to the start
EnterFinish a Zen run
Cmd / Ctrl + KOpen the command bar
Shift + TCycle through the themes
Built with

Next.js App Router, React, TypeScript, Tailwind CSS and Motion. Sound is synthesised in the browser with the Web Audio API, so there are no audio files to download. The whole thing is a static client app and deploys to Vercel with zero configuration.

Start a run