utwordSystem v3.25.7
Patterns

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.

stableSince 3.21

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.

MomentWhat opensWhere
Any timeYour code, from the keythe header on Home
After the first real resultthe key turns outlined and gets a dotthe header on Home
The third day played, or a first top-10 spotKeep your spot, onceHome
Safari, after three days playedPlay from your home screen, a cardHome
First open from the home-screen icon, on a phone with no playerPlayed before?, full screenover Home
"I already have a code", or a ?code= linkBring back your accounta sheet
A code is foundIs this you?the same sheet
After switchingWelcome back, NAMEHome, 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

PartSpec
The keya 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 panelthe 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 buttonsSave 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 fieldthe 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 backa --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
Dark
Light
Your code the panel is the copy button; the code K7P-RX4 is the spec's example
Dark
Light
Copied, and saved to Photos the copy icon turns into a check for 1.8s; a finished share turns its button into an outline with a check
Dark
Light
Bring back your account typing straight into the tiles, or Paste; Find my account stays tappable, soft until all six are in
Dark
Light
A code that isn't found, and the key before and after saving the slots turn --danger with plain words, no shake; the key's dot is the only nudge in the header

Flow

No recovery screens have been captured yet; the specimens above use the shipping CSS.

Saving the code

  1. 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.
  2. Copy it, by tapping the tiles. "Copied" replaces "Tap to copy" for 1.8s. Copying alone doesn't count as saved.
  3. Save it, to Photos or Notes. Either opens the phone's share sheet. A finished share counts as saved; Cancel changes nothing.
  4. 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

  1. 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.
  2. 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.
  3. Find my account. It stays tappable throughout. Tapped early, it focuses the tiles and, if anything is typed, says "Your code has six characters."
  4. 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.
  5. 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

PathNormalFallback
Save to Photosthe share sheet with a 1080×1350 picture: the code as tiles, "NAME'S CODE", and how to get back inno share sheet: "Save this picture", full screen to press and hold, or Download on a computer. Done counts as saved
Save to Notesthe 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.8sclipboard 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."
Pastethe tiles fill with the code found in what was copiedthe clipboard can't be read: "Press and hold the tiles, then tap Paste.", and the tiles take focus
First launch offlinenonedashed slots, "Connect to the internet to get your code." and Try again; it also retries when the phone is back online
Short code refusednonethe long code, as text, still copyable

The nudges

NudgeWhenRule
The keyafter the first real result, until the code is savedthe dot pops and rings once per visit, then rests
Keep your spotonce: 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 screenSafari on an iPhone after three days played, or where Chrome offers InstallHow 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 playerasks 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

StateWhat the player sees
Making the codedashed slots, "Getting your code…"
Offline at first launchdashed slots, "Connect to the internet to get your code.", Try again
Readythe tiles, "Tap to copy"
Copieda check and "Copied" in --fg, 1.8s
Clipboard blockedthe code as selectable text with a Copy button
Saved to one placethat 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 bothboth outlined; the link reads "Done"
Typingfilled tiles, a caret on the next; Find my account soft until six are in
Pastedall six tiles filled at once
Paste blocked"Press and hold the tiles, then tap Paste." under the panel
Not foundthe 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 motionthe 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.

Changelog

VersionChange
3.25.4Paste 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.2The 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.0Short 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.18Recovery codes (the readable word-word-id), with a view and restore sheet reached from the header key