Privacy and fair play
The game is local-first. Nothing identifies you, and the page loads nothing from third parties.
- Local save: your progress is saved in your browser every few seconds. Fonts and scripts are self-hosted; the only outside script is Cloudflare's cookieless page-view counter.
- Cloud save (optional): create an account code (
R2R-XXXX-…) and enter it on another device. No email and no password; the server stores your save and a hash of the code. Delete both any time under Settings → Save. - Anonymous gameplay stats: events like "a session lasted 25 minutes in prod", with no identifiers, to help balance the game. Turn them off under Settings → Save. Browsers sending Global Privacy Control or Do Not Track start with them off.
- Notifications (optional): a push when your offline storage is full, or 10 minutes before a running challenge times out. The server stores only your browser's push address and the times, until they are sent.
- Leaderboards (optional): fastest Catalog Everything, most rows, most Big Bangs and most Catalogs. You appear under a generated name like "Idempotent Grumpy Walrus" and can remove yourself any time.
Fair play
Saves are encoded and sealed, so a save edited by hand still plays but is marked as modified and never ranked. The server re-checks every uploaded save against the game's own rules: currencies must match the rows earned, and rows cannot grow faster than the save could produce them in real time. Leaderboard times come from the server's clock, from a ticket signed when the game starts.
Source
The code is public at github.com/drumandbytes/rows-to-riches under the PolyForm Noncommercial license.