Seven games in the hub had grown their own coach. Poker Friday had a teaching panel and a decision journal, Blackjack had a basic-strategy trainer that charged you for the answer, Craps narrated every roll, and Mahjong, Big Two, Last Card and Fibbers Poker each had a panel of their own. No two looked alike, and none of them existed on the other twenty-nine games.
Lemon Coach is one character that serves all of them.
What It Is
A docked lemon in the corner of every game page. Tap it and it opens a chat: your questions on the right, its answers on the left. It looks like a chatbot and deliberately is not one.
There is no text input, no language model and no network call. You ask by tapping a question from a closed catalogue, and the answer is computed from live game state by code that already existed in that game’s engine. The exchange feels open because the answers are specific to this hand, this board, this roll. The questions never were.
The Rule That Shaped Everything
Adapters translate and route. They add no strategy logic.
Every answer traces back to a function that existed before the Coach did. Where an engine cannot honestly answer a question, that question stays undeclared and the player sees one chip fewer.
Three questions died on this rule, correctly:
- Poker ranges. There is no range estimation in the poker engine, and building one would have broken an invariant that pins opponent behaviour to a single named bot.
- Blackjack bust probabilities. The strategy table is a chart lookup, not expected value. Producing odds would have meant writing a simulation, or worse, reciting published figures from memory.
- A glossary. No game has one. Inventing definitions is not the same as knowing them.
A coach that invents a number is worse than no coach, because the player has no way to tell which numbers to trust.
Two Tiers, Because Only Seven Games Have An Engine
The first design made live advice mandatory, which quietly meant the Coach could only exist where an advice engine already did: seven games out of thirty-six. That is not a companion, it is an occasional feature.
The floor dropped to what every game can honestly answer:
| Question | Where | Source |
|---|---|---|
| How do I play? | all 36 games | authored rules text |
| What’s a good strategy? | all 36 games | authored general tactics |
| What should I do next? | 7 games | the game’s live state |
Plus, where the engine supports it: your chances, what your opponent likely holds, what else you could do, where you went wrong, and what patterns you are showing.
The help text was written from each game’s source code, never from its name. This hub punishes guessing: “Snack Pop” is a match-three, Low Roller is won by the lowest score, the Mini Crossword has no black squares, and Palette Quest is gated on arithmetic rather than colour.
No Dark Patterns, Enforced Rather Than Intended
The model was the owl’s consistency, explicitly not its guilt loops.
The Coach may never reference your absence, count or mention streaks, ask you to come back, express disappointment, gate content behind engagement, or request notifications. That is not a guideline in a document. A ban list refuses the vocabulary, and its test proves the list actually fires against nine lines of exactly the copy it exists to refuse.
The hub introduction says hello once, persisted, then lives in the corner. A test fails if that gate is removed.
Private By Architecture
No accounts, no analytics in the Coach, no model, no network. Settings persist through Capacitor Preferences; the conversation is per-session, in memory, and never stored anywhere.
Asked directly whether it is learning from you, it says so plainly, and names the site’s cookie-free visit counter rather than pretending nothing is measured.
Features
- One character across 36 games, tinted per game, platform green everywhere else
- Chip-driven chat with a closed question catalogue and no text input
- Live-state advice in Poker Friday, Blackjack, Craps, Mahjong, Big Two, Last Card and Fibbers Poker
- Rules and tactics for every other game, derived from that game’s code
- Answers announce through a polite live region; the popout is keyboard-dismissable and traps nothing
- All motion behind
prefers-reduced-motion, with static equivalents - Existing per-game coach panels wrapped, not replaced
What It Cost To Get Right
Three bugs that no test caught until one was written for them, and each is a better lesson than the feature:
An event hook whose identity changed when the Coach spoke. The documented usage fires it from an effect, and one of those events resets the session, so every answer was wiped moments after it arrived. It presented as “the Coach never answers”, which points nowhere near the cause.
A composition helper called in a render body re-registered on every render and hung seven games. Invisible to every game’s own tests, because they render without the provider, and invisible to the Coach’s tests, because they use a fake adapter. The bug lived exactly in the seam neither side crossed.
A chip row that scrolled sideways with a hidden scrollbar. Perfectly ordinary on a phone; with a mouse there is no track to drag and a vertical wheel does nothing, so every question past the second was unreachable. It survived review and the whole suite because the two inputs the tests use, touch and keyboard, both worked. A human on a desktop found it in a minute.