Original research

We scanned 400 real AI-built apps. Here's what we found

VibeSafe · September 8, 2026 · 7 min read

Everyone has an opinion about whether AI-built apps are safe. Almost nobody has counted. So we built a frozen list of 400 public repositories genuinely built with Lovable, Bolt and v0, and started scanning them. The headline number: 18.5% had a .env file committed straight into the repository.

400
repos in the corpus
18.5%
had a committed .env
59%
of scanned repos had a critical issue
2%
of scanned files were clean

How we picked the 400

This is the part most "we analysed AI code" posts skip, and it's the part that decides whether the numbers mean anything.

Searching GitHub for repos that mention Lovable returns hundreds of thousands of results — tutorials, blog posts, starter templates, people who simply wrote the word in a README. Sampling those gives you a number about people who talk about AI builders, not people who use them.

So we selected on a build artefact instead: a .lovable file, lovable-tagger in package.json, or a .bolt/ directory. Those are written by the tool, not by a human describing it.

Rules fixed before we looked at any results:

• One repo per owner, so a single prolific builder can't dominate the sample
• Forks excluded, so one popular template isn't counted many times
• Repos with fewer than 8 root entries excluded — that's a scaffold, not an application
• File selection by a fixed rule, never hand-picked after looking
• A fixed random seed, so the sample is reproducible

Changing those after seeing results is how an honest study becomes a dishonest one, so they were written down first.

What the corpus looks like

BuilderRepos
Lovable290
Bolt102
v08

35.2% of them use Supabase — which matters, because Supabase is where row-level security either protects your users' data or doesn't.

Finding 1: nearly one in five committed their .env

74 of 400 repositories had a .env file sitting in the repo root. That is the single most damaging thing you can publish by accident. A .env is where your database URL, your service-role key, your Stripe secret and your AI provider key all live in one text file.

We recorded only whether the file was present. We never opened one. Those are strangers' live credentials, and there is no version of reading them that's defensible — so the study treats them as a yes/no signal and nothing more.

What makes this a tooling failure rather than a user failure: nobody types git add .env on purpose. It happens because the generated project didn't ship a .gitignore rule covering it, and the founder ran git add . exactly as every tutorial tells them to. The AI wrote the app; nothing told them the app came with a live grenade in it.

Finding 2: the code itself is worse than the score suggests

We then scanned individual source files with the same engine that powers VibeSafe. This part of the study is still running — the numbers below cover 115 files across 41 repositories, not the full corpus. Treat them as a strong signal, not a final answer.

MeasureResult
Files scanned115
Repositories represented41
Average security score73 / 100
Files with zero issues2%
Files with ≥1 critical issue42%
Repos with ≥1 critical issue59%

An average of 73/100 sounds survivable. It isn't, and the reason is the distribution: the average is dragged up by files that are mostly fine, while the worst files scored 5, 5, 5, 23 and 27. Security doesn't average. One file scoring 5 is enough.

What the critical issues actually were

CategoryCount
Vulnerable dependency28
Broken access control12
Sensitive data exposure7
XSS / HTML injection7
Prompt injection5
Missing authentication3
Open CORS policy3

Two things stand out.

Vulnerable dependencies lead by a distance. These aren't code the AI wrote badly — they're packages it pulled in that already had known holes. The generator picked a plausible library and never checked whether that version was safe.

Prompt injection appears at all. Five criticals in a 115-file sample. These are apps that pass user input into an LLM call without separating instructions from data. It's a brand-new bug class that didn't exist in the tutorials these tools learned from, and it's already shipping.

Finding 3: the most common problems aren't "security" problems

Across every severity, the two largest categories were missing state handling (53) and code quality (53) — ahead of every classic vulnerability class.

Missing state handling means a payment, upload or webhook flow that implements the happy path and nothing else. No branch for payment failed, payment pending, webhook delivered twice, or an empty result. AI writes code that makes the demo work, because that's what it was optimised to do. "The demo works" and "the demo works when Stripe calls back twice" are different programs.

That's the honest shape of the risk. Most AI-built apps don't fail because of an exotic exploit. They fail because a real user did something slightly unusual on a Tuesday.

What these numbers do not show

The scan is incomplete. 115 of 1,185 identified files. The run was stopped part-way and will be finished; the final figures may move.

Public repos aren't all repos. People who push an AI-built app to public GitHub may be less careful than people who keep it private. This is a real selection effect and we can't measure it.

These are scanner findings, not proven exploits. Nothing here was manually verified as attackable. A critical finding means "this pattern is dangerous", not "we broke into this app".

No repository, path or snippet is published — here or anywhere. Aggregate numbers only. Naming a repo with a committed .env would be handing someone a target.

What to do with this if you built with AI

Find out where your app sits in these numbers

VibeSafe runs the same scan used in this study against your own code, GitHub files or live URL — in plain English, with a one-click fix for each issue.

Scan your app free →

No signup to try · 10 free scans a month · Your code is never stored

An honest note. VibeSafe catches the most common risks in AI-built apps quickly. It doesn't replace a professional security audit for high-risk applications, and — as the numbers above show — no automated scan catches everything.

Related: