10 min read

Is your Lovable, Bolt or Replit app ready for real customers?

Vladyslav Sokolovskyi Co-founder & CTO

In short

Usually not yet, but it's rarely far off. Apps built with Lovable, Bolt, Replit, v0 or Cursor tend to fail in the same eight places: secrets in the browser, missing database access rules, auth edge cases, no tests, no backups, unmapped personal data, runaway hosting costs and a deploy process nobody controls. Most of these can be checked in an afternoon and fixed without a rewrite.

If your app was built with Lovable, Bolt, Replit, v0 or Cursor and people already use it, the honest answer to “is it ready for paying customers?” is usually not yet, but closer than you think. The same eight problems turn up in almost every AI-built app we review. Most of them can be checked in an afternoon, and very few require a rewrite. This checklist is for founders and product owners who want to know where they stand before customer data and revenue depend on the app. If you’d rather hand the whole review to someone else, that’s what our Vibe-Code Rescue service does.

“Vibe coding” means building software by describing what you want to an AI tool and accepting the code it writes, often without reading it line by line. It’s a genuinely fast way to reach first users. The catch is that the code is shaped by what you can see in the preview, so it tends to skip what you can’t see: access rules, error paths, backups, and what happens when a stranger calls your API directly instead of clicking through your interface.

What goes wrong when vibe-coded apps meet real users?

This isn’t theoretical. Some well-documented public examples:

  • In 2025, researchers scanned 1,645 apps listed on Lovable’s public showcase and found 170 projects, about 10%, whose database rules let anyone read user data, and in some cases write it: emails, phone numbers, payment details and API keys. It was filed as CVE-2025-48757. Lovable disputed that it was a platform flaw, which makes the point rather than weakening it: getting the access rules right was each app owner’s job.
  • Escape’s security team analyzed more than 5,600 publicly available vibe-coded apps, most of them built with Lovable, and reported over 2,000 high-impact vulnerabilities, more than 400 exposed secrets and 175 cases of exposed personal data, including medical records and IBANs.
  • In February 2026, The Register reported on an education app featured by Lovable in which a researcher found 16 flaws exposing 18,697 user records. One critical check was inverted: it blocked logged-in users and let anonymous visitors through. The database had no row-level security.
  • In July 2025, Replit’s AI agent deleted a project’s database during a declared code freeze. Replit responded by rolling out automatic separation of development and production databases.

The pattern shows up in controlled tests too. Veracode ran more than 100 language models through 80 coding tasks and found that in 45% of the tasks, the generated code introduced a known security flaw. AI tools write plausible code. They don’t reliably write safe code unless someone checks it.

The production-readiness checklist

These are the eight areas we check first in any AI-built app. The middle column is something you can do yourself, and most of these checks take minutes, not days.

ProblemHow to checkTypical fix
1. Secrets in the browserIn the live app, open DevTools and search the loaded JavaScript for service_role, sk_live, secret and third-party API keys. Check whether .env files are committed.Move privileged calls into a server function, rotate every exposed key, keep secrets in a secrets manager.
2. Missing or wrong row-level securityIn Supabase, open Advisors and look for tables with RLS disabled. Then log in as user A and request user B’s rows.RLS on every exposed table, one policy per operation tied to the logged-in user, tested with two accounts.
3. Auth edge casesOpen admin pages and API routes directly as an ordinary user. Try password reset, email change, and an old session after a role change.Permissions checked on the server for every request; roles stored in the database, not in the interface.
4. No automated testsDoes anything run automatically when the code changes? If every release means clicking through by hand, the answer is no.Tests for the flows that earn or lose money (signup, login, payment, the core action), run in CI.
5. No backups, one shared databaseAre automated backups on, and for how long are they kept? Has anyone ever restored one? Do development and production share a database?Automated backups with a tested restore, separate development and production, no production credentials for AI agents.
6. Personal data and GDPRList the personal data you store, the region it’s in and every service that receives it (email, analytics, AI APIs). Can you delete one user’s data on request?A data map, EU hosting, data processing agreements with vendors, a deletion flow and a privacy policy that matches reality.
7. Hosting and API costCompare the last three bills from your database, hosting and AI providers with your user growth. Is there a spending cap?Indexes, caching, rate limits on expensive endpoints and AI calls, budget alerts.
8. Deploy processWho can push to production, and how? Is the code in a repository your company owns? Can you roll back in minutes?Code in your own GitHub or GitLab organization, CI/CD with a staging environment, versioned database migrations and rollback.

Why is row-level security the hole we find most often?

Lovable and many Bolt and v0 projects use Supabase, where the browser talks to the database directly with a public key. That’s a legitimate design, but it only works if the database itself decides who may see which rows. The mechanism for that is row-level security (RLS): rules inside Postgres that filter every query by who is logged in. Supabase’s own documentation is blunt about it: enable RLS on every table in an exposed schema. Without it, anyone holding the public key, which ships inside your JavaScript, can read and write that table.

The variants we see most often:

  • RLS is off on tables added later. The first tables got policies; the table the AI created for a new feature in week six didn’t.
  • A policy exists but allows everything. A rule like using (true) counts as “has a policy”, so a scanner that only checks for presence passes it. When Lovable introduced its built-in security scan, the researchers behind CVE-2025-48757 criticized it for exactly this: it checked whether policies existed, not whether they were correct.
  • Writes are left open. Even where reading is restricted, inserts and updates often aren’t. On Linkable, the first app identified in the CVE-2025-48757 research, a researcher wrote a record with payment_status set to paid straight into the database, bypassing Stripe entirely.
  • The service-role key ends up in the browser, usually added “to make it work” when a policy blocked an admin feature. It bypasses RLS completely.

The fix is mechanical but needs care: a policy per table and per operation, admin actions moved into server functions, and an automated test that logs in as two different users and proves neither can touch the other’s data.

Which login and permission problems are easy to miss?

Login itself usually works, because you use it every day. The edge cases are what break:

  • Permissions enforced only in the interface. Hiding the “Delete” button from non-admins does nothing if the API behind it accepts the request from anyone.
  • Inverted or partial checks, like the education app above: code that looks right, passes a quick click-through, and does the opposite of what it should.
  • Flows nobody clicks often: password reset links that never expire, email changes without re-verification, invitation links that can be reused, OAuth redirect settings that still allow localhost.
  • Sessions that survive a role change or a deleted account.
  • No rate limit on signup, login or password reset. That invites credential stuffing and, if signup triggers an email or an AI call, a surprise bill.

The general fix is to make the server the only place where permissions are decided, and to write one automated test per role that tries something the role shouldn’t be allowed to do.

What do GDPR and Nordic customers expect?

GDPR applies as soon as you store personal data about people in the EU, whatever your size. If a table of names and emails is readable by anyone, that’s a personal data breach, and when it’s likely to put people at risk it must normally be reported to the supervisory authority within 72 hours. In Sweden that authority is IMY.

B2B customers in the Nordics will also ask during procurement: where is the data stored, who can access it, which sub-processors receive it, and do you have data processing agreements in place? The gaps we typically find in AI-built apps:

  • a database region nobody chose deliberately;
  • analytics or session-replay tools recording form fields that contain personal data;
  • customer data sent to an AI API with no agreement covering it;
  • no way to export or delete one user’s data on request;
  • logs full of email addresses and access tokens.

None of this is hard to fix, but it has to be written down, because your customers’ data protection officers will ask to see it.

Does a vibe-coded app need to be rebuilt?

Usually not. Most apps can be stabilized step by step while they keep running, and a full rewrite throws away the one thing the app has already proven: that people want it. We only recommend rebuilding a part when that’s cheaper over the next year than fixing it.

Signs that a part may be worth rebuilding:

  • The data model is wrong at the root, for example a B2B app with no concept of an organization or tenant, so every query has to guess whose data it is. We cover tenant isolation and the other foundations in SaaS architecture from MVP to scale.
  • The same business logic is copied into dozens of components, so every fix has to be made ten times.
  • The code can’t be built or run outside the tool that generated it.

The trade-off between refactoring and rebuilding is the same one we describe for older systems in when to modernize legacy software. When we do move parts of an app, we usually move them onto the TypeScript stack we build on, which stays close to what the AI tools generate, so your team can keep using them.

In what order should you fix things?

If the checklist turns up problems, this order limits the damage fastest:

  1. Today: rotate any exposed keys and turn on RLS for tables that have none. An open table is the one problem that can hurt you this week.
  2. This week: confirm that backups exist by restoring one into a separate project, and separate development from production.
  3. Next: move permission checks to the server and close the auth edge cases.
  4. Then: put the code in a repository your company owns, with CI/CD and a way to roll back.
  5. Then: tests for the flows that earn money, so the next AI-generated change can’t silently break them.
  6. Alongside: the GDPR paperwork (data map, vendor agreements, deletion flow) and spending limits.

Once steps 1–5 are in place, AI tools become much safer to keep using, because a change that breaks login or opens a table fails the pipeline instead of reaching customers.

What to do next

Start with the checklist above; an afternoon with it will tell you more than any automated scanner. If you’d rather have a senior engineer do it, our Vibe-Code Rescue starts with a fixed-price code and security audit for €1,900 (3–5 business days), which gives you a written report with prioritized fixes and a fixed price for making them; the fee is credited if you go ahead. Stabilization starts from €6,000 and typically takes 2–4 weeks. After that you can keep the app maintained with Care Lite, our fixed-price monthly maintenance plan, keep building with a Start Pod, a small senior-led team at a fixed monthly price, or take everything in-house. You contract with Smoother Development AB in Sweden, our engineers work from Ukraine, and a founder is accountable for the work.

Frequently asked questions

Is a Lovable app secure enough for real customers?
It can be, but not by default. Most Lovable apps use Supabase, so security depends on row-level security being enabled and correct on every table; a 2025 scan found 170 of 1,645 showcased Lovable apps exposing data through missing or weak policies.
How do I check if my Supabase database is exposed?
Open Advisors in the Supabase dashboard and look for tables with RLS disabled, then log in with two ordinary accounts and check whether one can read or change the other's rows. If any table returns real data to a logged-out request, treat it as exposed and rotate your keys.
Do I need to rebuild a vibe-coded app before launch?
Usually not. Most problems are fixed in place: moving secrets to the server, writing access policies, adding tests and a proper deploy pipeline. Rebuilding a part only makes sense when the data model is so wrong that fixing it costs more over the next year than starting that part over.
What does it cost to make a vibe-coded app production-ready?
With us, a fixed-price code and security audit costs €1,900 (3–5 business days) and stabilization starts from €6,000, typically over 2–4 weeks. The audit gives you a fixed price for the fixes before you commit to anything.
Does GDPR apply to a small app with a few hundred users?
Yes. GDPR applies as soon as you store personal data such as names or email addresses of people in the EU, whatever your size, and a breach that is likely to put users at risk must normally be reported to the supervisory authority within 72 hours.
Can we keep using Lovable or Cursor after the app is stabilized?
Yes. Once tests, code review and CI checks are in place, AI tools are much safer to use, because a change that breaks login or opens up a table fails the pipeline instead of reaching customers.
Vladyslav Sokolovskyi
Written by Vladyslav Sokolovskyi Co-founder & CTO

Vladyslav co-founded Smoother Development and leads architecture and the engineering team in Ukraine. He holds a PhD in computer science and is a senior university lecturer.

Connect on LinkedIn

Need help with your project?

Talk to a founder about what you want to build or fix. You'll get a written next step, not a sales pitch.

Book a 30-minute call

Let's talk about what you want to build

Tell us briefly what you want to build, fix or put into production. You'll talk to a founder, not a salesperson.

Book a 30-minute call

Pick a time in Daniel's calendar. You'll get an invite with a video link, and we'll come prepared with questions about your goal.

Pick a time
  1. 1 A founder reads your message and usually replies within one business day.
  2. 2 We agree a time for a 30-minute call to understand your goal, systems and constraints.
  3. 3 You get a written next step: a fixed-price proposal, a paid audit, or an honest "we're not the right fit".

Prefer e-mail? [email protected]

Or send us a message

Privacy policy *