The commercial plan was spread over five documents written in five different weeks, and they contradicted each other: product.md sold the Store, decisions.md called the Store dead then re-opened, Distribution.md (736 lines) still described Polar as a download host, MARCOM.md quoted "no subscription" next to a paid tier, and README.md promised "free forever". An outsider could not tell what ships. docs/ai/commercial.md is now the only place money is decided: free = whole app at a 921,600 px / 30 fps output profile covering the recording as well as the stream; Pro = $10/mo or $400 lifetime through Polar, key bound to the buyer's YouTube channel ID via a claim page, 2 activations, 7–14 day lease with offline grace, fail closed, never downgrade a running stream; one portable zip + winget primary, Steam and the Store parked; Azure Trusted Signing (~$9.99/mo), no EV; Founding 200 promo; ~$135/yr costs; anti-piracy posture and what is permanently rejected. Everything else now points at it instead of restating it: - product.md — money sections replaced with pointers; packaging rewritten to winget-first, Store parked; signing updated to Trusted Signing. - decisions.md — graveyard with cause of death for free-forever, the Store ordering, the updater, and the 2026-10-30 reversal of the quality-ceiling rejection. - Distribution.md — rewritten to release mechanics only (artifact, GitHub Releases, winget manifest, signing, checklist, takedown): 736 → 120 lines. - TASKS.md — TASK 54 rewritten, TASK 48's route settled, TASK 10 superseded, five new rows (entitlement seam, output-profile gate, licence UI, system messages, packaging). - README.md — "free forever" replaced with the real split. - capture.md — obs-backgroundremoval is GPL-3.0 and so licence-INCOMPATIBLE since the proprietary EULA; the old "compatible" line was falsified by that change. - TASKS/task-10, task-48, task-51, task-54 — superseded-banner at the top of each, so none of them reads as current policy. - HANDOFF.md — rewritten: plan settled, next code unit is the entitlement seam. MARCOM.md and MONETIZATION.md (gitignored) were corrected in place: policy pointer at the top of each, the flash removed from every live claim, the Polar fee break-even corrected to ~$900/mo, and the projections flagged as written against a dead model.
2.4 KiB
2.4 KiB
HANDOFF — 2026-10-31 (commercial plan settled in docs; next code unit is the entitlement seam)
State
- Branch
main. Pushed throughc72b61b;90d5140+ this commit are local only (push at a checkpoint, not per commit). - Commercial plan is settled and written down: freemium (free = whole app at a 921,600 px /
30 fps profile, stream and recording), Pro = $10/mo or $400 lifetime through Polar (key
bound to the buyer's YouTube channel ID via a claim page, 2 activations, 7–14 day lease), one
portable zip + winget as the primary channel, Steam and the Store parked, Azure Trusted
Signing, Founding 200 promo. New single source of truth:
docs/ai/commercial.md. - Docs consolidated this unit:
product.md(money section → pointer),decisions.md(banners + history),index.md,ai.md,README.md,Distribution.md(rewritten to release mechanics, 736 → 120 lines),TASKS.md(five new rows),capture.md(GPL line falsified by the proprietary EULA), plus gitignoredMARCOM.md/MONETIZATION.md. Site repo:AGENTS.md,README.md,build-this.md. - Scoreboard: built, unchanged from the last handoff (HTTP providers + goal inputs still missing).
Next action
- Entitlement seam —
IEntitlementover Polar activate/validate/deactivate, channel-ID match, 2 activations, lease + offline grace,--activate LCYT-…CLI, fail closed. One Good Dog test. - Then the OutputProfile gate (one profile consumed by both the stream encoder and the recorder; greyed tier entries; never downgrade mid-stream), the licence UI, and system messages.
- Scoreboard HTTP providers + goal inputs whenever the creator queues them.
Landmines
- Nothing may gate a feature. The only paid delta is the output profile.
ShowBrandFlashstaysfalseand entitlement must never enable it. - The site publishes the model, never the numbers — and its CTA ("Coming soon to the Microsoft Store") stays until the creator says the download exists.
- No self-updater, by policy:
winget upgrade+ a version banner.StorePackagingTestsasserts it. - Pre-existing: the full test suite hangs (WASAPI teardown). Per-class runs are the way.
- Not every hex is a theme colour —
BorderColorPalette/chat defaults are USER DATA; on-stream graphics come fromOutputPalette. A red settings control is still a bug.