All posts
No-Code & Tools

7 Things to Check Before Shipping an AI-Built App to Production

Built an app with Lovable, Codex, Replit, Bolt or another AI tool? Run these seven production-readiness checks before real users, payments or sensitive data arrive.

Elvis Onunwa06 September 202610 min readLast updated: 15 September 2026
7 Things to Check Before Shipping an AI-Built App to Production

TL;DR

  • A working AI-built demo is not automatically production-ready; the launch bar is whether the product stays trustworthy when users, money, private data and failures arrive.
  • For Supabase-backed apps, review Data API exposure, grants, Row Level Security and Storage policies together, then test denied access with a second user.
  • A publishable or legacy anon key can be present in frontend code when RLS and least-privilege policies protect the data; secret and service-role keys must stay server-side.
  • Treat payments, retries, duplicate submissions, deployment rollback and data recovery as system-design problems before real customers depend on the app.
  • AI can accelerate implementation and review, but production readiness still requires independent evidence and human product and engineering judgment.
On this page⌄

An AI-built app is ready for production only when you have evidence that it can survive more than the happy path.

A polished Lovable, Codex, Replit or Bolt demo proves that a flow can work. Production asks harder questions: What happens when User A requests User B’s data? When a payment webhook arrives twice? When a private file URL is shared? When a migration fails? When the person who built the app is unavailable?

Before real users, payments or sensitive data arrive, check seven things:

  1. Access control: can every user reach only the data and actions they are allowed to use?
  2. Data integrity: does the system stay correct when requests fail, repeat or arrive out of order?
  3. Payments and entitlements: can payments be verified and retried without duplicate fulfilment?
  4. Secrets and generated code: do you know what credentials, dependencies and privileged paths the app contains?
  5. Deployment and rollback: can you identify what is live and reverse a bad release?
  6. Testing and monitoring: have you tested failure states, and will production failures become visible?
  7. Ownership: do you control the code, data, accounts, domain and knowledge needed to operate the product?

I use AI-assisted development because it compresses execution. It does not remove the production bar.

Is a Lovable app production-ready?

It can be. “Built with Lovable” is neither proof of safety nor a reason to rewrite the app.

The right production bar depends on consequence. A public calculator with no accounts has a different risk profile from a multi-user SaaS product handling customer records, payments, private documents and admin actions.

For a serious AI-built product, I would want evidence for authorization, failure handling, secret management, payment integrity, reproducible deployment, recovery, monitoring and ownership. The useful question is not “was AI used?” It is “what has actually been verified?”

1. Check access control beyond the interface

A hidden admin button is not authorization.

For every important resource, write down who can read, create, update and delete it. Then test the denied cases, not only the successful ones.

If you use Supabase from the frontend, understand the security boundary. Supabase’s current data-security guidance says frontend apps can use the Data API with a publishable key when exposed tables have appropriate Row Level Security and least-privilege access policies. Secret and service-role keys are different: they are privileged and must remain server-side.

That means seeing a Supabase publishable key, or a legacy anon key, in browser code is not by itself proof of a leak. The real question is what that client is authorized to do.

Run tests such as:

Test Expected result
Logged-out visitor requests a private record Denied
User A requests User B’s record Denied
User A changes User B’s record Denied
Manager accesses a record inside assigned scope Allowed
Manager accesses a record outside assigned scope Denied
Admin performs a privileged action Allowed and auditable

Do not stop at database tables: test Storage too

A production-readiness review that checks database RLS but ignores uploaded files is incomplete.

Supabase Storage access control uses RLS policies on storage.objects. Private buckets apply access control to downloads; public buckets make retrieval public to anyone with the asset URL. Supabase’s bucket documentation recommends private buckets for sensitive documents and supports authenticated downloads or time-limited signed URLs.

For every bucket, ask:

  • Is it intentionally public or private?
  • Can User A list or download User B’s files?
  • Who can upload, overwrite, move and delete objects?
  • Are file-size and MIME-type restrictions appropriate?
  • Does a signed URL expire as expected?
  • Is the application relying on a filename or folder prefix as if it were authorization?

Ownership metadata alone is not access control. Supabase explicitly notes that object ownership must still be enforced through policies or trusted server logic.

Finally, run Supabase’s Security Advisor. It can flag issues including RLS disabled on exposed tables, permissive policies, sensitive columns exposed and public buckets that allow listing. Treat an advisor result as a finding to investigate, not a certificate that the application is secure.

2. Check what happens to data when something goes wrong

Production users double-click. Networks time out. Jobs retry. Two requests arrive together. A user closes a tab after submitting but before seeing confirmation.

Identify the facts that must always remain true, then enforce them at the right layer.

For example, one invitation should not create two memberships. One payment should not create two credits. A record that must be unique should not depend on a disabled button to remain unique.

Use database constraints, transactions, uniqueness rules, explicit state transitions and server-side validation where appropriate.

Then ask the recovery question: if a deployment writes bad data, what can we restore, and how far back? Supabase’s current production checklist treats security, expected load, availability and recovery as launch concerns. A backup is useful; a recovery path you understand is better.

3. Check payments, webhooks and duplicate fulfilment

A success page is not the source of truth for money.

If the app accepts payments or grants paid entitlements, test:

  • server-side transaction verification;
  • webhook signature/origin verification;
  • duplicate webhook delivery;
  • retries after timeouts;
  • refreshes of the success page;
  • refunds and reversals;
  • the case where payment succeeds but fulfilment initially fails.

Stripe’s webhook documentation and Paystack’s webhook and verification guidance all reflect the same operational reality: payment events are asynchronous and may be retried.

The production rule is simple: the same verified transaction arriving again must not create a second business outcome.

4. Check secrets, dependencies and generated code

Generated code is still code you are shipping.

Review API credentials, environment variables, privileged endpoints, third-party packages, file uploads, input validation, CORS/rate limiting where relevant, and logs that may contain sensitive information.

Supabase is moving from legacy anon and service_role keys toward publishable and secret keys. Publishable keys are designed for client code but depend on your authorization model. Secret and service-role keys carry elevated authority and must stay in trusted backend components. See Supabase’s API key documentation.

The important distinction is authority, not whether a value happens to be called an API key.

AI can help inspect a repository, trace data flow and propose fixes. But “the agent says it is secure” is not acceptance evidence. Run the tests, inspect the policies and verify the deployed behavior.

5. Check that deployment is boring and reversible

You should know:

  • which repository and branch are the source of truth;
  • which commit is live;
  • how production environment variables are managed;
  • how database migrations reach production;
  • what checks run before deployment;
  • how to roll back application code;
  • what happens when code rolls back but a migration cannot;
  • who can deploy;
  • who controls the domain and DNS.

As risk grows, stop using production as the scratchpad. Separate experiments from real customer data.

GitHub environments can restrict deployment branches and access to environment-specific secrets. See GitHub deployment environments.

If another developer needs to take over a Lovable product, my Lovable developer handoff guide covers repository, backend, domain, secrets and deployment ownership.

6. Test the journeys AI demos usually skip

Do not finish testing when the main button works.

Try a new account with no data, an expired session, a second user attempting cross-account access, bad input, a duplicate click, slow mobile data, a failed payment, a repeated webhook, an unavailable external API, an oversized file, keyboard-only navigation, and refreshing halfway through a process.

Then make failures observable. Decide where you will see application errors, authentication failures, payment/webhook failures, background-job failures and important administrative changes.

A production failure you can trace is easier to fix than one customers must screenshot for you.

7. Check who owns the product after launch

Ask who controls the GitHub repository, database, hosting, payment gateway, email provider, domain registrar, DNS, analytics, monitoring, secrets, backups and billing.

Then ask the harder question:

If the person or tool that built this disappears tomorrow, can someone competent understand and operate the product?

Document how to run and deploy the app, required environment variables, major external services, migrations, webhooks or scheduled jobs, important business rules and known shortcuts.

Ownership is not only legal ownership of source code. It is operational control.

A practical go/no-go checklist

Area Evidence I would want before “go”
Access Allowed and denied role tests pass against database/API behavior
Storage Private files remain private; bucket and object policies match the product rules
Data Critical invariants, migrations and recovery path are understood
Payments Verification and duplicate-event handling are tested
Security Security Advisor reviewed; privileged secrets stay server-side
Deployment Source of truth, environments, deploy checks and rollback are known
Reliability Critical journeys are tested under failure and errors are observable
Ownership Code, data, domain, accounts and operating knowledge are controlled

You do not need a giant engineering organisation to pass these checks. You do need someone willing to make the release decision from evidence rather than the excitement of seeing the first version work.

When deeper engineering review is worth it

Raise the bar when the product handles private customer records, money, multi-tenant data, sensitive documents, complex permissions, important business operations or automated actions with real consequences.

In those cases, test authorization from a second account, inspect Storage separately from database tables, verify payment idempotency, rehearse recovery and review the deployed system rather than only the generated source.

That is the difference between generating an app and taking responsibility for a product.

If you are still choosing a tool, read my Lovable vs Bubble vs Webflow vs WordPress guide. If the question is budget, see my MVP development cost guide.

If you already have an AI-built MVP and need to decide whether to ship it, harden it, refactor it or rebuild parts of it, see my MVP development service or contact me.

Sources and further reading

Frequently asked questions

Questions, answered.

What makes an AI-built app production-ready?

It is production-ready when critical journeys work under realistic failure conditions, permissions are enforced beyond the UI, data and payments remain consistent, secrets are protected, deployments are recoverable, failures are observable, and someone clearly owns the system after launch.

Is a Lovable app production-ready?

It can be. Production readiness is a property of the specific app, not the builder label. Review authorization, database and Storage access, secrets, integrations, tests, deployment, recovery and operational ownership before real users or money depend on it.

Is the Supabase anon or publishable key safe in frontend code?

Supabase designs publishable keys, and legacy anon keys, for client use. They are not a substitute for authorization: exposed tables still need appropriate RLS and least-privilege access. Secret and service-role keys are privileged and must not be shipped to the browser.

What should I check first in a Supabase-based AI app?

Start with exposure and authorization. Identify what the Data API exposes, review grants and RLS on every exposed table, inspect Storage buckets and storage.objects policies, run Security Advisor, and test allowed and denied operations as different users.

NEED HELP WITH THE BUILD?

Turn what you learned here into a clearer website or MVP.

Share the goal, current stage, and constraints. I’ll help you identify the smallest responsible next step.

Continue reading

Related notes.