Work / Tic Tac Toe / Architecture
Tic Tac Toe architecture
A game that runs entirely on the phone. There is no server and no account. The only outside service that touches players is AdMob, which pays for the app with a banner and an interstitial.
last verified 2026-10-30
Known cost a month
Not read
No bill, fee or receipt is recorded in this repo.
What earns money
Ads only
Banner on Home and Game, full-screen ad after every third finished game. No purchase of any kind.
Earnings so far
Not read
AdMob numbers are pasted by hand into .context/raw/, which is empty.
Installs
100+ on Play
From the Play listing on 2026-10-01. App Store count is not public.
How it fits together
Pick something a user does to see its path and what it costs.
Earns ad revenue
full-screen ad after every third completed game, 1.5 s after the result
- The game counts the finished game on the phone.
- On every third one it waits 1.5 s, then shows the preloaded interstitial.
- If none is loaded, the game goes on and nothing is shown.
- The review prompt is asked once, and never on an ad game.
Cost
Every number says where it came from.
| Service | Pays for | Today | Grows with | Basis |
|---|---|---|---|---|
| Tic Tac Toe app | Expo app on iOS and Android. Two players, or minimax AI at three levels | $0 | Nothing | In codeCLAUDE.md: Backend none; src/lib |
| Settings and game count | MMKV on the device | $0 | Nothing | StatedCLAUDE.md, Stack |
| Google AdMob | Serves the banner and interstitial; asks consent first (UMP) | Not read | Games played, ad fill | Not known |
| EAS Build and Update | Builds the app and ships JavaScript-only updates | Not read | Builds and updates | Not known |
| App Store · Google Play | Installs and ratings | Not read | Nothing | Not known |
What breaks when something fails
| If this fails | The user sees | Their data | Basis |
|---|---|---|---|
| Google AdMob | No ad shows. The banner slot keeps its height, so the board does not jump. A failed interstitial lets the game carry on at once. | Safe, on the phone | In codesrc/hooks/useInterstitialAd.ts; src/components/ads/AdBanner/AdBanner.tsx |
| EAS Build and Update | Installed apps keep working. They only miss updates. | Safe | AssumedThe game needs no network; no test named |
Where the data goes
| Game, moves and settings | Stay on the phone |
| Ad requests (device ad identifier, ad keywords, consent choice) | Go to Google AdMob |
| Accounts, analytics | None exist |
What we do not know yet
- The real monthly bill: no Apple, Google Play or EAS cost is recorded.
- What ads earn: AdMob reports are not recorded; .context/raw/ is empty.
- Ad fill: the iOS AdMob app was not yet linked to a store listing on the date its note was written (src/config/ads.ts), so iOS fill may be low.
- OTA updates are blocked for installs of 1.0.11 and earlier (CHANGELOG 1.0.12). How many installs are still on them is not recorded.
- The Android free-plan EAS build quota ran out on 2026-09-10 (ops/setup.md). Whether the plan is paid now is not recorded.
- wiki/entities/monetisation.md records that the interstitial has no wireframe, and the house rule is that a component in no HTML file does not ship.