Optional

Account

An account exists for exactly one reason: to carry your progress between a laptop and a phone. Nothing on this site is behind it.

There is no email address, anywhere

The login is a username. There is no email column and no mail transport, and those two facts are the same decision: an address this service could never send to could never be verified, never be written to and never recover an account — so storing one would be personal data collected for no purpose, which is precisely what GDPR's data-minimisation principle exists to stop.

Which leaves the obvious question, and it has an honest answer rather than a comfortable one. See the recovery-code box below.

Where is the server?

The honest parts

⚠ A lost recovery code is a lost account

Every account is issued a recovery code at registration: 20 characters of Crockford base32 (about 100 bits), grouped in fives, shown exactly once, and stored only as a SHA-256 hash. Presenting it mints the reset ticket that an emailed link would otherwise have carried. It is spent on use and replaced.

What it honestly is not is proof that anyone can still reach you — an email loop also confirms the mailbox works. If you lose the code, there is no way round it, and this page will not pretend otherwise. Keep it somewhere a browser cannot clear. It is deliberately never written to localStorage for exactly that reason.

What the server stores
  • A username, a display name, a password hash, and a hash of the recovery code.
  • Your progress document — the same JSON you can export from the dashboard.
  • Four figures re-derived from that document for the leaderboard: XP, mastery, streak and chapters passed. They are recomputed server-side rather than trusted from the browser — which raises the effort slightly and proves nothing, because the document is yours to edit. The leaderboard is a nudge, not an audit, and it says so.
✔ Two devices at once is the normal case, not the exception

You answer questions on a laptop and review cards on a phone. Last-write-wins would silently throw one of them away, so the sync merges field by field and never removes anything: XP takes the maximum, badges keep the earlier timestamp, a card's schedule is owned by whichever device reviewed it most recently while its repetition and lapse counts take the maximum of both. Losing a month of study to a sync bug is unrecoverable; a stale note is not.