AI that ships, not AI that demos
Most AI features are demos that die in a sprint. Evals, guardrails, budgets and a human on the risky path: how I build the kind that survives real users.
Check whether your AI-built MVP is ready for paying customers. Review access, payments, backups, costs, and when to repair or rebuild.

Imagine this: you’ve built a booking app with an AI coding tool. The calendar works. The confirmation email arrives. A potential customer asks, “Can our team start using this on Monday?”
Lovely question. Suddenly, a very different question from “does the demo work?”
To take a vibe-coded app into production, verify who can access each customer’s data, how payments behave when something goes wrong, whether you can restore lost data, and who owns the running system. Then test the workflow you plan to sell. A polished screen is useful evidence of the interface. It tells you much less about everything behind it.
This vibe coding production checklist helps you decide what must work before a paid launch, what can wait, and what evidence to ask a developer to show you. You don’t need to become a full-time engineer to make a better launch decision.
Featured image: AI-generated editorial illustration of a fictional founder reviewing an app, not a client photograph or a tested software interface.
Yes, provided the app meets the requirements of the work and data you’re trusting it with. The tool that wrote the code doesn’t settle that question. The implementation and its verification do.
Here, “vibe coding” means building an app mainly by describing what you want to an AI tool and iterating on the result. Once someone reviews the code, tests its boundaries, and takes responsibility for operating it, you have a more deliberate engineering process, whatever you call the starting point.
There’s good reason to separate enthusiasm from evidence. In the 2025 Stack Overflow Developer Survey, 84% of respondents reported using or planning to use AI tools in development, while 46% distrusted their accuracy. Those are developer survey results, not a failure rate for AI-built apps or a survey of your customers.
The useful question is what your app has demonstrated.
| Where the app is going | A sensible boundary |
|---|---|
| A private concept demo | Use invented data and avoid real charges |
| A limited customer pilot | Verify permissions, recovery, support ownership, and any live payment flow before inviting people |
| A public paid product | Add operating limits, monitoring, repeatable releases, and checks for the workflows you promise |
| Sensitive or regulated work | Get a review suited to the data, obligations, and consequences before using real records |
My recommendation: start with the smallest useful customer workflow you can operate responsibly. You can postpone a theme picker. Customer isolation needs an earlier appointment.
For an app holding private customer data or taking payments, I would treat the following as launch gates, not optional finishing touches.
Use pass, fail, unknown, or not applicable with a reason for every row. Unknown means you still need evidence. Don’t turn eight green ticks and one serious data leak into an average score.
| Gate | Evidence to request | Reason to pause the affected launch |
|---|---|---|
| Customer separation | Tests with two unrelated customer accounts | One account can read or change the other’s private records |
| Secrets and permissions | Review of client code, server credentials, and privileged actions | A private key is exposed or an ordinary user can perform an admin action |
| Payments, if offered | Test records for success, failure, repeated events, and cancellation | Access or fulfilment disagrees with the confirmed payment state |
| Recovery | A restore rehearsal and a record of what it recovered | Nobody can show that essential records and files can be recovered |
| Core workflow | A fresh account completes the promised task on the target devices | The main task loses data or cannot finish reliably |
| Operations and ownership | Named owner, alerts, account access, and recovery instructions | Nobody can respond to a failure or regain control of a critical service |
This is a starting framework, not a security certification or a complete audit. Your app may need additional checks for uploads, integrations, abuse, accessibility, or its specific industry. Ask the reviewer to name those gaps rather than signing a vague “looks good.”
Ask a developer to verify permissions at the server or database boundary using two test accounts, not just by hiding buttons in the interface.
Authentication answers “who are you?” Authorization answers “are you allowed to do this?” OWASP’s authorization guidance recommends denying access by default and checking permissions on every request.
For your own app, use a separate test environment with invented records. Ask the reviewer to try reading, editing, exporting, and deleting account A’s private records while signed in as account B. Repeat the relevant checks while signed out. Record the expected result, actual result, and app version.
In a Supabase app, row-level security can enforce which database rows a user may access. Its policies still need to match your product’s rules. Supabase also warns that service keys can bypass row-level security and must not be exposed to customers.
A successful check covers the paths tested. It doesn’t prove that every endpoint, file, or future feature has the same protection.
No, a scan is one source of evidence, and its findings need review in the context of the app.
Lovable’s own security documentation says its security tools do not replace a thorough security review. That’s a useful distinction even if you use a different builder: automated checks help find problems, but the business rules still need examination.
Ask for a list of findings, fixes, unresolved issues, and checks performed after the fixes. An AI response saying “everything is secure” is a sentence. You need a record you can inspect.
Payments should produce the intended business result even when notifications arrive twice or arrive in an unexpected order.
A webhook is a message a service sends your app when something happens. Stripe’s webhook documentation explains that events can be delivered more than once and that delivery order is not guaranteed. It also documents signature verification so your app can check that incoming messages came from Stripe.
For a hypothetical booking product, these are the acceptance tests I would request in the payment provider’s test environment:
Ask the developer to show the payment record and your app’s record together. A green confirmation screen on its own leaves too much of the story off-camera.
For subscriptions, add the access rules for failed renewals, cancellation, and the end of the paid period. Write those rules down before implementing them. Otherwise, your billing system ends up making product decisions by accident.
You need a rehearsed recovery path and control of the accounts the product depends on.
Start with a small inventory: source-code repository, domain, hosting, database, file storage, email provider, payment account, and any AI service. Record who owns each account and how an authorized person regains access. Keep passwords and secret keys in an appropriate password or secrets manager, not in the handover document.
A rehearsal should show that you can recover the records and files needed for a real customer task, within a time you’re prepared to accept.
For example, Supabase documents that database backups do not include objects stored through its Storage API. A restored record pointing to a missing customer attachment is only half a recovery.
Ask your developer to restore into an isolated environment, then open a sample record and its attachment. Note the backup date, missing data window, recovery time, and any manual steps. Never rehearse by overwriting your only live database.
Decide how much recent work you can afford to lose and how long customers can wait. Those are business decisions that help determine the backup setup. “We have backups” is the beginning of the conversation.
Someone should be able to stop the damage, identify the affected version, and follow a recovery plan that accounts for database changes.
Rolling back application code does not necessarily reverse a database migration. Ask which releases can be rolled back directly, which need a forward fix, and who makes that call. Test the plan away from production first.
If this is the part you hadn’t budgeted for, the guide to building a web app like an appliance explains the broader operating mindset. The product includes what happens after the first successful login.
Estimate running costs from the customer actions that consume services, then test your assumptions against a small pilot.
The following example is hypothetical arithmetic, not vendor pricing, a quote, or a forecast. Imagine a product with an AI feature:
| Assumption | Illustrative amount |
|---|---|
| Monthly active customers | 100 |
| AI actions per customer per month | 20 |
| Assumed average cost per action | ₹2 |
| Estimated AI usage cost | 100 × 20 × ₹2 = ₹4,000 per month |
| If usage per customer doubles | 100 × 40 × ₹2 = ₹8,000 per month |
This excludes hosting, storage, email, payment fees, taxes, support, and development. Replace every assumption with your provider’s current pricing and measured usage. For a model API, the real cost can vary with the model, input, output, and retries; a flat cost per action is only a planning simplification.
I would set limits for expensive actions, decide what users see when a limit is reached, and assign someone to review spending. Check whether each provider’s budget control is an alert or an actual spending cap. An email about a bill is not a mechanism that stops it growing.
Also separate using AI to build the app from running AI inside the product. If your product calls a model for customer tasks, it needs additional checks for output quality and failures. The article on shipping AI features with evaluations and fallbacks covers that separate job.
Choose based on the cost and uncertainty of reaching a verified customer workflow, not whether a human or an AI wrote the first version.
A rewrite is one option. So is repairing a small number of well-understood problems. Ask for evidence before buying either story.
| What a reviewer finds | A reasonable next step |
|---|---|
| The core workflow is clear and failures are localized | Repair the specific failures and repeat the acceptance tests |
| Nobody can explain permissions or payment state | Pause those live features and map the behaviour before estimating |
| Most changes break unrelated parts | Compare a staged replacement with the cost of continued repair |
| The product’s main assumptions are still untested | Keep the experiment small and avoid scaling an unproven workflow |
| The platform cannot support an essential requirement | Assess migration or a rebuild, including data export and customer disruption |
Request two scoped proposals where both are plausible: stabilize the existing app, or replace the smallest necessary part. Compare the deliverables, acceptance tests, exclusions, migration work, and support arrangements. A low quote with no definition of “done” is a number, not a plan.
Technical readiness and buyer readiness are separate decisions. Before funding a bigger build, check what the person paying for your product needs to see. A reliable app still needs to solve a problem worth paying for.
Use half an hour to collect the questions and owners for a review, not to declare the app secure.
Here’s a brief you can send to a developer:
Please review this app for a limited paid pilot. The main workflow is [describe the task]. It stores [data categories] and takes payments through [provider, or none]. Please document customer-access boundaries, payment failure handling, backup restoration, deployment recovery, and account ownership. For each finding, include impact, evidence, a proposed fix, and a repeatable acceptance check. Separate launch blockers from improvements that can wait, and explain which parts you have not assessed.
The result should be a review someone can act on. “The AI says it’s fine” does not need a meeting; unresolved customer-data access does.
It can be appropriate when the resulting app is reviewed and tested for its actual use. The label alone tells you little about the quality of the implementation. Start with customer permissions, payment behaviour, recovery, and a clear operating owner.
You can consider a launch after verifying the app’s requirements and the platform’s current capabilities for your project. These tools and their plans differ, so don’t assume the same hosting, export, or security features across them. Request evidence from your actual app rather than treating a tool name as a launch approval.
You need someone capable of reviewing and operating the parts of the system you depend on. If you cannot verify permissions, billing, or recovery yourself, a focused engineering review is a sensible next purchase. It does not automatically mean hiring a permanent team or replacing the whole app.
There is no useful universal price without examining the app, data, integrations, and launch scope. Ask for an assessment followed by a prioritized repair plan with acceptance tests. Compare the cost of reaching the same verified outcome, including migration and support, rather than comparing headline quotes alone.
Yes, as an additional review tool, but don’t treat its answer as independent proof that the app behaves correctly. Run tests against expected outcomes and inspect the parts that control access, money, and recovery. A second opinion is more useful when it brings different evidence.
No, this checklist helps organize a launch decision; it is not an exhaustive security assessment. Passing tests establishes evidence for the paths and version examined. New features, configuration changes, and newly discovered vulnerabilities require continued attention.
Pick one workflow and collect evidence that it works, keeps customer data separate, and can recover when something breaks. Fix the launch blockers before adding another screen. A limited, well-supported pilot gives you a clearer next decision than a larger product nobody can confidently operate.
If you need help assessing the build, send me the workflow and your biggest unknown, and we can discuss what a useful review would cover.
Was this useful?
No account needed. One like per browser; click again to undo.
Prabir Singh
Full-stack engineer in Mumbai. Twenty years in sales taught me why people buy; seven years of code taught me how to build what they'll pay for. I still read error messages the way I once read objections: as the most honest feedback of the day. More about me or start a project.
Most AI features are demos that die in a sprint. Evals, guardrails, budgets and a human on the risky path: how I build the kind that survives real users.
Twenty years selling capital market products taught me why people buy. Seven years of code taught me to build it. What carried over, and what I unlearned.
Most software gets designed for the person clicking the buttons. The person signing the cheque watches a different scoreboard. How to build for both.