Vibe Coded App Audit

Vibe Coded App Audit — Is Your AI-Built App Safe to Take Money Through?

Your AI built it in a weekend. We check whether it's safe to launch.

You built an app with Lovable, Base44, Bolt, Replit or Cursor. It works. People are using it, or you are about to let them — and then somebody mentioned that AI-generated apps leak data, or your Supabase dashboard started showing a warning you don't understand. You can't read the code yourself, so you have no way to know whether the concern is real.

A senior engineer reads your codebase and your infrastructure, and sends you a ranked list of what is actually wrong, in language you can act on. If something needs fixing, we can fix it — we build production software for a living.

Not sure whether anything is wrong? Start with the free check.

We look at the public side of your app — no repo access — and email you three specific findings the same day.

We reply to every enquiry within 24 hours.

What a vibe coded app audit actually is

It is a person reading your code. One of our senior engineers goes through the application and the services it depends on — your database rules, your authentication, where your keys live, what happens when someone sends your app something it wasn't expecting — and writes up everything that would matter if a stranger went looking. You get back a report where each finding is rated by severity, explained in plain English, and paired with a specific fix and a rough estimate of the effort involved.

The review covers four areas: access control (who can reach which data), secrets (where your keys are and who can see them), data and input (what your app accepts and whether it checks), and production readiness (what happens under real load, and whether you would find out if something broke).

What it is not

  • Not an automated scanner. Lovable and Bolt already ship those and they are free. Run them.
  • Not a formal penetration test or a compliance certificate. If you need SOC 2 or a signed pen-test report for an enterprise customer, that is a different, much more expensive engagement.
  • Not a code-quality or performance review. We are not here to tell you the code is ugly. We are here to tell you whether it is safe.

Why AI-built apps fail in the same four ways every time

AI coding tools optimise for code that runs. Nothing in that objective rewards code that refuses the wrong person. The result is that independently built apps fail in a strikingly consistent pattern — one review of 62 Lovable apps found 63% carrying critical or high-severity issues, averaging ten findings each. These four account for most of them.

1. Your database has no row-level security

Your app talks to your database using a key that ships inside the page — it is meant to be public. What is supposed to stop a stranger using that key to read everyone's records is a per-row permission rule on each table. AI tools frequently create the tables and never create the rules. When that happens, anyone who opens your site can request the entire table: every user, every email address, every order.

This is not hypothetical. It is CVE-2025-48757 — 303 endpoints across 170 Lovable-generated apps were found readable through the public key because row-level security had never been switched on. A December 2025 audit put the rate at 10.3% of Lovable apps carrying data-exposure flaws. The fix is usually a few lines of SQL per table — the hard part is knowing which tables are exposed and what rule each one actually needs. That is the first thing we check.

2. Your secret keys are sitting in the browser

Some keys are safe to publish. Others — your Stripe secret key, your OpenAI key, your database service key — give whoever holds them the ability to charge cards, spend your API credits, or bypass every permission rule you wrote. AI tools put keys wherever makes the feature work fastest, and that is often directly in the front-end code. Anyone can open browser developer tools and read them in about ten seconds. (Formally this is CWE-798, hard-coded credentials; practically it is somebody else's bill.)

Moving a key is easy. Working out which of your keys were exposed, for how long, which need rotating, and what was done with them in the meantime is the part people get wrong — and it is in the report.

3. Your permission checks only run in the browser

Your admin page is hidden unless the logged-in user is an admin. That looks like security and isn't. Hiding a page in the front end only hides the button — the underlying request is still there, and anyone can send it directly without ever loading your interface. The same applies to changing an ID in a URL to view someone else's record. The check has to happen on the server, where the user cannot reach it.

This one is rarely a single fix. It usually means deciding, for each action in your app, who is genuinely allowed to do it — and then enforcing that somewhere the user cannot edit. We map it out for you.

4. Nothing checks what people send you

AI writes the validation into the form: the price field only accepts positive numbers, the quantity has a maximum, the file must be an image. All of that lives in the browser and all of it can be switched off by the person using it. Without the same checks running on the server, someone can submit a negative price, order ten thousand of something, or upload a file that is not an image at all. The same gap is why unlimited requests can be fired at your expensive AI endpoint until your bill arrives.

We identify every entry point that trusts the browser, and what a realistic abuse of it costs you — then close them.

This is a moving target, not a settled one: Georgia Tech's Vibe Security Radar recorded 35 new CVEs caused by AI-generated code in March 2026, up from six in January.

Is my app affected? A 5-minute self-check

You can do all three of these yourself, right now, without us. If any of them comes back badly, you have a real problem and you should deal with it this week.

  1. Search your own site for a service key

    Open your live app in Chrome, press F12, go to the Network tab and reload. Then press Ctrl+Shift+F to search everything the page loaded, and search for service_role, sk_live and SECRET. Any hit is a key that should never have left your server. Rotate it today.

  2. Check your database for tables with no rules

    In Supabase, open Advisors → Security. Any warning that reads "RLS Disabled in Public" names a table that anyone on the internet can currently read. Do not turn the warning off — that is the mistake that caused CVE-2025-48757. On Firebase, the equivalent is a Firestore rule of allow read, write: if true.

  3. Try to open somebody else's record

    Find a URL in your app with an ID in it — an order, a project, a profile. Change the ID to a different one and load it. If you can see data that isn't yours, so can everyone else. Do the same while logged out.

These three cover the externally visible failures. They will not tell you whether your payment flow can be charged twice, whether one customer's data can bleed into another's, or whether your app survives its first busy day — which is the part that needs someone reading the code.

What you receive

A severity-ranked report in plain English

Findings are ordered Critical, Important, then Worth Fixing — so you know what to do before launch and what can wait. Each one states what it is, what somebody could actually do with it, and roughly how much work the fix is. No jargon in the summary; the technical detail sits underneath for whoever implements it.

A copy-paste fix prompt for every finding

You built the app by prompting an AI, so the fixes come as prompts too. Several findings are things you can close yourself in an afternoon by pasting the prompt back into the tool you built with. We would rather you fixed the easy ones for free than paid us to do them.

A sample finding, so you know what you are buying

Every audit service on the internet describes its report. Here is what one of ours actually looks like:

CriticalFinding 01 — Anyone can upgrade themselves to the paid tier
What it is
The app decides which subscription tier a user is on by reading a value stored in the user's own browser. Nothing on the server checks it. There is no subscriptions table and no payment backend behind the pricing page.
What someone could do with it
Open the browser console, run a single line to set the stored tier to the highest plan, and every paid feature unlocks. We reproduced this on the live app: a free account became a top-tier account with no payment and no server request.
Effort to fix
3–5 days. Create a subscriptions table with row-level security, make a payment-processor webhook the only thing that can write to it, and move every feature gate to a server-side check.
For whoever implements it
Tier is read from browser storage and written in three places in the client. Persist subscription state server-side and enforce access in backend endpoints — the client should display state, never determine it. Meter quotas through a usage_events table rather than trusting client-side counters.

Ready for the full picture?

$149, 48 hours, and the fee comes off any fix work you commission afterwards.

We reply to every enquiry within 24 hours.

How it works

  1. You send us access. Read-only access to your repository, or an export if you would rather not add us to it, plus two lines on what the app does and where it runs. NDA signed first if you want one — just ask before you send anything.
  2. A senior engineer reviews it. Manual review of the code and the services it depends on, with targeted testing against the running app where that is the only way to confirm a finding.
  3. You get the report, and a call. Within 48 hours of us having access. We walk you through it, answer questions, and agree what happens next — whether that is you fixing it, your developer fixing it, or us.

What it costs

Published, because you should not have to book a call to find out whether you can afford something.

TierWhat you getPriceTurnaround
Free 10-minute checkWe look at the public side of your app — bundle, headers, obvious exposures — and email you three specific findings. No repo access.FreeSame day
AuditFull manual review of code and infrastructure. Severity-ranked report, fix and effort estimate per finding, plus a walkthrough call.$14948 hours
Fix SprintWe implement the Critical and Important findings, re-test, and issue a v2 report showing each one closed.$600–1,5001–2 weeks
Production hardeningPrototype to production: authentication, keeping customers' data apart, payments, monitoring, backups, and anything that genuinely needs rebuilding.From $2,500Scoped per project

The $149 comes off the price of whatever you do next. If the report leads to a Fix Sprint or a hardening project, the audit fee is credited against it. If it turns out nothing serious is wrong, you have paid $149 to stop worrying about it — which is the outcome we are happiest to deliver.

Should you audit, refactor, or rewrite?

Founders arrive at this page braced to be told their app is worthless and needs rebuilding from scratch. That is usually not true, and it is worth saying plainly, because the fear itself stops people getting the app checked at all.

Fix what's there — the common case. The findings are configuration and missing enforcement: permission rules never switched on, keys in the wrong place, checks that only run in the browser. Your product is fine; the settings around it are not. Days of work, and nothing your users will notice.

Refactor part of it — when the structure is sound but one area was built in a way that can't be secured as-is. Typically permissions scattered across dozens of places with no single point of enforcement, or a payment flow assembled without the checks that stop double-charging. You rebuild that one area, not the app.

Rebuild — genuinely rare. The real trigger is a data model that cannot keep customers apart: everyone's records in one undifferentiated pile with no reliable way to say which belongs to whom. If you are heading for paying business customers, that has to be fixed at the foundation. We will say so if that is what we find, and we will also say so when it isn't — a rewrite you didn't need is an expensive way to solve nothing.

The audit exists to tell you which of these three you are in, before you spend anything — and to tell you plainly when the answer is "nothing serious". If your question is launch timing rather than security specifically, say so when you get in touch and we will scope it that way.

Who does the audit

You are about to hand your source code to a stranger, so you should know who the stranger is. CodeChoicez is four engineers. Our names, our code and our work history are public — check them before you send us anything.

Apps we've actually shipped

The reason we can tell you what to fix is that we build the same things properly, for money, and have to live with the consequences.

  • An AI recruitment platform we built on Supabase — three distinct user types, each able to see only their own data, with row-level security doing the work rather than hidden pages. This is the problem that breaks most vibe-coded apps, at a scale where it has to actually hold.
  • BeanFlow, a Firebase-backed SaaS we shipped — subscription billing through Stripe, passkey sign-in, and Firestore rules written so the public config in the browser gives an attacker nothing. The same architecture people accidentally leave open, closed properly.
  • A B2B marketplace running live in Belgium — Stripe payments, three separate user roles with their own portals, and company VAT numbers validated against the EU registry. When we say "production ready", this is the standard we mean.

Frequently asked questions

Is my Lovable app secure?

There is no way to answer that without looking at it, and anyone who answers without looking is guessing. What we can say is that the same four problems appear in most AI-generated apps: database tables readable by anyone with your public key, secret keys sitting in the browser bundle, permission checks that run only in the front end, and input validated only in the browser. The free 10-minute check tells you whether any of the externally visible ones apply to your app.

How much does it cost?

The audit is $149 as a fixed fee, and that fee comes off the cost of any fix work you go on to commission. The 10-minute external check is free. If you want us to implement the fixes, a Fix Sprint is typically $600 to $1,500 depending on what the report turns up, and full production hardening starts at $2,500.

How long does it take?

48 hours from the point we have access to the code. The free external check comes back the same day.

Do I have to give you my source code?

For the full audit, yes — a review that does not read the code is not a review. Read-only repository access is enough, and an export works if you would rather not add us to your repo. We sign an NDA on request, before you send anything. The free 10-minute check needs no code at all; it only looks at what your app already shows the public.

Will you fix it, or just tell me what's wrong?

Either. The audit itself is findings only, and every finding comes with a fix you or your developer can apply. If you would rather we did it, the Fix Sprint implements the Critical and Important items and re-tests them, and your audit fee comes off the price. We are a development studio that ships production software — the people who find the problem are the people who can close it.

Lovable and Bolt have built-in security scanners — why do I need you?

Run them first. They are free, they are quick, and they catch real problems — there is no reason not to. What they cannot do is reason about your business. A scanner checks your code against known patterns. It cannot tell you whether one customer's data can end up in another customer's account, whether your payment flow can be charged twice, whether a refund can be triggered by someone who shouldn't be able to trigger it, or whether you are ready to take real money from real people. Those are judgement calls about how your particular app is put together, and they are what a human review is for.

Do I need to rewrite my app?

Usually not, and we will tell you when the honest answer is no. Most of what we find is configuration and missing enforcement — policies that were never switched on, keys in the wrong place, checks that only run in the browser. That is fixable in days without touching your product. A rewrite is genuinely warranted when the data model itself cannot keep customers apart, and that is rarer than founders fear.

What if I have no technical co-founder?

That is exactly who the report is written for. Every finding is explained in plain language — what it means, what someone could actually do with it, and how much work the fix is — with a separate technical note for whoever ends up implementing it, whether that is us, a freelancer, or a developer you hire later. You do not need to read code to make a decision from the report.

Find out where you stand this week.

Free 10-minute check, or the full $149 audit back in 48 hours. Tell us what you built it with and we'll take it from there.

We reply to every enquiry within 24 hours.