Last updated 29 October 2026
Privacy
This page describes what the turtletype website does with information. It is written in plain language. It is not a lawyer-drafted policy, and it is not a claim of legal compliance.
What stays in this browser
The typing test can be used without an account. Settings stay in this browser under the local storage key turtletype.settings.v1. Free test results are not saved to the browser or an account.
Accounts
An account is optional. Accounts use Neon Auth. Neon Auth sets a session cookie on the Neon Auth host and keeps its own browser storage. Email addresses, names, and account ids are not sent to analytics.
Plus accounts save test results to a Neon database. That history is separate from the counts below. The counts do not include missed words or exact scores.
Live site stats
When a time or word test, or the daily challenge, is completed, its rounded words-per-minute score is added to anonymous daily totals for the live counter. The counter shows the total number of tests and average rounded WPM since midnight Eastern Time. The site keeps only daily totals and WPM sums, not individual test records, account ids, accuracy, or typed text.
These aggregate totals are separate from PostHog analytics and still update if analytics is turned off. Daily aggregates are retained so the site can maintain its public statistics.
Billing
When billing is available, Plus is paid through RevenueCat and Stripe. Until then, checkout shows a pending message. Card details are not entered for analytics, and they are not sent to analytics.
Fonts
Google Fonts are loaded from Google, so visitors' IP addresses reach Google.
Analytics
Analytics data is processed in the United States. Counts go directly to PostHog Cloud (US) at https://us.i.posthog.com, not through turtletype, and never with sign-in cookies.
What is counted is limited to the fields below. A field is left out when it is missing or does not match the allowed format.
- Every count includes the public project token, the event name, a random id for that single count, and the time it was sent.
- A count includes the cookieless label $posthog_cookieless when the library sends it. That label is the same for every visitor and is not an account id. A count includes a cookieless-mode flag set to true, and a person-profile flag set to false, when the library sends those flags.
- A count may include a random session id and a random window id. Each one is kept only when it is a UUID. Cookieless mode does not create these ids, so they are absent unless the library supplies them.
- A count includes the analytics library's name and version, the project label turtletype, the site version, and the environment: production, preview, or development.
- The page path on a page view is /, /privacy, or other. The query string and the hash are not included. The same coarse path is included on a count that has a page address. When the host is allowed, the page address is that host's origin plus the coarse path. The site host is included only for turtletype-henna.vercel.app, localhost, 127.0.0.1, or 0.0.0.0.
- The referring site's domain is included when it is present, including on a page view. The full referring address is not included. The tags utm_source, utm_medium, and utm_campaign are included when they are present, including on a page view. A tag is kept only when it is 1 to 32 characters of lowercase letters, digits, underscores, and hyphens.
- The browser's user agent string is included when it is plain text of 1 to 512 characters and contains no email address, web address, or file name.
- A test started includes the mode (time, words, drill, or challenge) and the length (15, 30, 60, 10, 25, 50, or other).
- A test finished includes the mode, the length, and the tier (free or plus). It may include a speed bucket (under 30, 30-49, 50-69, 70-89, 90-109, or 110+) and an accuracy bucket (under 80, 80-89, 90-94, or 95+).
- A test interrupted includes the mode only.
- Practice started includes the source: result or progress.
- The daily challenge started includes no further detail.
- A Plus click includes the placement: banner or empty progress.
- Checkout started includes no further detail. How checkout ended is one of: opened, not signed in, billing pending, purchased, not completed, or error.
- An account form includes the action (sign in or sign up) and the result (ok or error), without the email or the name. Sign out includes no further detail.
The site-wide stats never store typed text, prompts, missed words, names, emails, account ids, or individual scores. For that counter only, the rounded WPM is added to aggregate totals and then discarded as an individual value. Analytics does not collect exact scores, session recordings, or heatmaps.
Analytics sets no cookie and stores nothing except a brief test write the library deletes right away. If that test write cannot be stored, analytics does not start. If you turn analytics off, this browser stores only that choice, so the choice remains after a reload. Turning analytics back on removes the stored choice. The choice is not kept in turtletype.settings.v1 or turtletype.history.v1. A browser that sends Do Not Track, or a Global Privacy Control signal, also stops these counts. The typing test still works when analytics is off or when us.i.posthog.com is blocked.
The browser's user agent string and the visitor's IP address (seen by PostHog from the request) are sent to PostHog in the United States so PostHog can compute a daily-rotating anonymous visitor hash. The site host is also part of that hash. The site relies on PostHog's cookieless mode. In PostHog's settings that mode is called Enable cookieless tracking. The PostHog project is configured by its owner. PostHog's documentation does not say whether it keeps the user agent or IP address after computing the daily visitor hash.
Analytics events are kept up to 1 year on the PostHog Free plan.
Contact
No contact address is published for this site.