Template → preview → store
How a paywall goes from a template key to a live surface to money — and where each piece of truth lives along the way.
Pick the template.
Native locked templates (house_ai, template_2), a block design, or a served HTML design. The dashboard's picker only offers what the SDK registry can actually render.
Edit copy, colours, screens.
Locked templates expose exactly that — words, a palette, and which screens run. Prices are placeholders ({price}, {per_week}…) filled at render from the live store package; the backend rejects literal amounts so copy can never contradict the store.
Preview honestly.
The phone preview renders the same screens the SDK ships, with mock store data ($9.99/month, $59.99/year, 7-day trial). Real devices substitute real prices at runtime.
Set it live — per placement.
Placements are free-form keys (default, onboarding_end…). Setting a config live demotes the previous one for that placement; devices switch on their next config refresh. The dashboard warns when the app requests a placement nothing is configured for.
Connect the store.
Products come from App Store Connect — created and priced from the dashboard, submitted for review by you in App Store Connect, sold by your PurchasesAdapter.
"LIVE" is not always what's serving
A running experiment overrides the live config for its placement — the dashboard's serving state, not the LIVE badge alone, is the truth about what devices see.