Skip to content

Work / Chess / Architecture

Chess architecture

A chess game that runs entirely on the phone. There is no server, no account and no purchase. AdMob ads are the only way it earns, and the only outside service players touch.

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 the game screen, plus a full-screen ad on every second Rematch.
Earnings so far
Not read
AdMob numbers are pasted by hand into .context/raw/, which is empty.
Release state
Testing only
Play alpha (closed) and TestFlight. Never on Play production or in App Review. Per ops/release.yml, which is unverified (2026-10-13).

How it fits together

Pick something a user does to see its path and what it costs.

On the phoneOutside servicesChess appChess appExpo app. Rules engine, and a computer opponent at three levels$0Saved game and settingsSaved game and settingsMMKV on the device. One unfinished game$0Google AdMobGoogle AdMobEarns, not costsEAS Build and UpdateEAS Build and UpdateBuilds the app and ships JavaScript-only updatesNot readPlay Console · App Store ConnectPlay Console · App Store ConnectTesting tracks and listingsNot read
Earns ad revenue
the full-screen ad shows on every second Rematch, never during a game
  1. The player taps Rematch on a result.
  2. On every second one, the preloaded ad shows first.
  3. If none is loaded, or it fails, the new game starts at once.
  4. The ad reloads for next time, retrying up to 3 times, 30 s apart.

Cost

Every number says where it came from.

ServicePays forTodayGrows withBasis
Chess appExpo app. Rules engine, and a computer opponent at three levels$0NothingIn codeCLAUDE.md: Backend none; src/lib/ai.ts
Saved game and settingsMMKV on the device. One unfinished game$0NothingStatedwiki/entities/saved-game.md
Google AdMobNot readRematches, ad fillNot known
EAS Build and UpdateBuilds the app and ships JavaScript-only updatesNot readBuilds and updatesNot known
Play Console · App Store ConnectTesting tracks and listingsNot readNothingNot known

What breaks when something fails

If this failsThe user seesTheir dataBasis
Google AdMobNo ad shows. The banner slot keeps its height. If the full-screen ad cannot show, Rematch starts the new game at once.Safe, on the phoneIn codesrc/hooks/use-interstitial-ad.ts; use-rematch.ts
EAS Build and UpdateInstalled apps keep working. They only miss updates.SafeAssumedThe game needs no network; no test named

Where the data goes

Games, moves, settingsStay on the phone
Accounts, analytics, purchasesNone 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.
  • ops/release.yml is marked verified: false. It was not read from either store, because no play-service-account.json exists (T033).
  • The consent form and ads are not yet checked on a real phone (T037).
  • wiki/entities/ads.md is out of date: it says there is no consent form and the full-screen ad shows 1.2 s after any game. The code runs UMP consent and shows the ad on every second Rematch.