Security

How to Vet a Lovable-Built App Before Real Users

Your Lovable app runs fine in the demo. Here's what its scan actually catches, what a real CVE proved it misses, and the checklist to run before real users show up.

July 28, 202613 min read

Author
Hussein Janoowala
Head of Delivery | Data & AI

Key Takeaways

  • A 2025 disclosure, CVE-2025-48757, found 10.3% of a 1,645-project sample of live Lovable apps had Supabase tables fully readable by unauthenticated requests, due to missing or misconfigured row level security.
  • Veracode tested 100+ LLMs across 80 coding tasks and found AI-generated code introduces OWASP Top 10-class vulnerabilities in 45% of tests, with no improvement in newer models, so this risk is not unique to Lovable.
  • Joylo's Expert Assist connects a named in-house engineer within 24 hours for a fixed $500 for 10 architect hours to run the manual review an automated scan does not.

This guide is for: Founders and technical leads about to put a Lovable-built app in front of real users who want to know exactly what Lovable's automated scan checks, what it misses, and what to verify first.

In this article
Step 1

What Does Lovable's Own Security Tooling Actually Check?

Lovable runs three automated checks on every build: RLS Analysis, a Database Security Check, and a Basic or Deep code scan. These catch missing policies and known vulnerability patterns, but per Lovable's own documentation they were never built to replace a human security review.

Security overview - Lovable Documentation describes RLS Analysis as policy linting: it flags a table with zero row level security policies, not whether the policy that exists actually restricts access correctly. The Database Security Check reviews schema and RLS together to catch obvious gaps, and the Basic code scan looks for a fixed set of known patterns.

Deep scan goes further and checks for code-level vulnerabilities and authentication gaps that Basic scan skips, but a reader has to turn it on. Joylo's own AI Confidence Score runs a similar automated audit, scalability, security, reliability, integrations, and code quality, on every build and every plan by default, and flags uncertain code before it ships. Automated scanning like this is the floor on any AI builder, not the review itself.

Checkpoint: you should now know the three checks Lovable runs automatically and that none of them is described by Lovable itself as a substitute for a human review.

Step 2

Is a Passing Scan the Same Thing as a Secure App?

No. Lovable's own documentation states its automated scans cannot guarantee complete security, and the Basic scan specifically does not check improper input handling, weak authorization, or exposed credentials, the exact category of flaws OWASP's Top 10:2025 treats as the baseline risks in any web application.

A table can show a green RLS check while its policy body still reads something like USING (true), which satisfies the linter but leaves every row open to anyone holding the project's public key. Policy linting confirms a rule exists. It does not confirm the rule actually restricts who can read or write a row, and that judgment call is exactly what an automated scanner is not built to make.

Red flags: a table with a policy that evaluates to true for every operation, an app that has never run the Deep scan, and any endpoint that accepts a request without checking who sent it. If any of those describe the app in front of you, the scan passed but the review has not happened yet.

This is the exact gap a human review closes. Joylo's own security audit runs automatically on every plan and every build, but the deeper check, reading a policy body line by line and calling endpoints directly to see what actually happens, is a Co-Build or Expert Assist deliverable, not something any AI builder's automated scan does on its own.

Checkpoint: you should now be able to tell the difference between a policy that exists and a policy that actually works, and know which one Lovable's Basic scan confirms.

Step 3

What Actually Happened the Last Time This Went Untested?

In May 2025, independent security researcher Matt Palmer disclosed CVE-2025-48757: 10.3% of a 1,645-project sample of live Lovable apps, 303 endpoints across 170 projects, had Supabase tables fully readable by unauthenticated requests. The cause was missing or misconfigured row level security, not a stolen password or leaked API secret.

That sample is not a hypothetical worst case. It is a documented count of live, deployed Lovable apps that founders had already put in front of real users, where a working demo and functioning login screen had nothing to do with whether the underlying database was actually locked down.

If this fails: a table found exposed after launch means real user data was already reachable, not just theoretically at risk. The fix is adding the missing RLS policy, but that does not undo whatever a stranger already queried while the table was open, which is why this check belongs before real users, not after.

In the rescue passes Joylo's engineers run on apps that already shipped, a missing or overly permissive RLS policy is one of the first things checked, precisely because it is this common and this easy to miss without a second set of eyes on the schema.

Checkpoint: you should now have a real, cited number for how often this exact gap shows up in live Lovable projects, not a guess.

Recommended reading8 Hidden Risks of Deploying a Vibe-Coded AppYour app worked perfectly in the demo. Here's what actually breaks once real users, real money, or real data show up, and how to catch it first.
Step 4

Can Anyone See My Lovable Project's Data Just by Finding the URL?

Potentially, yes, but not because of a leaked secret. Supabase's public anon key is exposed by design, since the app's own frontend needs it to talk to the database. What actually determines whether a stranger can read your data is whether every table has an explicit RLS policy attached, per the CVE-2025-48757 disclosure.

Anyone who finds a Lovable project's anon key, which is visible in the browser by design, can query the database directly with any tool that speaks Postgres over Supabase's client library. If a table has no RLS policy, or a policy that does not meaningfully restrict access, that query succeeds regardless of what the app's own login screen shows.

If this fails: rotating the anon key does nothing here, since a new key is exposed the same way the old one was. The fix is confirming every table has an RLS policy that actually restricts rows to the right user, checked table by table, not assumed because the app looks locked down.

Joylo's AI Confidence Score flags an unprotected table as part of its automated security domain, on every plan, before the build ships. What it does not do on a self-serve plan is read the policy body for correctness the way an in-house engineer does under Expert Assist, which is the step that actually confirms the table is safe, not just flagged.

Checkpoint: you should now know that project visibility is a per-table RLS question, not a secrets question, and be able to check your own tables against it.

Step 5

Is This a Lovable Problem or an AI-Generated-Code Problem?

It is broader than Lovable. Veracode tested 100+ large language models across 80 coding tasks and found AI-generated code introduced OWASP Top 10-class vulnerabilities in 45% of tests, with no meaningful improvement in newer or larger models. The same review gap applies regardless of which builder produced the app.

That 45% figure held across every model size Veracode tested, which is the detail that matters here: this is not a bug a newer or bigger AI eventually fixes on its own. Replit and Bolt.new generate code the same prompt-driven way Lovable does. Replit routes stuck builds to community forums, and Bolt.new leans on its own community and freelancer network, the same structural pattern as Lovable, with no in-house engineer checking the output before real users arrive.

What can go wrong: treating this as switch builders and the risk goes away is the mistake. Reviewing AI-generated code applies the same static analysis, dynamic testing, and manual review controls used for any codebase; the AI origin changes where the findings concentrate, not the fact that a review is needed.

Joylo runs its AI Confidence Score's security and code quality audits on every plan and every build for exactly this reason, since the OWASP-class risk in AI-generated code does not depend on which builder produced it.

Checkpoint: you should now be able to explain, with a cited figure, why this check applies to any AI-built app, Lovable included but not Lovable alone.

Recommended readingWho's Liable When an AI Agent Deletes Your Database?A Cursor agent wiped a real company's production database in nine seconds. Here's who actually foots the bill when it happens to you, and how to keep it from happening at all.
Step 6

What Should You Actually Check Before Real Users Touch the App?

Run four checks before launch: confirm every table has an explicit RLS policy that actually restricts rows, run Lovable's Deep scan instead of stopping at Basic, search the codebase and client bundle for hardcoded credentials, and confirm every protected endpoint rejects an unauthenticated request when called directly.

1. Open each Supabase table and read the RLS policy body, not just whether a policy exists. A policy of true or USING (true) is functionally no policy at all. 2. Turn on Deep scan in Lovable's security settings and read every finding, since Basic scan does not check input handling, authorization, or exposed credentials. 3. Grep the repository and the browser network tab for API keys or tokens pasted directly into code instead of stored as environment variables. 4. Call each protected endpoint directly, bypassing the app's UI, using a logged-out or lower-permission account, to confirm it actually rejects the request.

What can go wrong: skipping the direct-endpoint test is the most common shortcut, because the UI hiding a button feels like enough. It is not; the backend has to reject the request on its own.

A founder without a security background can run checks 1 through 3 with a text editor and a few hours. Check 4 is the one most teams skip, since it means writing a small script or using an API testing tool to call the endpoint directly rather than clicking through the app, and it is also the check that catches the access-control gap most often found in a rescue.

When Joylo's engineers open a rescue pass, the first thing they check on a flagged table is whether the RLS policy's USING clause actually references auth.uid() rather than evaluating to true, since that one clause is what separates a policy that restricts access from one that only looks like it does.

Checkpoint: you should now have a written pass or fail on each of the four checks, not a general impression that the app seems fine.

Step 7

When Do You Bring In a Human Instead of Trusting the Scan?

Bring in a human review before any app touching real user data, payments, or authentication goes live, since Lovable's own documentation recommends exactly that for apps handling sensitive data, and the NIST AI Risk Management Framework frames a structured check before deployment as standard practice, not overcaution.

On Joylo's self-serve plans a human does not review code until Expert Assist is purchased; on Co-Build plans an engineer is engaged by default. Expert Assist is a strong fit for a founder about to launch a Lovable-style app on their own, since it connects a named in-house Forward Deployed Engineer within 24 hours, runs on a fixed $500 for 10 architect hours, and ends with a production-readiness check and a deployment-ready app, not just a list of findings.

What can go wrong: waiting until after a launch to book a review means any exposure already happened during the gap. Reading each table's RLS policy body, running Deep scan instead of stopping at Basic, checking for hardcoded credentials, and calling protected endpoints directly catches the same class of issue CVE-2025-48757 documented, but a human review catches what a checklist run once by a founder tends to miss on a second pass.

Checkpoint: you should now know which review path matches your plan, and have a specific trigger, sensitive data, payments, or auth, for when to stop trusting the scan alone.

What Are the Most Common Mistakes When Vetting a Lovable App's Security?

The most common mistake is treating a green RLS check as proof the table is locked down, when it only confirms a policy exists, not that the policy restricts anything meaningful. The FTC's Start with Security guide expects businesses collecting user data to build in access controls before launch, not discover the gap afterward.

A second mistake is stopping at Basic scan because it is the default, without ever turning on Deep scan or knowing what Basic does not check. A third is assuming a rotated Supabase key fixes an exposure, when the anon key is exposed by design and RLS is the actual control. A fourth is testing only through the app's own UI instead of calling protected endpoints directly, which is how a hidden admin button gets mistaken for an enforced permission.

A fifth, and the one that costs the most time later, is running the review after the app already has real users instead of before, which turns a checklist into an incident response.

Joylo's engineers see the same handful of gaps repeat across rescue engagements: a green RLS check next to a policy that does not actually restrict anything, and a founder who tested only through the app's own screens instead of calling the API directly. Neither takes long to fix once someone actually looks.

When Does This Pre-Launch Security Check Need to Change?

This checklist needs to expand once the app adds a new data source, a payment processor, or a second user role, since each of those introduces a new place RLS policies or authorization checks can be missing. A single-table app with one user role carries far less risk than one with admin, paid, and free tiers touching the same data.

It also needs to repeat, not just run once, any time Lovable's AI generates a new feature, since a new table or endpoint can ship without the same RLS policy the rest of the app has. Growing past a handful of tables and endpoints is usually the point where a manual pass by a founder stops scaling and a Co-Build plan's included architect hours, or a recurring Expert Assist engagement, becomes the more realistic way to keep this current.

Regulatory or compliance requirements change the bar too. An app moving from a personal side project to one handling payment data or operating in a regulated industry needs a review scoped to that requirement specifically, not the general four-check pass in Step 6.

Traffic growth changes what a review has to cover as well. The four checks in Step 6 assume a codebase small enough for one person to read in an afternoon; once an app has enough tables and endpoints that no single person can hold the whole schema in their head, that is the signal to move from a one-time self-check to a recurring review, whether that is a quarterly Expert Assist pass or the ongoing hours a Co-Build plan already includes.

What Do Real Pre-Launch Security Checks Look Like in Practice?

A two-person team building a booking app in Lovable spent an afternoon reading each table's RLS policy body, running Deep scan, checking for hardcoded credentials, and calling protected endpoints directly the week before launch, found one table with a USING (true) policy left over from an early prototype, fixed it, and launched on schedule with no paid review.

A solo founder with no engineering background found the same class of gap but did not trust their own read of the policy syntax, so they used Expert Assist to have a named engineer confirm the fix and check the rest of the schema within the 24-hour window. A small B2B team building a Lovable app that stores customer contract data took a different path: given the sensitivity of the data, they treated a manual pass as insufficient and moved to a Co-Build plan, where an engineer's included hours cover this kind of review as new features ship, not as a one-time pre-launch event.

All three teams ran the same underlying check, whether every table's RLS policy actually restricts access. What changed was who ran it and how often, based on what the app touches and who is available to read a policy body correctly.

Frequently asked questions

Do I need a security review before showing a Lovable app to real users?

Lovable's own documentation recommends an additional professional review for any app handling sensitive data, since its automated scans state plainly that they cannot guarantee complete security. For apps touching payments, auth, or personal data, that recommendation is the starting point, not an optional extra.

Does Lovable's automated scan catch everything before I launch?

No. Basic scan does not check improper input handling, weak authorization, or exposed credentials, and RLS Analysis confirms a policy exists rather than whether it actually restricts access. Deep scan closes some of that gap but still is not described by Lovable as a substitute for a human review.

How secure are Lovable apps compared to hand-coded apps?

Veracode's testing found AI-generated code introduces OWASP Top 10-class vulnerabilities in 45% of cases across 100+ models, so the risk is higher across AI-generated code generally, not unique to Lovable. CVE-2025-48757 showed that risk playing out concretely, with 10.3% of a sample of live Lovable projects exposing data through missing RLS policies.

Can someone read my Lovable app's database if they find the project URL?

Potentially, if a table lacks an explicit row level security policy, since Supabase's public anon key is exposed by design and is not the actual security boundary. The real control is whether each table's RLS policy restricts access correctly, which is what CVE-2025-48757 identified as missing across a meaningful share of live projects.

Is this a Lovable-specific risk or does it apply to any AI app builder?

It applies broadly. Veracode's report tested over 100 models and found no builder or model size was meaningfully safer, and Replit and Bolt.new share the same prompt-driven code generation pattern that produces this class of gap. Lovable's specific exposure mechanism was row level security, but the underlying need for a human review applies to any AI-generated app.

Written by

Hussein Janoowala
Head of Delivery | Data & AI

Hussein is Head of Delivery, Data & AI at Joylo, with 8+ years building and shipping software. He leads the team that turns AI-built apps into production-ready systems founders can trust. His focus is engineering accountability: making sure what ships actually holds up under real users and real traffic.

Ready to ship?

Ready to experience the Joylo difference?

Build with AI. If it gets stuck, a named engineer is in your codebase within 24 hours. Every app ships with a written production guarantee behind it.

No credit card required
Start in 30 seconds
GDPR-ready, enterprise-grade security