Recovery and save nudges
Every player has a six-character code, shown as tiles, that brings back their name and scores on any phone. Saving it is asked for once per visit, only on Home, and every way of saving has a fallback.
When it happens
A player's name, scores and rank live under a hidden id on the phone. A cleared browser or a new phone would lose them, so every player gets a short code the moment they exist, made in the background, and the app asks them to save it at the moments when there's something worth keeping.
| Moment | What opens | Where |
|---|---|---|
| Any time | Your code, from the key | the header on Home |
| After the first real result | the key turns outlined and gets a dot | the header on Home |
| The third day played, or a first top-10 spot | Keep your spot, once | Home |
| Safari, after three days played | Play from your home screen, a card | Home |
| First open from the home-screen icon, on a phone with no player | Played before?, full screen | over Home |
"I already have a code", or a ?code= link | Bring back your account | a sheet |
| A code is found | Is this you? | the same sheet |
| After switching | Welcome back, NAME | Home, for 7s |
Composition
The code
Six characters in two groups of three, written K7P-RX4, drawn from 20 letters and 5 digits (ACDEFGHJKMNPQRTUVWXY34679). Everything a child could misread is left out: 0 and O, 1, I and L, 2 and Z, 5 and S, 8 and B. A code has at least two digits and never four letters in a row, so it can't spell a word, and one that trips the name filter is drawn again. That leaves about 240 million codes. In Firebase, rc/CODE holds { id, name, at } (create-only, and the node can't be listed), rcu/id holds the code and rcs/id marks it saved. The old long code (word-word-id) still restores forever, and the sheet shows it if a short code can't be made.
The parts
| Part | Spec |
|---|---|
| The key | a 44×44 icon button in the header. Not saved yet: a 1.5px --fg outline and a 12px --fg dot at its top right, ringed in --ground. The dot pops in over 240ms from ×0.4 and rings twice (900ms, out to ×2.6) once per visit, then rests. Icon only, so the header never changes width |
| Code panel | the whole panel is the copy button: --raise fill, 1px --rule, radius 14, padding 22 / 16 / 14. Tiles 42px, radius 10, 1.5px --fg outline, letters in the display face at 900 21px, 6px apart with 8px between the groups; under 360px, 38px with 19px letters (3.25.4: six 42px tiles were 296px in a 286px panel at 320). "Tap to copy" in --fg-soft under them |
| Save buttons | Save to Photos (primary) and Save to Notes (outline) side by side, 52px tall, 8px apart. Each turns into an outline reading "Saved to Photos" or "Saved to Notes" with a check. Text buttons carry no icons |
| Link | "I already have a code", or "Done" once both are saved. In Keep your spot: "Not now" |
| Code field | the six tiles are the field: empty ones dashed in --rule-strong, the next one solid with a blinking caret. A real input sits over them at 16px, see-through but not opacity: 0 (3.25.4); it's 50px to tap, 4px over and under the tiles. Under them, Paste: the outlined icon button (44px, radius 12, a clipboard icon) |
| Is this you? | the name in tiles (34px, up to 7 characters) and in 800 20px; when this phone has its own player, a dashed note; Yes, that's me, then Save this phone's code first if this phone's code isn't saved, then "Not me, try another code" |
| Welcome back | a --raise card with a 1px --fg border, radius 14: "Welcome back, NAME" and "Your name and scores are here." |
| Home-screen card | "Play from your home screen" and "Keeps your scores safe on this phone", with How (or Install) and a close button |
| Played before? | full screen on --ground: the mark, six empty 44px slots, "Played before?", "Enter your code to bring back your name and scores.", I have a code (primary) and "I'm new, let's play". The tutorial waits for the answer |
Flow
No recovery screens have been captured yet; the specimens above use the shipping CSS.
Saving the code
- Open it. Tap the key on Home, or meet it in Keep your spot. The sheet is titled "Your code" and says what it's for: it brings back your name and scores if this phone forgets you, and lets you play as you on another phone.
- Copy it, by tapping the tiles. "Copied" replaces "Tap to copy" for 1.8s. Copying alone doesn't count as saved.
- Save it, to Photos or Notes. Either opens the phone's share sheet. A finished share counts as saved; Cancel changes nothing.
- Done. Once both are saved the link reads "Done". "Saved" is stored on the account, so the nudges stay gone after a restore or on a new phone.
Getting back in
- Find the way in. "I already have a code" in the sheet, I have a code on Played before?, or a
?code=link, which opens with the code filled in. Each one means you've played, so the tutorial doesn't open, then or after the switch. - Type or paste the code. The next empty tile shows a caret; autofill works. Paste reads what you copied (iPhone asks first) and takes the code out of it: the code alone, "acd 347", or the whole saved note with its link. Pasting into the tiles does the same. A long code pasted in switches to the older field on its own.
- Find my account. It stays tappable throughout. Tapped early, it focuses the tiles and, if anything is typed, says "Your code has six characters."
- Is this you? The name the code belongs to, in tiles, with a warning when this phone already has a player of its own. Saving this phone's code first is offered, never forced.
- Yes, that's me. The phone switches to that player and reloads; Home says "Welcome back, NAME", and today's cards come back with their boards. The tutorial stays closed.
Save paths and their fallbacks
| Path | Normal | Fallback |
|---|---|---|
| Save to Photos | the share sheet with a 1080×1350 picture: the code as tiles, "NAME'S CODE", and how to get back in | no share sheet: "Save this picture", full screen to press and hold, or Download on a computer. Done counts as saved |
| Save to Notes | the share sheet with a ready note: the code, how to get back in, a ?code= link, and "Keep this note. Don't share your code." | no share sheet: the note is copied, with the toast "Copied. Paste it in Notes." Clipboard blocked too: "Copy your note", the note as text with Copy note |
| Tap to copy | "Copied", with a check, for 1.8s | clipboard blocked: the code turns selectable with a Copy button that tries the older copy method, and "If that doesn't work, press and hold the code." |
| Paste | the tiles fill with the code found in what was copied | the clipboard can't be read: "Press and hold the tiles, then tap Paste.", and the tiles take focus |
| First launch offline | none | dashed slots, "Connect to the internet to get your code." and Try again; it also retries when the phone is back online |
| Short code refused | none | the long code, as text, still copyable |
The nudges
| Nudge | When | Rule |
|---|---|---|
| The key | after the first real result, until the code is saved | the dot pops and rings once per visit, then rests |
| Keep your spot | once: the third day played, or the first top-10 spot | "You're 7th in October. That spot lives on this phone, so save your code to keep it." Not now is respected; after that it's only the dot |
| Play from your home screen | Safari on an iPhone after three days played, or where Chrome offers Install | How opens a four-step guide: save your code; on iOS 26, ••• by the address bar then Share, or Share at the bottom on older iOS; Add to Home Screen, then Add; open it and enter your code. On Android, Install is Chrome's own. Closing hides it for two weeks, once |
| Played before? | the first open from the home-screen icon on a phone with no player | asks once: I have a code, or I'm new, let's play. A first visit in the browser never sees it. The tutorial waits for the answer and opens only after "I'm new" |
States
| State | What the player sees |
|---|---|
| Making the code | dashed slots, "Getting your code…" |
| Offline at first launch | dashed slots, "Connect to the internet to get your code.", Try again |
| Ready | the tiles, "Tap to copy" |
| Copied | a check and "Copied" in --fg, 1.8s |
| Clipboard blocked | the code as selectable text with a Copy button |
| Saved to one place | that button as an outline with a check; after Photos alone: "Don't see it in Photos? Your iPhone may be blocking it. Save to Notes too." |
| Saved to both | both outlined; the link reads "Done" |
| Typing | filled tiles, a caret on the next; Find my account soft until six are in |
| Pasted | all six tiles filled at once |
| Paste blocked | "Press and hold the tiles, then tap Paste." under the panel |
| Not found | the slots in --danger, "We couldn't find that code. Check it against your saved photo." |
| Other errors | "Type the code you saved." · "You're offline. Connect and try again." · "That's already you on this phone." |
| Five misses in an hour | "Too many tries. Wait a little and try again." |
| Long code | "I have an older, longer code" swaps to a plain field; "Use a six-character code" goes back |
| Switched | "Welcome back, NAME" on Home |
| Reduced motion | the dot shows with no pop and no ring; the caret doesn't blink; Welcome back appears without moving |
Why it's built this way
Known issues and gaps
- "Copied" lasts 1.8s, not two seconds. The 3.21.0 changelog says two seconds; the spec and the code (1800ms) say 1.8. The code wins.
- The saved picture is always dark. The Photos picture is drawn with the dark values written in (
#202845,#F2F0EA), whichever mode the player uses. - No captures.
screens/has no recovery, nudge or Played before? screens.
Related
- Home and Compete: where every nudge appears
- Tile: why a code is shown as tiles
- Celebration: the moment map that sizes these moments
- Update reel: the other ask that shares the one per visit
- Color:
--dangerfor a code that isn't found
Changelog
| Version | Change |
|---|---|
| 3.25.4 | Paste under the code tiles, and a pasted note or "acd 347" fills them; the field over the tiles is see-through, not invisible. I have a code, a ?code= link or a restore skips the tutorial; it waits for Played before? and opens after "I'm new". Tiles 38px under 360px |
| 3.21.2 | The six tiles become the field: tap and type, with a caret on the next tile; paste and autofill work. Find my account stays tappable. Long codes use "I have an older, longer code". Restored players get today's boards back |
| 3.21.0 | Short recovery codes as tiles; Save to Photos and Save to Notes with a fallback for each; Bring back your account, Is this you? and Welcome back; Played before?; the save nudges (the key's dot, Keep your spot, the home-screen card), one ask per visit |
| 3.18 | Recovery codes (the readable word-word-id), with a view and restore sheet reached from the header key |