DEV BLOG / 11
Finding the game’s voice and visual identity
Team histories, a consistent interface and an assistant who doesn’t narrate every save.

In the last update was largely about explaining the numbers. Now I’ve been working on the world those numbers belong to.
The game needs a consistent look, teams with an identity and feedback that helps me understand an action. It also needs to know when silence would be a perfectly respectable contribution.
What changed since the statistics work
- Light and dark themes are saved. Cards, charts, popups and the HUD share colors while preserving team artwork.
- All 32 franchises have histories and traditions. Origins, titles and reciprocal rivalries give the clubs more identity than their position in a table.
- Rivalries have football consequences. Temporary match form, home receipts and presentation reflect the stakes.
- Actions have distinct sounds. Input, spending and contracts receive feedback; victories and championships have their own celebrations.
- The mailbox is more informative. Team colors and unread categories help distinguish the messages waiting there.
- Local notification work has begun. Opt-in notices, rate limits and return links have their own platform rules.
- Joe can resume interrupted messages. Required feedback takes priority, while quiet drafts and explicit Help remain available.
- Successful manual actions have some variety. A set of 200 shuffled agreement quips avoids repeating the same response every time.
Let a team be a team
Each franchise has an origin story and some traditions. I’d also like the league to have a recorded past, with actual games and careers to browse. That’s a separate job. Writing a club a good story doesn’t give it a championship in the record book.
A rival should stay attached to the same franchise identity too. Changing a display name shouldn’t make the relationship disappear. Otherwise I’ve created a surprisingly effective witness-protection scheme for football teams.
Feedback shouldn’t become a running commentary
Joe’s status messages can summarize trades, injuries and contracts, acknowledge a watchlist addition or confirm AutoSim. He doesn’t need to congratulate a background save.
Failures stay factual. A cheerful line belongs after a successful action, not in place of an explanation that something failed.
I’m being careful with notifications too. I’ve started the local work, but I still need to check delivery and the route back into the right screen on each platform. A notice I can see in my own code is not much use to somebody waiting for it on a phone.
The game is starting to have a recognizable identity. That’s pleasing, but it’s still possible to put a very nice color scheme on a confusing menu.
Next Joe gets a more complete question-and-tour system, and the stadium gets more room to grow.
