AI App Builder Audits · AI Development Series
You built it with Lovable and it works. Before you put real customers and real data through it, it is worth knowing what is underneath.
This matters because it determines what an audit is even looking at. Lovable is not a black box — it generates real code, and you can export the whole thing to GitHub and open it in any editor. That is genuinely to its credit, and it is also why a proper review is possible at all.
Note what is not in that list: there is no separate backend server sitting between your users and your database. The React application in the browser talks to Supabase more or less directly, using a public API key that anyone can read out of the page source. That is a completely legitimate architecture — Supabase is designed for it — but it moves the entire security burden onto one thing: your row level security policies.
If those policies are right, the design is sound. If they are wrong, missing, or written permissively to make something work during the build, then every record in your database is one browser console away from anybody who signs up. This single fact explains most of what we find in Lovable applications.
These are not hypothetical. They are the issues that come up again and again in the Lovable and Supabase applications people bring us, described in the order we tend to hit them.
The most common and the most serious. Supabase will happily let you create a table with row level security disabled, and a generated app will work perfectly that way — right up until it has a second user. We also see the subtler version: policies that exist, so the dashboard shows a reassuring green tick, but which are written to allow any authenticated user to read any row rather than only their own.
The reason this survives testing is that it is invisible when you are the only person using the application. You log in, you see your data, everything looks correct. It only becomes apparent when two separate customers are in the system and one of them goes looking.
What it costs you: this is a personal data breach under UK GDPR, reportable to the ICO within 72 hours of becoming aware of it.Generated code frequently hides a button, or filters a list, based on the logged-in user's role — and stops there. The interface behaves correctly, so it passes every test a non-developer would think to run.
But that check lives in JavaScript that runs on the user's own machine. Anyone can open developer tools and call the underlying query directly with the public key. If the database is not independently enforcing the same rule, hiding the button protected nothing at all. Interface logic is a convenience for honest users; it is not a security control.
What it costs you: privilege escalation. Ordinary users reaching admin data and admin actions.Generated schemas tend to be shaped like the screens that were described, not like the domain underneath them. One application we looked at recently arrived with a single table where the work it was doing genuinely needed something closer to forty. Every figure the system displayed was being recalculated from scratch on each page load, because there was nowhere to put an intermediate result.
It ran fine in the demo. With a few hundred records it was slow. With a few thousand it would not have loaded at all. And because everything was crammed into one place, there was no way to fix the performance without redesigning the data model — which meant redesigning the parts of the application built on top of it.
What it costs you: the rebuild you were trying to avoid, arriving later and costing more.Supabase issues a service role key that ignores row level security entirely, by design, so that trusted server-side code can do administrative work. Generated Edge Functions often reach for it because it makes the function work first time.
The risk is what that function then accepts. If it takes an identifier from the request and trusts it, you have built an endpoint that will return or modify anybody's data on request, no matter how carefully the rest of your policies are written. We check every function that holds this key and what it is prepared to do on a stranger's say-so.
What it costs you: a single unchecked function undoes your entire access control model.Postgres does not add indexes on foreign keys for you, and generated schemas rarely add them either. On a table with a hundred rows this is unmeasurable. On a table with a hundred thousand it is the difference between a page that loads and a page that times out.
Alongside this we usually find the classic pattern of fetching a list and then making a separate database round trip for each item in it — fine at ten items, ruinous at a thousand. Both are straightforward to fix once identified. Neither is visible until you have real volume.
What it costs you: the application gets slower as you get more successful.Generated applications almost never arrive with automated tests, error tracking, or a way of knowing that something failed for a customer at two in the morning. The first report of a problem is usually the customer.
This is less dramatic than a data breach but it is the one that quietly costs the most, because it means every change you make afterwards is a gamble. You cannot safely modify software when you have no way of telling whether you have broken it.
What it costs you: every future change is slower and riskier than it should be.None of the above means you were wrong to use it. Lovable is very good at something that used to be expensive and slow, and the fact that it produces real, exportable code puts it well ahead of the platforms that trap you in a proprietary format.
The honest summary: Lovable is excellent at the first eighty per cent and leaves you on your own for the last twenty, which is the part that determines whether the thing survives contact with real users. Knowing which side of that line your application currently sits on is the entire point of an audit.
If you have not deployed yet, that comes first: we have written a separate guide to getting your AI-built app live, covering Lovable hosting, exporting your code to GitHub, what moving off Lovable Cloud actually involves, and what to check before real users arrive. If you are thinking of leaving Lovable altogether, our guide to moving off Lovable covers your own Supabase, Vercel and carrying on in Cursor or Claude Code.
If you searched for a Lovable security breach or a Lovable security incident, there are two you have probably read about. They are different problems, and only one of them is about your app's database.
In March 2025 a security researcher scanned 1,645 apps from Lovable's public showcase and found 170 of them (about 10%) where database tables could be read, and in some cases written to, using nothing more than the public key every visitor's browser already has. The exposed data included user lists, payment records and API keys. The cause was row level security that was missing or too loose on the generated Supabase tables. It was published as CVE-2025-48757 on 30 May 2025. Lovable disputes it, on the grounds that each customer is responsible for protecting their own app's data, and it added a security scan in Lovable 2.0. The researchers' own account is in their published statement.
The honest takeaway is not that Lovable is unusually dangerous. It is that row level security is the one setting that decides who can see what, and an AI tool will happily build an app that works perfectly while leaving it open. That is still the most common thing we find.
The second was on Lovable's side rather than in anyone's app. According to Lovable's own write-up, between 3 February and 20 April 2026 a regression meant the chat history and source code of public projects could be opened by any Lovable user with the project link. Lovable says private projects and Lovable Cloud were not affected. It fixed the issue on 20 April, made existing public projects private, and said it would contact owners whose projects may have been viewed.
People who hire Lovable developers usually want one of two things: more built inside Lovable, or someone to make what they already have safe and finish it properly. They are different jobs.
If you want more built inside Lovable, Lovable runs its own partner programme, with certified Lovable experts and larger solution partners listed in a directory. If you want to hire Lovable experts who work in the tool every day, or a Lovable agency partner for a bigger build, that directory is the right place to start. Marketplaces are the other route. Look for a Lovable developer: Upwork and Fiverr both have plenty, and some are excellent, but check their past work and ask the questions in our guide to hiring a developer to finish your AI app before you hand over the keys.
If you need it checked, fixed or finished, that is us. To be clear, we are independent: we are not a Lovable agency partner, and we are not Lovable experts in the sense of building inside the tool. We are developers who build with AI every day and know what Lovable produces (React, TypeScript and a Supabase PostgreSQL database), which is exactly the stack you need someone fluent in once the app matters. Lovable app developers who only work through prompts tend to hit the same wall the tool does. We work on the code itself.
The usual order is a fixed-price AI Code Audit first, so you know exactly what you have, then either we fix the issues in place or we take it on and finish it. The code and every account stay in your name throughout.
Nobody who brings us a Lovable app has done anything wrong. They had an idea, they built it, and it worked — which is more than most people manage. The problem is that the tool is confident about things it has no way of knowing, like who is allowed to see what. That is the bit we check.
Not by default. Lovable generates working React and Supabase code quickly, but security depends on configuration it does not enforce. The most common problems we see are Row Level Security that is off or written permissively, and permission checks placed in React rather than in the database, where any user can bypass them.
Two incidents have been widely reported. In 2025, CVE-2025-48757 described apps built on Lovable whose database tables were readable by anyone because row level security was missing or too loose; Lovable disputes it as the customer's responsibility. In 2026, Lovable reported that chat history and source code of public projects could be opened by other Lovable users between 3 February and 20 April; it says private projects and Lovable Cloud were not affected. Neither changes the main job: check your own app's database rules.
Lovable itself is a sound platform. The real question is whether the app it produced for you is production-ready, which is a different thing. Apps built quickly with any AI tool tend to ship without database constraints, indexes or monitoring. Those gaps rarely show until you have real users.
Supabase requires Row Level Security to be enabled and policies written before it protects anything. In the Lovable apps we have looked at, RLS was either disabled or enabled with policies permissive enough to let any authenticated user read any row. Enabled is not the same as enforcing.
It is one of the most common faults we find. If permission checks live in your React components rather than in database policies, a user can open browser developer tools and request the data directly. The interface hides other customers' records; the database still hands them over.
Only once someone has verified the permission model at the database level. If your app holds personal data you are responsible for it under UK GDPR, regardless of what built it. Check before you load real records, not after.
As a working demonstration, usually yes. Under technical due diligence, less often. Technical reviewers look for database structure, permission enforcement and test coverage — precisely what AI tools skip. Finding out during diligence costs considerably more than finding out now.
Performance usually degrades before anything breaks outright. AI-generated schemas rarely include indexes beyond primary keys, so queries that were instant at 100 rows crawl at 100,000. Concurrent actions can also produce duplicate reference numbers where no database constraint prevents it.
Usually not. Most of what we find is configuration and structure rather than the application logic itself, and that is fixable without starting again. A rewrite is occasionally cheaper, but that should come out of an assessment rather than an assumption.
It depends on what is wrong. Our audit is a fixed price, agreed before we start, and it tells you exactly what needs doing and what it will take. If you then ask us to do the work, the cost of the audit comes off the bill in full. Establishing the scope is the cheap part.
It can, once the permission model is enforced in the database and secrets are out of client-side code. Automated scanners will catch some of it. They cannot tell you your permission logic sits in the wrong layer, or that your schema does not match how your business works. That needs a person to read the code.
No. We need the code, which you can export to a GitHub repository from Lovable and share with us, and ideally read-only access to the Supabase project so we can inspect the database schema and the row level security policies. We do not need to log into Lovable itself, and we will not change anything in your application.
Usually not, and we have no incentive to. A Lovable application that has a sensible data model and a couple of security gaps is worth fixing, and fixing it is cheaper than rebuilding it. The cases where we recommend starting over are the ones where the database design cannot support what the business actually needs — and in those cases we will show you why rather than asking you to take it on trust. The report says what we found, including the parts that are fine.
For some things, yes, and where that is the sensible route the report will say so. The difficulty is that you have to know precisely what to ask for. Asking a generator to "make it secure" tends to produce code that looks more secure without necessarily being so, and you have no independent way of checking. The audit exists to tell you exactly what is wrong and in what order it matters, which is the part that is hard to get from the tool that wrote it.
No, and we would rather say so plainly than pretend otherwise. We build with Claude Code and Cursor, with senior developers designing the system, reviewing every change and testing it. What makes us useful here is not Lovable expertise, it is that Lovable produces React, TypeScript and PostgreSQL — which is what we have been building and fixing for years.
You get the written report within five working days of us having access to the code. Most Lovable applications are small enough that we are quicker than that. If we find something serious enough that you need to act on it immediately, we tell you as soon as we see it rather than waiting for the report.
We audit what these tools produce, whichever one you used.
Tell us roughly what the application does and how many people use it. If an audit is not the right thing for you, we will say so.
What the report covers:
We reply within one working day.