A typing tutor without the spyware
Why I built Key Warrior — and what it does (and doesn't) do with your typing data.
Who built this
I'm Yasir, an independent developer based in Riyadh. Key Warrior started as a single tool inside Productivities.net — the Typing Tutor — and grew into its own focused subdomain because typing practice deserves room to breathe: full-screen drills, distraction-free layouts, and progress that you actually own.
I'm not a typing-coach company. I'm one person who got annoyed at typing tutors that either lock features behind subscriptions, demand an account before you can press a key, or quietly send every keystroke to an analytics endpoint. Typing data is sensitive — passwords get rehearsed, private text gets typed, and per-key timing is enough to fingerprint a person. That kind of telemetry has no place in a free practice tool.
So I rewrote the engine from scratch with a single rule: everything stays in the browser. No backend. No event stream. No "anonymized" exports.
How the engine actually works
Key Warrior is a single-page React app. The typing engine lives in src/hooks/useTypingEngine.ts and runs entirely on keydown events in your browser. Here's what happens when you press a key:
- The keystroke is matched against the expected character.
- WPM is calculated as (correct characters ÷ 5) ÷ minutes elapsed.
- Accuracy is calculated as (correct keystrokes ÷ total keystrokes) × 100.
- Your session result — final WPM, accuracy, lesson ID, timestamp — is written to localStorage under one key per profile.
That's the whole pipeline. No fetch, no WebSocket, no navigator.sendBeacon. You can verify this yourself: open DevTools → Network → start a lesson → confirm zero outbound requests during typing. XP, streaks, levels, and personal bests are all derived from the same localStorage blob. Clear your browser storage and the slate is wiped — there is no server-side mirror to pull from.
The offline test
Don't trust the privacy claim — verify it. Load this page once, then disconnect your Wi-Fi. Start any lesson. Type the whole thing. Your WPM still updates, your XP still increments, your streak still counts. That's because nothing is being sent anywhere — there is no "anywhere" to send it to.
What's inside
Key Warrior covers the four practice modes I actually use:
- Lessons — Graduated drills from home-row basics through advanced punctuation and pro-level mixed text.
- Word packs — Common-word frequency lists in English and Arabic, for steady throughput practice.
- Timed tests — 30s / 60s / 120s sprints with WPM and accuracy reported at the end.
- Custom text — Paste your own paragraph and drill it. Useful for memorizing specific passages or practicing field-specific vocabulary.
Arabic mode supports the standard Arabic 101 keyboard layout. The engine handles RTL correctly, including punctuation direction.
Honest limits
A few things Key Warrior intentionally doesn't do:
- No mobile-first typing. On-screen phone keyboards autocorrect, predict, and don't track per-key timing the way a physical keyboard does. Key Warrior runs on phones but the WPM numbers won't reflect real touch-typing skill. It's a desktop tool.
- No multiplayer races. That requires a backend, which means an account system, which means data. Skipped on purpose.
- No leaderboards beyond your own personal bests. Same reason.
- No layout switcher beyond QWERTY and Arabic 101. Dvorak / Colemak support is a fair request — if you want it, the contact link reaches me.
How this is funded
Key Warrior is free and will stay free. The parent site, Productivities.net, displays Google AdSense to cover hosting and domain costs. Ads on Key Warrior, when they appear, are clearly labelled and never inserted into the typing area itself.
Google AdSense does not receive your keystrokes or session results. Your typing stays in your browser regardless of what's served on the rest of the page.