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:
1 parent
f8201ce7a2
commit
7b395fcba4
1 file changed
+43
-12
+43
-12
@@ -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
|
||||
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
|
||||
opponent families and an 18-rung ladder, the
|
||||
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
|
||||
|
||||
Decided in discussion with Oliver, 2026-07-31 and extended 2026-08-06. **None of this is built** —
|
||||
the one thing that exists is the domain (item 5). Recorded here so the decisions survive; the
|
||||
ordering below is roughly the order to do it in.
|
||||
Decided in discussion with Oliver, 2026-07-31, extended 2026-08-06, model revised 2026-08-18.
|
||||
**None of this is built** — the one thing that exists is the domain (item 5). Recorded here so the
|
||||
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
|
||||
tracking — which keeps the store card at "Data Not Collected", keeps review trivial, and keeps a
|
||||
zero-dependency project zero-dependency. *Maybe* later: a free build capped at chapter 1 with an IAP
|
||||
to unlock all chapters. That is a fallback, not the plan — paid→free is a normal move, free→paid is
|
||||
not, so launch paid.
|
||||
**The model (revised 2026-08-18): FREE download, one €2.99 non-consumable IAP that unlocks
|
||||
everything, no ads.** Both stores. This supersedes the original "paid $2.99 upfront" decision
|
||||
(2026-07-31) — the whole funnel is short-form video → impulse tap → store page, and an impulse does
|
||||
not survive a price tag on an unknown game; the free tier does the convincing, not the price. €2.99
|
||||
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),
|
||||
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.
|
||||
@@ -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".
|
||||
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
|
||||
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
|
||||
`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:
|
||||
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
|
||||
@@ -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
|
||||
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
|
||||
protects the design, not because it will earn.
|
||||
worth maybe $200 either way; the video channel is worth ~100x that. Ship free+IAP because it feeds
|
||||
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):
|
||||
- **selling weapons or tins** — weapons are *only ever won*, in the duel; a shop deletes the duel's
|
||||
|
||||
Reference in new issue
Block a user