Privacy Policy

What stays on your device, what leaves it, and who receives it. No hedging.

Last updated 5 September 2026

Account
Not required
Advertising
None
Your typing data
Local by default
Usage analytics
Anonymous, first-party, off with one switch

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.

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.

RecordedExample
Views opened, and how long each stayed openkeyforge, 2m 14s
Tests started, finished, abandoned or failedtest_finish, 30s test
Result metricsWPM, raw WPM, accuracy, consistency, duration
Settings and themes changedcaretStyle → block
Leaderboard outcomesqualified, or which rule stopped the run
Sign-in attempts, and why one failedauth/popup-blocked
Session contextTime zone and local hour, browser language, phone-sized or not, the page you landed on, the host that referred you
Approximate locationCountry and city, derived from IP
Random browser identifiera3f1c02e9b74d518 — see below
Account identifierOnly 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:

FieldWhat it is
Display nameDerived 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 identifierYour Firebase user ID, used to keep one best run per person
Result metricsWPM, raw WPM, accuracy, consistency, mode and duration
Keystroke timingsThe gaps in milliseconds between your keypresses during that run, at half resolution — the evidence the screening reads
Screening verdictThe 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:

ServicePurposeReceives
Google AnalyticsAggregate traffic measurementPage views; sets cookies
Google FirebaseUsage statistics, optional accounts, leaderboardThe fields listed above; leaderboard entries you submit
Google FontsTypefacesIP address, user agent
jsDelivr CDNChart rendering libraryIP address, user agent
GetGeoAPICountry/city from IPIP address
Cloudflare PagesHostingStandard 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

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.

TypeCrt Docs FAQ About Terms Security License