Files
LlamaCasty/TASKS/task-10-monetization.md
T
gramps f3fed0a2a8 docs: purge the dead $29/$49 + Polar model from every tracked file, add the Y1 forecast
The pricing ruling landed twice (2026-09-21 one-time, then 2026-09-27 Store IAP
$10/mo + $400 lifetime) and the map never caught up. Six tracked files still told
a future session that billing was Polar and the price was $29/$49. A stale memory
map is worse than a stale comment: it is the file every session trusts, and this
one was actively steering work toward a deleted provider.

MONETIZATION.md (gitignored, so not in this commit) was rebuilt first:
- "Revenue projections" now carries a modelled Year 1 forecast —
  pessimistic $4.0K / base $15.4K / optimistic $53.3K net, ~$22K weighted.
  Funnel is installs -> 35-45% activate -> 1.5-3% of active users pay.
- Three findings recorded: Year 1 is ~97% lifetime transactions (subs net $392
  of $15.4K, so MRR is not a Year-1 planning input); conversion dominates price
  (~1pp of conversion = ~$7K net, and ADA 6(h) locks $10 anyway); subscriber
  churn moves Year 1 by under $200 and is a Year-2 problem.
- Break-even restated for $400: $25K net = 74 lifetime buyers, not 862.
  The price cut the volume requirement ~10x and raised the skill requirement
  to match.
- Market sizing willingness-to-pay row rewritten. The 100K-400K TAM was
  price-bound to $29-49 and is wrong at $400; revised ~20K-60K, flagged as an
  estimate rather than a sourced number.
- Flagged a real contradiction: $500K ARR needs ~4,900 concurrent subscribers,
  so the Exit section's ARR multiples do not describe what Years 1-3 produce.
  The defensible asset there is lifetime cash flow, not ARR.

Tracked files corrected to match:
- ai.md: paid-delta, pricing and billing bullets rewritten; Polar product id,
  org id, LCYT- key prefix and LLAMAFOUNDER/LLAMA50 marked as deleted;
  15% share + net-after-tax recorded with the ADA 6(b)(i) citation.
- TASKS.md: catalog row retitled as a teardown; the "still to verify — the
  price is not decided" note closed (it contradicted the ruling 20 lines
  below it); the OverlayHost "Polar unlocks alerts" open question marked
  resolved; Polar file-hosting deliverable removed from the release build.
- task-10: reframed as a teardown. Steps 4-5 marked as surviving, 1-2-3-6-7 as
  deleting, 8 as a compliance action (Velopack downloads AND executes, which
  Store policy 10.2.2 does not permit).
- task-36 item 5 (license-expiry reminders) struck — no key, no expiry, no
  lapse under Store IAP, so there is nothing to remind anyone about.
- Distribution.md 4.2 / 4.4 / 4.5 marked obsolete; 4.5's "already implemented"
  corrected, since PolarLicenseService is being deleted rather than shipped.
- README: "one-time license" -> "paid tier".

Historical Polar sections are retained deliberately — the reasoning is reusable
(merchant-of-record, fee comparison), only the conclusions are dead. Each is now
labelled so it cannot be mistaken for the plan.

No code touched.
2026-10-02 20:56:37 -07:00

5.3 KiB
Raw Blame History

TASK 10 — Monetization: watermark-only paid delta (branding flash)

Catalog: TASKS.md — status and requirements live here.

Goal: a paid tier that removes the branding flash and nothing else. Every feature is free — Alerts, social bar slots, voice filters, TRAX, recording, analytics. The free tier is the full app. ⛔ There is no feature gating, ever — revenue argument, not taste: the free tier's reach is the funnel, and the flash is an ad running inside other people's content, so a free user with a flash every 30–60s is already paying in exposure.

⚠️ STATUS: THIS IS A TEARDOWN, NOT A BUILD (2026-09-27). The billing provider is Microsoft Store IAP, not Polar. Everything below describing Polar is dead and is retained only as history. Do not resurrect any of it. The teardown's file-by-file list lives in TASKS/task-48-distribution-msix.md item 0 — work from there, not from this file.

Pricing — ✅ DECIDED 2026-09-27: $10/mo subscription, or $400 lifetime. No annual.

Tier Price Net after 15% Role
Free $0 — Everything, plus the branding flash. The funnel.
Pro monthly $10/mo ~$8.50/mo The default. Low-risk entry.
Pro lifetime $400 ~$340 The hedge. Committed / subscription-hostile buyers.
  • 15% Store revenue share, subscriptions included — verified from the ADA v8.10 PDF, §6(b)(i). Net receipts are after VAT/GST, so commission is not paid on pass-through tax.
  • Break-even is month 40, so the two tiers barely compete — which is why lifetime is safe to offer at launch rather than saving it for later.
  • ⛔ No annual tier — Microsoft does not pro-rate and the developer cannot refund the forfeited remainder. ⛔ No .99 prices. ⛔ No discounted upgrade SKU.
  • ADA §6(h): raising the price disables auto-renew ⇒ $10 is effectively locked for life.
  • ⛔ Superseded pricing, do not cite: the 2026-09-21 one-time model ($29 founder → $49 list lifetime) and the earlier $49.99/yr → $99/yr subscription.

Related work — monetization awareness (2026-09-01, ungated, free): this task's billing is the payer side; the product also carries built-in, ungated monetization awareness for every creator — reward-event capture (all 7 liveChatMessage reward event types → canonical RewardEvent → SQLite persistence), per-session/broadcast reports (members, Super Chat $, stickers, gifts, milestones — the in-app replacement for the emailed "stream activity report"), and a journey tracker (position % + ETA vs. versioned, date-aware YPP thresholds; the Tier-2 bar doubles for new applicants 2027-02-01). Details and design notes: ai.md → Monetization. This is tracked as related work under this task's narrative, not a separate task number — it ships in its own code slices with one integration test each. Scope: v1 (2026-09-01 complete-v1 ruling — there is no v1.x): slice order = reward-event capture → session report → journey tracker → Alerts (TASK 3 item 20).

Business details (pricing, Partner Center product declaration) in MONETIZATION.md (gitignored).

Status: 🔶 TEARDOWN — steps 1–7 shipped under Polar, all now to be removed

Steps 1–7 below are a record of what was built, not a description of what ships. The Polar licensing path is being deleted because Store IAP supplies the same bit from the OS entitlement.

  1. ⛔ Billing provider — was Polar (polar.sh). DELETED. The product, checkout link, and the discount codes LLAMAFOUNDER / LLAMA50 no longer exist. Store IAP products are declared in Partner Center, not Polar.
  2. ⛔ License key entry + verification UI — was the About-overlay swap panel ("Enter License Key"). DELETING.
  3. ⛔ Offline entitlement — was LayoutStore Settings (LicenseKey, LicenseValidatedAt, IsPremium) + a 14-day offline grace period + startup re-validation. DELETING. The OS supplies license state, so the entire offline-grace machine goes with it — along with the whole "network flaky → app thinks I'm expired" bug class.
  4. ✅ BrandFlash → watermark toggle — IsPremium setter flips BrandFlashEnabled = !value, so the flash stops the moment the entitlement flips. This survives the teardown. Under Store IAP IsPremium is derived from the Store entitlement rather than a remote HTTP call. One bit, locally cached, refreshed by the OS. ⚠️ This is the whole product surface of the paid tier.
  5. ✅ Remove social slot locks — all 6 social bar slots open to everyone. Survives.
  6. ⛔ "Unlock Premium" button — PremiumUrl pointed at Polar checkout. DELETING; the Store handles purchase. Paid users see zero license UI.
  7. ⛔ Licensing model / renewal-lapse path — already dead before the Store ruling (a perpetual key never expires). Now superseded again: Store IAP has no keys at all.
  8. 🔶 Velopack auto-updates — NuGet packages + bootstrap in App.xaml.cs. TEARDOWN is a compliance action, not cleanup: the updater downloads and executes, and Store policy 10.2.2 does not permit it. Tracked as TASKS/task-48-distribution-msix.md item 3; the Store updates the app instead.