Files
LlamaCasty/docs/ai/decisions.md
T
gramps 5d836aecbb docs(commercial): one price — $79 Steam DLC rising to $99, subscription retired
Creator ruling 2026-11-01. One SKU, one price, Steam does the selling.

- Pro is a one-time Steam DLC on the free app: $79 introductory, $99 on a stated date, announced
  where the price is shown and actually raised.
- The subscription is retired. The reasoning is in decisions.md: no service behind a monthly fee
  (no servers, no cloud, no content), ~1-3 subscribers per 1,000 installs against 5-8% churn, and
  it carried the most expensive code in the product.
- Polar goes dormant. Its customer-portal design is recorded, not built. The "freemium on Steam,
  convert on Polar, Valve gets nothing" proposal is rejected: in-app purchases must use the Steam
  Wallet, so it risks the listing to save ~$24 a sale.
- Entitlement collapses to `steamDlcOwned`. No lease, no key, no portal, no device limit; the
  greyed tier opens the Steam store overlay, so every purchase stays inside Valve's own surface.
- The site publishes the model and links the store page. It takes no payment and hosts no binaries.
- The $400 lifetime died with the subscription it anchored. Founding 200 died with the coupons and
  passes it needed.

Costs: $115 fixed year one; $79 nets $55.30 after Steam, so three sales cover the year.
2026-11-01 15:40:44 -08:00

14 KiB
Raw Blame History

Decisions log — retired paths, kept so they are not re-litigated

One dated line per decision that no longer governs, plus the reason it died. Read only when you are about to re-open one of them. Live commercial rules (prices, entitlement, channels, signing, support, promo) are in commercial.md; the other live rules live in the subsystem files. This is the graveyard with cause of death.

The business model — one price, settled 2026-11-01

$79 one-time, raising to $99 on a stated date. Sold only on Steam, as a DLC on the free app. The website publishes the model and links the store page; it never takes payment.

What died the same day:

  • The subscription. $10/month for pixels, with no service behind it — no servers, no cloud, no content library, updates free through Steam. Estimated 1–3 subscribers per 1,000 installs, at 5–8% monthly churn, against the most expensive code in the product (leases, activations, revocation, portal, dunning). Retired for launch.
  • Polar as a live rail. Dormant. Its customer-portal design (conditions binding, two activations, 7–14 day lease) is preserved here only so it is not re-derived if a cheaper entry tier is ever justified by real support traffic.
  • The $400 lifetime — it was an anchor for a subscription that no longer exists, and above what a beginner pays for a tool with a free incumbent.
  • Founding 200 — coupons, price locks, earned 30-day passes, founder badges: all machinery for a recurring plan.
  • Off-Steam conversion of any kind. The "freemium on Steam, convert on Polar, Valve gets nothing" proposal was rejected: Steamworks requires in-app purchases to use the Steam Wallet, so it is a listing-level risk to save ~$24 a sale.

Kept: the free tier is the whole app at a 720p30 output profile, the paid delta is output quality only, and the app never sells anything itself — the greyed tier opens the Steam store overlay.

Commercial mechanics — died 2026-10-31 (same week they were written)

  • The licence "claim page" is dead. The binding was going to be an OAuth web page that wrote the buyer's UC… channel ID onto the key, because we assumed binding needed a browser. Polar's conditions object does it natively: the client calls activate with conditions: { channel_id } and repeats it on every validate. No claim page, no hosted endpoint, no key database, no OAuth redirect URI.
  • "Signing is a year-one cost" is dead. Artifact Signing is deferred until two subscribers — it never removes the day-one SmartScreen warning, so buying it before revenue buys nothing but the publisher line. It is also now called Azure Artifact Signing and requires a paid Azure subscription.
  • "The Store developer account costs $19" is dead. Microsoft waived the individual fee (and removed the $99 company fee in May 2026), which makes the Store the only zero-cost route to a Microsoft-signed install — the free answer to SmartScreen.
  • "Binaries on GitHub Releases" was half a plan. There was no GitHub presence at all (the only remote is Gitea). The route is a separate llamacasty-releases Gitea repo push-mirrored to a public GitHub repo: issues and assets public, code private, one publish direction.

Distribution — Steam exclusive (2026-10-31, final)

Steam is the only vector. A free app on Steam with the paid edition as a Steam DLC; the monthly plan is sold outside Steam and never purchasable in a Steam build. Live rules: commercial.md.

Why the other vectors died, all on the same day:

  • Direct download + winget (the plan of that morning) — a zip on a second Gitea repo mirrored to public GitHub, hash-pinned into winget. Superseded because Steam supplies delivery, stats, discovery, install trust and updates in one move, and because an unsigned zip meets SmartScreen on every single release while a Steam install never meets it at all.
  • Microsoft Store — was free, and free is not the same as wanted. It was the last thing keeping a Microsoft account, an MSIX pipeline and a publisher line in the plan.
  • Azure Artifact Signing — never needed once Steam delivers the install. Kept on the shelf for the day a non-Steam download exists.
  • The public llamacasty-releases repo survives only as the issue tracker; it holds no binaries, no manifest and no version file.

The constraint that shapes the app: Steamworks requires in-app purchases to use the Steam Wallet. Therefore the monthly is stated, never sold, inside the Steam build — no checkout, no price, no payment fields. The lifetime is plain DLC bought on the store page, so it needs no transaction code at all.

Support — decided 2026-10-31

  • No training service, no helpdesk, no SLA. Email, best effort, refunds on request without argument. A repeated question becomes a training video on @llamacasty, which is content and monetization rather than a ticket. See commercial.md → Support and MARCOM.md → support → content loop.
  • Rejected as support surfaces: a paid Discord, live chat, onboarding calls, a ticketing system. GitHub issues on the releases repo is the deliberate filter — an account is enough friction to keep the list short.

Monetization

2026-10-30 — freemium replaces free-forever (creator ruling)

Free tier caps output at 720p30; $10/month or $400 lifetime unlocks the higher tiers. Reverses the 2026-10-08 free-forever ruling below, which was a current decision, not an absolute. The live detail — pixel budget, stream + recording, channel binding, lease, notice cadence — is in commercial.md; do not re-derive it here.

The website publishes the model, never the numbers (free forever, every feature unlocked, a paid edition at launch) — the terms may still change. The real plan is recorded internally in the site's build-this.md; keep both in step when it moves.

Superseded: free forever (2026-10-08, TASK 54)

  • 2026-09-21 one-time perpetual licence $29 founder → $49 list — superseded 6 days later.
  • 2026-09-27 $10/mo subscription or $400 lifetime, no annual. Store revenue share was verified at 15% (ADA v8.10 §6(b)(i) → $8.50 / $340 net), including subscriptions.
  • No annual tier because Microsoft does not pro-rate: "monthly subscriptions and initial (pre-renewal) purchases aren't eligible for a prorated refund" — a first-year subscriber who cancels loses the remaining months and the developer cannot refund it.
  • Clean numbers, no .99 (creator: "Let's stop with the x.99 stuff"). The convention exists only to make a price look cheaper, which is incoherent for a brand sold on honesty.
  • Escalation model (2026-09-01): the credit was deliberately obnoxious self-promo; the cadence is the nagware — no modals, no feature locks, no stream-time cutoffs.
  • Pre-GA posture — preview-only flash (reversed 2026-09-26): the credit used to render in the preview and never on the broadcast, to keep test VODs clean. The creator ruled the free tier must be honest advertising; it now composites into output and recordings when enabled.
  • Rejected: always-on watermark (obscurable — replaced by the flash), hard stream-time cutoffs (a stream dying mid-broadcast reads as broken), soft-limit nagging, freemium feature tiers, donation-only, and any resolution/quality ceiling. Auto step-down (TASK 33) is a protect the stream feature, never a monetization penalty. ⚠️ The quality-ceiling and feature-tier halves were reversed on 2026-10-30 (freemium, output-quality delta); the watermark, cutoff and nagging rejections still stand.
  • Polar — $50 already paid, 5% + $0.50 Starter, merchant of record. Live again as of 2026-10-31 (commercial.md). The org ID c05fb364-…, the LCYT- key prefix and the customer-portal validate endpoint are recorded in CREDENTIALS.md; no product, licence keys or discount codes exist yet. The old PolarLicenseService/Helpers/PolarLicense.cs are still gone — the 14-day-grace design has to be rebuilt (as a lease, not a permanent cache).
  • Store IAP was never implemented — Windows.Services.Store appears nowhere in the repo.
  • ⚠️ Two obligations any future subscription would create (ADA §6(h)): fulfil the whole period as marketed (breach → Microsoft may refund in full at its discretion), and raising the price disables auto-renew — the launch price is effectively locked for the product's life.

Distribution — Store PARKED as the third channel (2026-10-31)

2026-10-31: winget over a portable zip is the primary channel — one self-contained LlamaCasty.exe + bundled ffmpeg\, zipped, hosted on GitHub Releases, manifest in microsoft/winget-pkgs with a pinned SHA-256. Steam is second and parked at $100 (lifetime Pro as DLC only — Steam has no subscriptions). The Microsoft Store is third and parked until the creator opens the $19 Individual developer account: it is the only storefront that bills a subscription natively and installs without a SmartScreen warning, and it bans self-updaters. Channels, costs, artifact and signing: commercial.md.

Why the ordering inverted: winget has no discovery, but neither does the Store for utilities, and winget costs nothing, needs no account, no certification and no MSIX pipeline — while the audience installs Windows tools from a command line. The site and the YouTube channel are the funnel in both cases.

Superseded: Store was "the route again" — 2026-10-30 (ordering only)

2026-10-30: a Microsoft Individual developer account (not Company) removed the legal-entity blocker — the publisher line shows the verified individual name, and Partner Center does not convert Individual → Company later. That finding stands; what it no longer implies is primary. The site copy ("Coming soon to the Microsoft Store") stays true until the download page lands, then the Store line becomes the secondary note.

Superseded: Store route withdrawn 2026-10-22

  • 2026-09-27 Store MSIX + Store IAP decided; 2026-10-22 withdrawn. A brand name on the Store's publisher line requires a Company account → a registered legal entity (LLC ~$85 New Mexico with a ~2-week SOS backlog, ~$143 Wyoming). Partner Center does not convert an Individual account to a Company account later, and an Individual account publishes under the verified legal name. The creator will not fund an entity for a nameplate.
  • 2026-10-22 Velopack deleted — it downloaded and executed, which Store policy 10.2.2 forbids (and which the 2026-10-31 plan keeps forbidden). The app has no self-updater by policy: winget upgrade plus an in-app "newer version exists" banner is the update path, and StorePackagingTests asserts that no self-updater returns.
  • The MSIX package still builds (159 MB artifacts/LlamaCasty.msix, submitted nowhere) — it is the parked Store channel's artifact.
  • Signing: Microsoft removed the EV instant-bypass for SmartScreen in March 2024, so EV buys what OV buys. The 2026-10-22 ruling was ship unsigned; 2026-10-31 supersedes it with Azure Trusted Signing (~$9.99/month), which is Microsoft-issued and accrues reputation.
  • Steam when $100 exists: Steam Direct $100/product (recoupable after $1,000 AGR), categories Audio/Video Production / Player Tools (OBS precedent), developer/publisher name self-chosen (no entity needed), 5+ 1920×1080 screenshots + capsule art, a build Valve runs, a 2-week live page, 30% cut, and no subscription support.

Product surface — retired

  • 2026-09-24 StreamElements replaced by native alerts (TASK 43). No third-party widget feed: the chat poll is the event feed.
  • 2026-09-01 the screens/layers settings audit was retired into the gold pass (TASK 36 item 3) rather than run as session debt.
  • 2026-10-04 launch position: restoring the saved position was rejected for a derived top-left placement. The live rule is in ui-surface.md; the old clamp's tolerance range is why it must not come back.
  • D3D11 swap compositor — superseded by the software compositor (TASK 3 item 16).
  • Windows 8 / 32-bit support — 64-bit Windows 10/11 only (creator ruling 2026-10-09).
  • "There is no v1.x" (2026-09-01): everything queues to v1 or to out of product, permanently — no feature parks "for a later version".

Out of product — permanently

Do not build these; each was explicitly ruled out.

  • Anti-piracy theatre (2026-10-31): a native helper DLL for "IP protection", obfuscation, hardware locking, remote code that downloads and executes, and gating asset downloads as an auth check. None make a licence enforceable; see commercial.md → "Anti-piracy posture".
  • Commercial structures (2026-10-31): Patreon or any subscription platform of our own, paid early access, a paid beta, a gated Discord, and a Pro trial (the free tier is the trial).
  • D3D11 swap compositor (superseded by the software compositor).
  • OBS-style source expansion — game capture, browser-source zoo, media playlist, VLC, colour-key, MIDI. The minimal source set is deliberate; creators who need more have graduated to OBS.
  • Multi-layout / profiles / presets — that is what OBS is for.
  • Cross-process stream resume (impossible via the API; creator ruling 2026-09-01).
  • Stream Deck / Loupedeck integration — the device sends keystrokes, and global hotkeys already are the integration.
  • Per-source audio sync offset — global offset shipped (TASK 22); per-source is the OBS mixer rabbit hole and breaks the one-knob audio rule.
  • Chroma key / NVIDIA-only background removal (the bundled ONNX path is the one shipped).
  • Virtual camera output — a different product and a device-driver swamp; our output is one YouTube stream.
  • Replay buffer, stream clipping, multi-destination restreaming, an in-app bug reporter, and an advanced broadcast-form tab (latency/DVR/embed/projection/CC/region are fixed at sane defaults; every exposed field is a support ticket).