FAQ
How the engine works, where your data lives, why the keyboard heatmap shows what it shows. If your question isn't here, open a GitHub issue.
What's the keyboard shortcut to restart?
Tab then Enter — two keys, in that order. Tab arms a "press Enter to restart" prompt; Enter within 2 seconds confirms; any other key cancels. The two-key combo prevents accidental restarts and avoids collisions with overlay tools (NVIDIA GeForce, etc.) that grab Alt+letter combinations. Old Alt+R no longer works.
How does completion tracking work for books, quotes, idioms, parables, and poems?
A session marks an item complete only when both are true:
- The cursor reached the end of the target (
endCursor >= targetLen) - Accuracy was at least 80%
Type two characters and hit Esc, the item stays unticked. Type all the way through at 90%, it gets a green ✓. Per-item and bulk reset are available on every corpus list and book detail page.
Why no em-dashes anywhere?
Em-dashes (—) aren't on a normal keyboard, so a typing tutor can't use them — the user can't physically produce the character. We replace them with -- (typewriter convention). Same treatment for smart quotes ("", '') and ellipsis (…) which become straight ASCII. See the blog post for the full rationale.
How do I suggest a quote, drill, or other content?
Use the Contribute hub. Eight forms cover quotes, books, parables, idioms, poems, drills, testimonials, and thanks notes. All free, no signup, powered by Web3Forms. Submissions come straight to me; approved testimonials appear on /reviews/ and approved thanks notes on /thanks-wall/.
Where is my data stored?
In your browser's localStorage on this device only. Nothing is sent to a server. Clearing browser storage clears your data — export to JSON first if you want a backup. See the Analytics page for the full data story.
Why does the heatmap show wrong keys for Dvorak / Colemak?
Input handling uses KeyboardEvent.key, which is whatever character your OS produces. The layout selector in Settings only controls how the heatmap visually arranges the keys. If you're typing in Dvorak with the OS, set the layout to Dvorak so the heatmap matches.
Why is paste disabled?
Pasting would let you "type" thousands of words instantly and skew your stats. The keys you actually press are what builds the adaptive model. I block paste events and reject inputType === "insertFromPaste" — both belt and suspenders.
Can I sync between devices?
No, by design. Use Settings → Export JSON, then Import JSON on the other device.
What's the maximum custom text size?
200 KB total per profile. Long files are chunked into ~500-character segments at sentence boundaries so you can practice in pieces.
Why an editorial style instead of pure mono?
Reading speed for long-form content (the lessons, FAQ, about) is highest with serif display headers and a generous line-height. The typing surface itself stays in monospace because typing tests need exact-width characters. The hybrid is intentional.
I'm typing 250+ wpm and it says "flagged"
Sessions over 250 wpm are flagged as suspect and excluded from "best" totals. If you're genuinely that fast (legend), please open a GitHub issue — I'll raise the cap.
Does the adaptive engine actually work?
Yes — type a few sessions and check /stats/. The keyboard heatmap will visibly redden the keys you struggle with most. Switch to /practice/?mode=adaptive and the words generated will be heavily weighted toward those keys. I use a per-character + per-bigram rolling model, EMA-blended with Laplace smoothing for low-sample keys. Read Tech stack for specifics.
Can I use this offline?
Once loaded, mostly yes — the engine, all stats, and saved custom texts work without a network connection. Loading a fresh quote needs network, but everything else (practice, adaptive, custom, drills) runs locally.
Why no leaderboards?
Two reasons: (1) leaderboards require accounts, which require a backend, which breaks the privacy model; (2) leaderboards reward a different game than what helps you actually type better. The local "personal best" tracking does the same job without the noise.
Can I contribute?
Yes — open an issue or PR. Especially welcome:
- Better word lists (current ones are placeholder — looking for properly curated 1k/5k/10k common English).
- Additional keyboard layouts (BÉPO, Norman, etc.).
- Translations for non-English typing practice.
- Bug reports with reproducer steps.