Work / Tic Tac Toe / Wiki / Entities
monetisation
Entitycanonicalverified 2026-09-22
MONETISATION.TIC-TAC-TOESummary
Advertising is the entire revenue model. There is no purchase of any kind.
Canonical values
| Key | Value | Last changed |
|---|---|---|
| MODEL | AdMob only | 2026-09-22 |
| FORMAT.BANNER | 320×50, always present, height reserved whether or not it fills | 2026-09-22 |
| FORMAT.INTERSTITIAL | shipped — src/hooks/useInterstitialAd.ts, shown from src/app/game.tsx |
2026-09-22 |
| IAP | none | 2026-09-22 |
| SUBSCRIPTION | none | 2026-09-22 |
| REVENUECAT | not used | 2026-09-22 |
| GATE.BANNER | EXPO_PUBLIC_SHOW_ADS |
2026-09-22 |
| WEB EXPORT | carries no ad code at all — src/config/ads.web.ts is a no-op shim |
2026-09-22 |
Rules
- The banner reserves its height whether or not it fills. A banner that arrives late pushes the board down mid-game and costs a misplaced tap. Fill rates sit well below 100%, so the unfilled slot is the common case, not the edge.
- The interstitial never lands between the winning move and the winning line. It belongs after the result sheet is dismissed. Showing one before the player sees how they won is the most punished thing in this category's reviews.
- The store listings must say ads are present. An old listing draft once
claimed "No Ads" while the production profile shipped both formats. The
listing now has one source,
.context/listing/listing.md.
Where it is drawn
The banner is a strip inside Home and Game, not a screen of its own — it is
AdBanner, rendered under the scroll view on both. It was briefly drawn as
three separate wireframes (banner, banner-empty, ads-off); none of those
is a route the app has, and a wireframe of a component pretending to be a screen
is worse than no wireframe.
Known gap
The interstitial has no wireframe, and the house rule is that a component in
no HTML file does not ship. It fires after every third completed game, and its
timing — never between the winning move and the winning line — is precisely the
thing a wireframe would pin down. Recorded in routes.js and on the gallery
rather than left silent.
Related
- reserved-colour — ad surfaces may not introduce a fourth colour meaning
- hard-is-unbeatable — the result beat the interstitial must not interrupt
Sources
- .context/designs/mobile/home/start.html
- .context/designs/mobile/game/board.html
- src/components/ads/AdBanner/, src/hooks/useInterstitialAd.ts
- CLAUDE.md, app.config.ts
Every project of mine is written down like this.
Read the résumé