Recently shipped
- Tape (ticker) mode. Single horizontal line of words that scrolls left as you type. JS rAF-driven slide for smooth motion; 15-second default sprint.
- Games depth. Word Shooter (horizontal drift) and Endless (no 3-miss cap) modes. Per-mode high scores in
profile.gameStats.byMode. Visible combo multiplier (1.5x → 5x). Score-pulse animation. "New best!" overlay with personal-best chip on each round end. - World-class mobile toolbar. Stats row + "current mode" summary chip. Tapping opens a 62 vh bottom sheet with every mode / variant / source. No more horizontal chip strip.
- Tap-to-type pause guard.
engine.pauseTimer()itself refuses to pause within 450 ms of the last keystroke — soft-keyboard taps can't bleed onto the Pause button anymore. - Umami analytics + public dashboard. ~50 named events covering session lifecycle, modes, library, lessons, challenges, settings, perf, errors. The full dashboard is embedded on /analytics/.
- Red gorilla favicon. Brand mark re-colored to brand red across every PNG size.
- Service-worker auto-update.
updateViaCache:'none'+controllerchangeauto-reload — fresh builds reach users without manual cache clears. - Achievements dedup. Celebration panel never shows the same achievement twice;
evaluate()uses a Set. - D3 across the stats page. WPM trend, per-finger viz, per-key sortable bars, calendar heatmap with day-detail drill-down, missed-words bar chart, recent-sessions list, character report. All lazy-loaded; legacy fallback if D3 fails.
- Catch the Word game. Falling-word mini-game driven by your missed-words list. Per-char prefix coloring, streak multiplier, pixel-disintegration animation on catch.
- Achievements expansion. 56 → ~120 unlocks.
- Content expansion. Quotes 452 → 874. Idioms 449 → 717. Poems 148 → 177. Books in library reached 290.
- Universal auto-advance. 10-second countdown after any clean run.
In flight
- Adaptive lesson curriculum — weighted picker within each lesson's key set, not just Lesson 20.
- Numpad layout + drills for users who want to drill the number pad explicitly.
- EPUB / PDF import on the custom page so users can type from their own ebooks.
Planned
- Open lessons + "save as lesson" — turn any saved custom text into a replayable lesson with its own progress tracking.
- Live ticker — keystroke-by-keystroke pulse strip + rolling-WPM ribbon under the typing surface.
- Lesson trends — small-multiples grid showing WPM/accuracy improvement curves per lesson.
- Bigram chord diagram — visualize which bigrams chain into which trigrams.
- Theme builder — pick your own background / text / accent tokens, save themes locally, export/import as JSON.
- Additional typing fonts — Fira Code, IBM Plex Mono, Iosevka, Cascadia Code as opt-in choices.
- More games — Word Snake, Word Boss (single long target with health bar + countdown), Punctuation Storm.
- Power-ups in games — bonus words that grant time-freeze or screen-clear.
Deferred
- Cloud sync of profiles. Local-first is the model; sync introduces accounts, server cost, and privacy tradeoffs that don't fit the project's posture today.
- Multiplayer / racing. Adds substantial network + matchmaking complexity for a feature plenty of other sites already do well.
- Built-in voice or video coaching. The typing surface is the product; layered media expands surface area without expanding the core practice loop.
Suggest an addition
Have something you want to see? Send a suggestion or open an issue on GitHub. The roadmap moves with the people who use the project.