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
|
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
|
||||||
|
|||||||
Reference in new issue
Block a user