The price tag comes off the door and moves inside: free download, one 2.99 unlock

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-18 11:43:41 +02:00
1 parent f8201ce7a2
commit 7b395fcba4
1 file changed
+43 -12
+43 -12
View File
@@ -20,7 +20,9 @@ anything, so if you add a `return` for an awkward deal, check the body still run
the state-machine contracts that have historically produced the show-stoppers. The Dockerfile runs the state-machine contracts that have historically produced the show-stoppers. The Dockerfile runs
it as a build stage, so a red suite cannot deploy — but finding out from Coolify is the slow way. it as a build stage, so a red suite cannot deploy — but finding out from Coolify is the slow way.
Last updated 2026-08-15 (two sessions: the finetuning pass — gore opens in the gore, the menu theme Last updated 2026-08-18 (the store model in LATER revised: free download + €2.99 unlock-everything
IAP with the free-tier gates, superseding paid-upfront; before that 2026-08-15, two sessions: the
finetuning pass — gore opens in the gore, the menu theme
comes back, one world board per mode, and the barrel economy cut — over the batch below: six new comes back, one world board per mode, and the barrel economy cut — over the batch below: six new
opponent families and an 18-rung ladder, the opponent families and an 18-rung ladder, the
tournament DRAW screen, three netplay fixes off Oliver's cellular report, the night court, and tournament DRAW screen, three netplay fixes off Oliver's cellular report, the night court, and
@@ -3449,15 +3451,41 @@ Nothing here is broken; these are known gaps and unverified risks.
# LATER — shipping it: demo, stores, campaign # LATER — shipping it: demo, stores, campaign
Decided in discussion with Oliver, 2026-07-31 and extended 2026-08-06. **None of this is built** — Decided in discussion with Oliver, 2026-07-31, extended 2026-08-06, model revised 2026-08-18.
the one thing that exists is the domain (item 5). Recorded here so the decisions survive; the **None of this is built** — the one thing that exists is the domain (item 5). Recorded here so the
ordering below is roughly the order to do it in. decisions survive; the ordering below is roughly the order to do it in.
**The model: paid, $2.99, no ads.** Both stores. No ad SDK, no consent/CMP flow, no ATT prompt, no **The model (revised 2026-08-18): FREE download, one €2.99 non-consumable IAP that unlocks
tracking — which keeps the store card at "Data Not Collected", keeps review trivial, and keeps a everything, no ads.** Both stores. This supersedes the original "paid $2.99 upfront" decision
zero-dependency project zero-dependency. *Maybe* later: a free build capped at chapter 1 with an IAP (2026-07-31) — the whole funnel is short-form video → impulse tap → store page, and an impulse does
to unlock all chapters. That is a fallback, not the plan — paid→free is a normal move, free→paid is not survive a price tag on an unknown game; the free tier does the convincing, not the price. €2.99
not, so launch paid. stays the number (there is no 2,00 € tier; revenue is noise either way per the expectations below).
No ad SDK, no consent/CMP flow, no ATT prompt, no tracking — which keeps the store card at "Data Not
Collected", keeps review trivial, and keeps a zero-dependency project zero-dependency. A StoreKit
unlock does not break "Data Not Collected", but it does require a **Restore Purchases button**
(no accounts — StoreKit restore IS the reinstall/new-phone path; Apple rejects unlock IAPs without
it), and it is the wrapper's first real IAP plumbing.
**The free tier (Oliver, 2026-08-18):**
- **Gore: free through the FIRST CHAPTER BOSS BEATEN**, cut on the chapter-2 card — the same cut,
same build flag as the web demo (item 1). The free tier must contain everything a promo clip
promises (transition, horde, weapons, duel, boss) and must end on a WIN, not a wall.
- **Zombie tennis: first 7 opponents, no tournament.** Frame the wall diegetically when the
tournament frame exists: QUALIFYING is free, "YOU'VE QUALIFIED — the main draw is in the unlock" —
the cut lands on a win in tennis language. Check where the six new families sit on the 18-rung
ladder; if rungs 1–7 are mostly the base family the free tier undersells the roster.
- **Classic tennis: fully free.** It is the decoy for the transition and costs nothing.
- **Multiplayer: joining free, hosting paid.** Friend-code rooms make every paid copy recruit its
own opponents — a payer hosting for a free friend is a live demo. (The socket is a staging
prototype; this gate waits on LATER item 7 shipping.)
- **World board: posting requires the unlock.** Free players SEE the board — put the upsell where
their row would have been, envy beats a lock icon. With no accounts this is also the cheapest
anti-spam gate the board can have. Mind the cold start: a payers-only board is nearly empty at
the honest sales estimate; the testteam's rows partially cover it.
- **Upsell placement is a feel rule**: only on win moments (chapter card, felled card) — never in
the death→restart gap that `EATEN_RESTART` protects.
- **Gates do not lower the age rating** — the store rates the binary's maximum content, and gore in
the free tier rates the free download 17+/USK 16 regardless. The gates buy conversion, not reach.
**Ads are rejected**, with one exception held in reserve: rewarded video on the CHALLENGE (below), **Ads are rejected**, with one exception held in reserve: rewarded video on the CHALLENGE (below),
never an interstitial. An interstitial after death would land exactly in the "one more run" gap that never an interstitial. An interstitial after death would land exactly in the "one more run" gap that
`EATEN_RESTART` exists to protect, and would end sessions rather than annoy. `EATEN_RESTART` exists to protect, and would end sessions rather than annoy.
@@ -3469,9 +3497,12 @@ never an interstitial. An interstitial after death would land exactly in the "on
job is converting a 15-second clip into "I played it". job is converting a 15-second clip into "I played it".
Implementation is ~10 lines: a check on the chapter-2 card plus a build flag the store build sets Implementation is ~10 lines: a check on the chapter-2 card plus a build flag the store build sets
to skip it. **Build no protection around it** — it is client-side JS on a static host, trivially to skip it. **Build no protection around it** — it is client-side JS on a static host, trivially
bypassable, and nobody who would pay $2.99 will open devtools. DRM here is pure cost. bypassable, and nobody who would pay €2.99 will open devtools. DRM here is pure cost.
Consider leaving **desktop uncapped** (`matchMedia('(pointer: coarse)')`, already used for Consider leaving **desktop uncapped** (`matchMedia('(pointer: coarse)')`, already used for
`autoAssist`): nothing to cannibalise there, and an uncapped desktop build is what gets linked. `autoAssist`): nothing to cannibalise there, and an uncapped desktop build is what gets linked.
**Timing (Oliver, 2026-08-18): the web build stays UNCAPPED for now** — the testteam runs the
PWA. At store launch the public web build takes the **same gates as the app's free tier** (one
flag), or the website is strictly better than the free app and defeats every gate above.
2. **Store readiness.** Wrap the PWA (Capacitor/PWABuilder). Unknowns to check *before* committing: 2. **Store readiness.** Wrap the PWA (Capacitor/PWABuilder). Unknowns to check *before* committing:
audio behaviour in WKWebView, safe-area (already solved for the browser, may differ in the shell), audio behaviour in WKWebView, safe-area (already solved for the browser, may differ in the shell),
and 60 fps canvas under WKWebView at `RES` 4 — see OPEN 1, this is the second place that risk and 60 fps canvas under WKWebView at `RES` 4 — see OPEN 1, this is the second place that risk
@@ -3555,8 +3586,8 @@ never an interstitial. An interstitial after death would land exactly in the "on
**Expectations, so nobody is surprised:** with no marketing, 20-100 units in year one is the honest **Expectations, so nobody is surprised:** with no marketing, 20-100 units in year one is the honest
central estimate (~$40-210 net, i.e. under Apple's fee at the low end). The monetization model is central estimate (~$40-210 net, i.e. under Apple's fee at the low end). The monetization model is
worth maybe $200 either way; the video channel is worth ~100x that. Ship paid because it is cheap and worth maybe $200 either way; the video channel is worth ~100x that. Ship free+IAP because it feeds
protects the design, not because it will earn. the funnel and the gates protect the design, not because it will earn.
**Explicitly NOT to be built** (these fight settled decisions, see the invariants above): **Explicitly NOT to be built** (these fight settled decisions, see the invariants above):
- **selling weapons or tins** — weapons are *only ever won*, in the duel; a shop deletes the duel's - **selling weapons or tins** — weapons are *only ever won*, in the duel; a shop deletes the duel's