FLINTTYPE
Help

FAQ.

Short answers to the questions that come up most. Anything missing? Open an issue on GitHub.

Is flinttype free?

Yes — completely. The site is open source under the MIT license, there are no ads on any surface, and every feature works without a paid tier. Signing in unlocks history and adaptive drills, but the practice and race surfaces work anonymously.

Do I need an account?

No. Anyone can hit the practice page, race against bots, or share a challenge link without signing in. Sign-in (via Clerk) persists your typing history, personal-best tracker, adaptive model, and preferences across devices.

How is WPM calculated?

Raw WPM uses the standard formula: characters typed divided by 5 (one "word"), divided by minutes elapsed. Net WPM — what the leaderboard ranks on — multiplies raw WPM by your accuracy as a percentage. A 100 WPM run at 90% accuracy comes out to 90 net WPM. Penalising on errors rewards clean, confident typing over reckless speed.

What does the adaptive engine actually do?

Every keystroke is timestamped against the character you were aiming for. From that stream the engine maintains per- bigram, per-trigram, and per-word means and variances using Welford's algorithm. On every fresh practice run, the word-picker biases toward words containing your slowest pairs — not random ones, not the most common ones, but the ones holding your overall speed back. The current weakness ranking is visible on your insights page once you're signed in.

Which keyboard layouts are supported?

QWERTY, Dvorak, and Colemak. Pick yours in customise → keyboard so the adaptive engine categorises your bigrams under the real same-finger / hand-alternation map for your layout. The on-screen keyboard widget also re-renders to match.

What do you store about me?

For signed-in users: a mirror of your Clerk identity (id, display name, email-localpart), per-test rows (start / end timestamps, WPM, accuracy, error count, mode, word count), and the aggregated weakness model. Per-keystroke timings are used to update the model and then discarded — we don't keep the raw keystream. Full details are on the privacy page.

Can I import my MonkeyType history?

Yes — MonkeyType import lives in the customise → manage menu. It pulls your completed-test history through their export and converts it into our row schema. We don't ingest per-keystroke timings (MonkeyType doesn't export them); adaptive drills will start fresh and rebuild your weakness model from new runs.

Why does my leaderboard slot say 'Guest'?

The leaderboard surfaces a public handle (@username) when we can resolve one. If your account doesn't have a username or display name set, or if the account behind a row has been deleted, the slot shows "Guest". Set a username in your Clerk profile to fix this — it'll appear on the next completed run.

How do races work?

Press Find race on the race page. We look for live opponents for up to five seconds; if no real players join, deterministic bots fill the empty seats so you're never blocked on someone else being online. Press Create lobby for a private challenge room — you'll get a short friendly URL (e.g. quick-otter-42) to share.

How do I report a bug or suggest a feature?

Open an issue on the GitHub repo. Bugs with a screenshot and a reproduction (mode, browser, what you typed, what you expected) get triaged fastest. Feature ideas are read and considered even when they don't immediately ship.