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.
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.
Create an account
Sign in
Lost the password? Use your recovery code.
Reset with a recovery code
Signed in
Sync runs automatically four seconds after any change. Signing out never touches your local progress — it only forgets the token.
Recovery code
Replace it with a new one at any time. The old one stops working immediately, and the new one is shown once.
Leaderboard visibility
Delete this account
Removes the account, its stored progress and every session, immediately and permanently. Your local progress in this browser is untouched — export it from the dashboard first if you want a copy.
Where is the server?
The honest parts
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.
- 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.
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.