Oddletics

Your play, your data.

Updated 1 October 2026

Profile and local records

Your optional name, chosen country, sound and comfort settings, local skill progress and best scores are stored in this browser or app. An unfinished Meet is kept in this browser tab; completed Meet bests are saved locally. Saving these preferences does not publish your name or country. You can play without joining online rankings.

Settings lets you change your name, country and sound, and Clear local data removes your scores, records, saved name and, if you have one, your online profile, after a confirmation; your other settings stay. Clearing this site's browser data, or the app's stored data, also removes saved preferences. Different browsers and devices have separate records.

Online rankings

Starting a timed web round requests an anonymous player credential and a one-use attempt from our rankings service. Completing an eligible round sends the game inputs for score checking. We store the checked score and a digest of the inputs, not the raw input trace. Your private name and chosen country are not sent by Profile Save.

Choosing Agree & publish makes your selected name, country and best scores public. It also enables automatic publication of future eligible rounds from this device under that public identity. Countries are self-selected. Private Settings edits do not silently change the identity already used for automatic publication.

The service runs on Vercel with a Neon Postgres database in London. Public bests stay until you remove your online profile in Rankings. Your public name updates when you explicitly publish with a new name. This keeps the same profile and scores; changing your name does not create another entry. Your browser holds the credential needed to delete it; clearing browser data first can remove your ability to identify that profile automatically. Contact the creator if you need help. Deleting an online profile does not delete local records or copies already shared.

Rate limits use a daily hash of the network address, separate from your chosen country. Rate entries expire after two days and attempt entries become eligible for cleanup one day after expiry. Unpublished profiles with no remaining attempts are eligible after 30 days. Cleanup runs when later rounds start, so expired entries can remain while the service is idle. Hashes are pseudonymous, not a guarantee of anonymity.

Practice does not request a ranking attempt or save competitive records, skill progress or Meet totals. The public website can still count page visits; practice is excluded from its timed-round start, completion and replay events.

Protecting scores

Vercel BotID processes browser challenge data and request metadata to detect automated score submissions. Our app does not send the bot verifier your player name, country, score request body or player credential. Public game pages and ranking reads are not challenged. If verification is unavailable, you can still play and keep your score privately on the device.

Sharing is your choice

A scorecard includes the name and country you choose, your result and difficulty. These details leave your device when you choose a sharing destination. Downloaded images and messages already sent are not deleted by clearing local records.

Web demo analytics

We also count the first accepted control action and first successful action in a timed round, once each by sport and difficulty. Practice and repeated actions do not contribute to these two counts. No input coordinates, player identifier or score is included.

The public website uses Vercel Web Analytics and Plausible Analytics to count visits, instruction views, round starts, completions and replays by sport and difficulty. We also count when players open the publishing form and successfully publish, by sport and difficulty. We count when a second or third round is completed without leaving the game page; those counters reset when the page reloads. We also count the first round started in a different sport from the first sport played in the same browser tab; the tab keeps only that first sport's name until it closes. None of these counters creates a player identifier. We do not send your nickname, chosen country, score, challenge code or sensor readings in these events. All query strings and fragments are removed from analytics page URLs. Separately, a small allowlist of campaign labels, such as a friend referral or a publisher demo link, helps us count which links lead to play. These labels last for up to 30 minutes in the browser tab; arbitrary URL text and personal identifiers are not accepted.

Vercel processes request information to produce statistics such as browser type, referring site and approximate country. It describes its analytics as cookieless and uses a temporary visitor hash. This is separate from the country you choose in the game. Read Vercel's data collection explanation and privacy notice.

The same round, replay, share, rankings-view and successful-publication counts also go to Plausible Analytics, a cookieless service hosted in the EU, through this site's own address. Plausible stores no cookies and no persistent identifier; it keeps a visitor hash that changes every day and reads campaign labels from the page address only when a recognised tagged link opened it. Its script also reports how long the page stayed open, against the same cleaned page address. Read Plausible's data policy.

Oddletics skips analytics when your browser sends Do Not Track or Global Privacy Control. It also skips collection when a referring URL contains query or fragment data that the analytics SDK cannot redact. Preview URLs, local development and installed native apps do not load this analytics integration.

Device features

Music files load from this site and sound effects are generated on your device. Optional haptics accompany game events where supported. The demo does not request microphone, camera, location or motion-sensor access. Display geometry may guide the layout without recording a sensor history.