What the end of a game should say
The end-game dialog gets a hierarchy, sharing survives the trip to the daily countdown, and the final board becomes part of the result without storing the whole game.
The end of a daily game had become its busiest screen: five equally weighted buttons, a notification prompt, the score, the streak, and the reason the game ended, all competing at the same moment. This pass gives that moment a job. The dialog says whether the player finished or crashed, makes sharing the primary action, and keeps enough of the final board around that sharing still works after the live game is gone.
Two outcomes, not three#
The engine has three terminal states, completing all 20 words, hitting the wall, or running into the snake’s own body, but the interface only needs two emotional registers. A completed challenge now says “Well played!” in the success colour. Both collisions keep “Game Over”, with the existing reason text distinguishing wall from body. A third visual treatment would add another state for the player to learn without saying anything useful, so the title and colour do the whole job, with no new icon, animation, or layout.
One action at a time#
The actions needed the same reduction. I set the order in the brief before asking the agent to touch the component: Share is first and full-width because it is useful immediately and helps the game travel. The notification prompt sits below it, practice in duel gets its own quieter section, and reconsidering a skipped score submission becomes a text link at the bottom. The leaderboard and support links leave the dialog because both already exist elsewhere. Not five destinations with equal weight, one primary action followed by the few decisions that still make sense after it.
The end-game dialog is not a second navigation menu.
The board outlives the game#
Mobile sharing exposed the deeper problem. Opening the native share sheet could return the player to the already-played countdown, where the live game state no longer existed and the share button had disappeared. Adding the button there fixed the first half. The generated image still showed a blank grid, because the persisted result knew the score and best word but not where the snake had finished.
The choice was whether to store no board at all, send the final state to the server, or persist the complete engine state in the browser. The first gives up the game’s strongest visual, the second makes sharing depend on score submission, and the third stores far more than an image can use. The result now keeps only snake positions and remaining edible positions alongside the summary. Existing results without that snapshot render a full-width stats card instead of pretending an empty grid is a board.
A quieter finish#
The same cleanup consolidates the browser’s daily-completion bookkeeping behind one operation, so the score, streak, completion marker, and share snapshot are written together rather than by separate helpers. The end of a game is now a smaller interface backed by a clearer state boundary: tell the player what happened, offer the next useful action, and retain exactly enough evidence to show the result again.