Privacy Policy
What stays on your device, what leaves it, and who receives it. No hedging.
Last updated 5 September 2026
Correction, August 2026. An earlier version of this policy said TypeCrt collected no data and used no cookies. That was inaccurate: the site loads Google Analytics and records anonymous usage events. Nothing about the product changed — the policy was simply wrong, and this version describes what the site actually does. Everything below is verifiable in your browser's network inspector.
Stored on your device
Your typing history, personal bests, per-key statistics and all 35 settings live in your browser's
localStorage. They are not required to leave your device, and TypeCrt works fully offline
once loaded.
- Typing history — results with WPM, accuracy, consistency and timestamp
- Settings — theme, font, caret, sound and every other preference
- KeyForge state — per-key confidence scores and unlocked letters
Sent off your device
Two things transmit, and both are described exactly here.
1. Anonymous usage statistics
TypeCrt records what people do with the site to its own backend, so that decisions about what to build next rest on use rather than on guesses. No third-party analytics service is involved, nothing is sold, and nothing is shared. No account is needed, and it is not linked to an identity unless you are signed in.
| Recorded | Example |
|---|---|
| Views opened, and how long each stayed open | keyforge, 2m 14s |
| Tests started, finished, abandoned or failed | test_finish, 30s test |
| Result metrics | WPM, raw WPM, accuracy, consistency, duration |
| Settings and themes changed | caretStyle → block |
| Leaderboard outcomes | qualified, or which rule stopped the run |
| Sign-in attempts, and why one failed | auth/popup-blocked |
| Session context | Time zone and local hour, browser language, phone-sized or not, the page you landed on, the host that referred you |
| Approximate location | Country and city, derived from IP |
| Random browser identifier | a3f1c02e9b74d518 — see below |
| Account identifier | Only if you are signed in — otherwise null |
The text you type is never transmitted. Only the resulting numbers are.
The random identifier. A 16-character value generated by your browser's random number generator and stored only for this site. Nothing about your device, account or network goes into producing it, and it does not follow you to any other website. It exists so that four visits by one person can be told apart from four visits by four people — without it, a “daily users” number means nothing. Clearing this site's data removes it permanently.
How long it is kept. At most ninety days. Every record is stamped with its expiry date when it is written, and expired records are deleted whenever we open our own admin dashboard — most days, in practice, so a record may outlive its ninety days briefly before the next sweep takes it. We would rather say that than claim an automatic expiry we are not running: the database's own time-to-live feature needs a paid plan this project is not on.
Turning it off. Settings → Privacy → Anonymous Usage Statistics. It stops immediately and anything gathered but not yet sent is discarded. If your browser sends Global Privacy Control, this is off regardless of that switch and you do not have to ask twice.
2. Your account, if you create one
Signing in is entirely optional and exists for two reasons: syncing your typing history across devices, and submitting a run to the public leaderboard. If you sign in, your results are stored against your account so they follow you. If you never sign in, this never happens.
3. The leaderboard, if you submit to it
Nothing is ever submitted automatically. A finished run is screened locally and you are shown whether it qualifies; it reaches the board only when you press Submit. Submitting is per-run, so signing in does not put you on the board and neither does any past result.
A submitted entry is publicly readable by anyone and contains:
| Field | What it is |
|---|---|
| Display name | Derived from your Google account — first name and last initial,
e.g. Ada L. You cannot choose a different one, and your full name is not published |
| Account identifier | Your Firebase user ID, used to keep one best run per person |
| Result metrics | WPM, raw WPM, accuracy, consistency, mode and duration |
| Keystroke timings | The gaps in milliseconds between your keypresses during that run, at half resolution — the evidence the screening reads |
| Screening verdict | The result of the checks described on the verification page |
The timing record is intervals only. It is not the text you typed, and the words themselves are still never transmitted — a list of gaps cannot be turned back into characters. It exists so a ranked score carries its own evidence instead of being an unbacked number, and so entries can be re-checked later if the screening improves.
To remove an entry, email us; see Deleting your data.
Third parties
Every external request the site makes, and why:
| Service | Purpose | Receives |
|---|---|---|
| Google Analytics | Aggregate traffic measurement | Page views; sets cookies |
| Google Firebase | Usage statistics, optional accounts, leaderboard | The fields listed above; leaderboard entries you submit |
| Google Fonts | Typefaces | IP address, user agent |
| jsDelivr CDN | Chart rendering library | IP address, user agent |
| GetGeoAPI | Country/city from IP | IP address |
| Cloudflare Pages | Hosting | Standard server logs |
Cookies. TypeCrt itself sets none. Google Analytics does — the standard
_ga measurement cookies. A browser-level tracking blocker or an extension will stop them
without affecting anything else on the site.
Deleting your data
- Local data — use your browser's Clear site data for typecrt.com. This erases all history, settings and KeyForge progress immediately and permanently
- Account data — email us and we will delete the synced copy and any analytics rows tied to your account
- Leaderboard entries — email us and we will remove them. Entries cannot be edited or deleted from the app itself: a board whose rows can be changed after the fact could not claim to have verified anything
Contact
Questions, corrections, or a deletion request: [email protected]. If you find anything on this page that does not match what the site actually does, tell us — that is a bug, and it gets fixed.