Back to Zen Fitness

Commercial Readiness

Commerce Plan

Draft for beta use. Last updated 2026-07-09.

Current Beta State

The current preview has core beta access. No payment processing is active, and paid expansion content is not shipped unlocked as if entitlement checks already exist.

Core Purchase

Core should be a one-time purchase: foundation holds, core protocols, practice log, Body Map, Learn notes, account sync, export, and deletion controls.

Optional Expansion

Expansion can add future holds, protocols, variations, and deeper learning paths. It should remain optional and should not reduce the usefulness of the core purchase.

Entitlement Checks Needed

v99 keeps payment inactive while adding a local snapshot for already-verified access, so temporary offline use does not punish a legitimate user.

Draft Entitlement Records

The draft table is account_entitlements. It stores account-bound records such as core_ownership, expansion_subscription, and beta_preview, with status, source, Stripe identifiers, start dates, expiry dates, and metadata.

Operational Rules

Users may read only their own entitlement records. The app must not write entitlement rows from the browser. Production grants should come from verified Stripe webhooks, admin service-role actions, or migration scripts.

Restore Proof

The next proof is simple: apply the entitlement migration, seed a beta_preview row for a test account, sign in on a fresh device, and use Check Access to confirm the row restores from Supabase.

Trusted Write Path

Before checkout is enabled, the backend needs idempotent Stripe event storage, Stripe customer mapping, signature verification, and service-role entitlement writes. See Webhook Plan.

Offline Access Rule

Core ownership should keep working offline after it has been verified on that device. Optional subscription expansion can use a limited offline grace window, then ask for an online re-check. Fresh devices and cleared browsers still need sign-in.

Checkout Routing Later

Future checkout should return to the app with clear success and cancel URLs, then rely on webhook-confirmed Supabase rows rather than URL parameters alone.

Launch Rule

Do not launch paid content until the entitlement boundary is tested across sign-in, restore, logout, and fresh-device flows.