Going to Production
The checklist to run before real customers touch your app: rotate the seeded credentials, close the permissive defaults, confirm which tenant your customers are in, and check your plan before launch day.
Overview
ℹ️ Do the tenancy item first
The Checklist
- •Rotate or remove the seeded demo accounts your generated app shipped with.
- •Confirm the published app carries no demo sign-in affordances.
- •Confirm every real customer is in a dedicated tenant, and that nobody outside your own staff is in default-tenant.
- •Replace the permissive default access policies with policies that deny by default.
- •Audit which schemas you have marked public — they are readable by anyone, with no login.
- •Switch every integration out of its provider sandbox and onto live credentials.
- •Confirm the key store is enabled if you are self-hosting, and that its key is backed up.
- •Give every API key an expiry, delete the ones you no longer use, and stop relying on key scopes.
- •Check your plan has a live-deployment allowance before launch day.
- •Publish, then verify with a real sign-in and a real write — not just a 200 from the URL.
- •Confirm audit logging and API authentication are on for your deployment.
Rotate the Seeded Credentials
🚨 These are real accounts with real roles
- •Change its password to a real secret. A signed-in user can change their own with POST /api/v1/auth/change-password; an administrator can reset another user with POST /api/v1/auth/reset-password.
- •Disable it. PUT /api/v1/users/{user_uuid}/disable removes access while keeping the account and its history — see Users & Roles.
- •Remove it from the account list in your app configuration and regenerate, so the next build does not recreate it.
💡 Keep one account you control
Turn Off the Demo Sign-In Affordances
| How you deployed | What happens to the demo chips |
|---|---|
| Preview on Supero Cloud | Present. The credentials are part of the payload the browser receives. |
| Published (Go Live) on Supero Cloud | Absent. A published deployment is not sent the credentials at all, so the chips cannot render. |
| Your own AWS or GCP | Off unless you explicitly turned them on with the deploy-wizard toggle. Confirm the toggle is off for the build you are shipping. |
| Self-hosted / run locally | Off unless the deployment was explicitly configured to show them. |
⚠️ The hide switch in System Settings is not a security control
Where Your Customers Live
🚨 Never provision a customer into default-tenant
- •List every user account in the project and check the tenant each one belongs to. Anyone who is not your own staff should be in a named tenant you created.
- •Create a dedicated tenant per customer with POST /api/v1/tenants, and provision that customer's users into it.
- •Check your API keys the same way. A key minted against any project's default-tenant resolves to a project-wide administrator, not a tenant-scoped one.
- •Decide this before you write real customer data. A record's tenant is part of its fully-qualified name, so moving records between tenants is not a supported operation — you would be recreating them.
ℹ️ Single-tenant apps still need the decision
Close the Permissive Defaults
🚨 An unconfigured schema is an open schema
⚠️ A revocation is not instant
Audit What You Made Public
🚨 Public means public, across every tenant
Secrets, Keys, and Credentials
Confirm at-rest sealing if you self-host
🚨 Back up the key before you need it
API keys
- •Give every key an expiry. Keys are created with no expiry unless you set expires_in_days, so a key minted during a spike of debugging is valid forever by default.
- •Delete the keys you no longer use rather than leaving them enabled.
- •Do not rely on a key's scopes list to make it read-only — treat every key as carrying its role's full authority, and scope it by the tenant it was minted against instead.
- •Never mint a customer-facing or narrow-purpose key against a default-tenant — see the tenancy section above.
- •Rotate anything that has been in a screenshot, a support ticket, a CI log, or a repository.
Self-hosted platform administration
Take Everything Out of Test Mode
| Provider | What to change |
|---|---|
| Email (SendGrid) | Set sandbox_mode to false. While it is true every send is validated and reported as successful without anything being delivered — which looks exactly like a working email system. |
| Stripe / PayPal | Swap test keys for live keys; set paypal_mode to live. |
| Plaid | Set plaid_environment away from sandbox. |
| Salesforce | Set salesforce_is_sandbox to false. |
| QuickBooks | Set qbo_environment to production and mint a production refresh token. |
- •The environment label on a tenant (development, staging, sandbox, production) is metadata. It does not change platform behaviour or restrict anything — set it for your own clarity, but do not treat it as a guard.
- •If your console still shows a banner saying you are in the default domain, you are working in the shared sandbox workspace rather than your own. Create your own domain before you build anything you intend to keep.
⚠️ Starter test credentials are not launch credentials
Check Your Plan Before Launch Day
| What you try | What happens if the plan does not allow it |
|---|---|
| Publish a permanent live deployment | HTTP 402 with an upgrade prompt instead of a build starting. The lower tiers are build-and-preview only — they include zero live deployments. |
| Create another project | HTTP 402 once you are at the plan's project limit. |
| Run a connector | HTTP 402. Connector access starts above the entry tier. |
| Use the in-app AI agent past the free allowance | HTTP 402 naming the meter, your limit, and what you have used. |
💡 Check the day before, not the hour before
ℹ️ Self-hosted deployments meter differently
Publish, Then Actually Verify
- •Confirm the build you are publishing is the one you tested — publishing names a specific completed build, not simply the latest state of the project.
- •Set the project's region if location matters to you. The field accepts any short string without validation, so a typo is stored silently and reads back as whatever you typed.
- •Have your custom domain conversation before launch, not after — talk to [email protected].
- •The page renders your branding and real data, not an empty shell or generic placeholders.
- •You can sign in as a real (non-seeded) user, and the login page offers no demo shortcuts.
- •A create action persists across a reload.
- •Signing in as each role you ship shows only what that role should see — check at least one restricted role, not just an admin.
- •A record written by one tenant is invisible to a user in another tenant.
- •A transactional email actually arrives in a real inbox.
After Launch
- •Confirm audit logging is on for your deployment and that you can read your domain's trail through the audit_log object type. Entries are retained for 90 days by default. On a self-hosted install this is a deployment setting rather than something the product turns on for you — see Security.
- •Confirm API authentication is enabled if you self-host. The packaged deployment manifests enable it; a hand-assembled deployment can leave it off, and nothing in the product will tell you.
- •Know your backup story. On a self-hosted install this is yours to arrange, and it must include the key-store key as well as the data.
- •Watch the two counters that actually stop you: your plan's live-deployment allowance and your usage against the meters you draw on. See Plans & Billing.
- •Re-run the credential and policy items in this checklist after every regeneration. Regenerating an app re-runs setup with the configuration in the bundle, which can recreate accounts and policies you removed.
Next Steps
- •Building Multi-Tenant Apps — tenant-per-customer provisioning, and why default-tenant is not one.
- •Access Policies (Entity, Record & Field) — the full policy and rule reference behind the deny-by-default shape.
- •Security — API key scoping, data isolation, audit logging, and at-rest sealing.
- •Publish Your App (Go Live / Supero Cloud) — the publishing flow, preview versus live, and taking an app offline.
- •Errors & Status Codes — including the failures that return 200, which are the ones a launch checklist misses.
On this page