Default:
calm_utility (“More detail, less typing.”) is compiled into the app and appears whenever no valid running experiment is assigned.Launch checklist
- Open the Paywall Experiment console and connect with the Conversion admin token.
- Select an existing experiment or create a new experiment/app; every app gets a stable lowercase
app_id. - Edit in
draft. Keep a control, make weights total 100%, and set enrollment conservatively. - Preview the exact plan, copy, and SHA-256 hash; apply only that reviewed plan.
- Change the state to
runningand apply another reviewed plan when traffic is approved. - Read views and checkout intent from the app; count trials and paid starts only from verified RevenueCat receipts.
- Pause to stop new enrollment. Use a new experiment ID for new copy after exposure.
What the background Worker guarantees
- HMAC-pseudonymous, deterministic, sticky installation assignment.
- Strict schemas, exact plan hashes, immutable exposed experiments, and fail-safe fallback.
- No remotely supplied prices, trial terms, renewal claims, arbitrary code, or new native SDKs.
- Durable RevenueCat receipt processing and scheduled retry of attribution dispatches.
Reuse in another app
- Compile the reviewed paywall layouts into that app.
- Send its
app_id, placement, installation ID, platform, and app version to the shared assignment contract. - Render only schema-valid copy and retain store/RevenueCat commerce truth.
- Create app-specific experiment IDs, run the same plan/apply review, and test before enrollment.
Required tests
Run node server/test/paywall_experiment_test.mjs and the Flutter paywall service, surface, and screen tests; preview both layouts at narrow width and 200% text before traffic.