Skip to content

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.

On the phoneOutside servicesTic Tac Toe appTic Tac Toe appExpo app on iOS and Android. Two players, or minimax AI at three levels$0Settings and game countSettings and game countMMKV on the device$0Google AdMobGoogle AdMobServes the banner and interstitial; asks consent first (UMP)Earns, not costsEAS Build and UpdateEAS Build and UpdateBuilds the app and ships JavaScript-only updatesNot readApp Store · Google PlayApp Store · Google PlayInstalls and ratingsNot read
Earns ad revenue
full-screen ad after every third completed game, 1.5 s after the result
  1. The game counts the finished game on the phone.
  2. On every third one it waits 1.5 s, then shows the preloaded interstitial.
  3. If none is loaded, the game goes on and nothing is shown.
  4. The review prompt is asked once, and never on an ad game.

Cost

Every number says where it came from.

ServicePays forTodayGrows withBasis
Tic Tac Toe appExpo app on iOS and Android. Two players, or minimax AI at three levels$0NothingIn codeCLAUDE.md: Backend none; src/lib
Settings and game countMMKV on the device$0NothingStatedCLAUDE.md, Stack
Google AdMobServes the banner and interstitial; asks consent first (UMP)Not readGames played, ad fillNot known
EAS Build and UpdateBuilds the app and ships JavaScript-only updatesNot readBuilds and updatesNot known
App Store · Google PlayInstalls and ratingsNot readNothingNot known

What breaks when something fails

If this failsThe user seesTheir dataBasis
Google AdMobNo 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 phoneIn codesrc/hooks/useInterstitialAd.ts; src/components/ads/AdBanner/AdBanner.tsx
EAS Build and UpdateInstalled apps keep working. They only miss updates.SafeAssumedThe game needs no network; no test named

Where the data goes

Game, moves and settingsStay on the phone
Ad requests (device ad identifier, ad keywords, consent choice)Go to Google AdMob
Accounts, analyticsNone 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.