We classified 400+ real posts from Lovable, Bolt, Replit, Cursor, Claude Code and v0 builders by what actually broke. Here is the test protocol, in the order the failures show up, split into what you can check yourself and what needs a developer.
The fastest way to check whether a vibe coded app is safe to launch is the two-account test: sign up as two users and try to see the other one’s data. That single check targets the failure behind 60% of the 400+ security posts we classified from Lovable, Bolt, Replit, Cursor, Claude Code and v0 builders over the last 12 months (see our guide to building a SaaS with Cursor and Claude for the build side). Exposed API keys came second at 43%.
Every checklist ranking for this topic lists the same risks in the same order and says, in so many words, that the order is not measured. We measured it. We pulled 900+ Reddit posts from builder communities, kept the 400+ that were about the security of the builder’s own app, and sorted them into nine failure types. Then we checked the result against 99,000+ negative app-store reviews and 273,000+ Capterra reviews from our database of 1M+ real complaints.
This page is the pre-launch test protocol. It is not an architecture guide. If your app is already broken in production, start with vibe coding SaaS problems and how to fix them. If you already know you need help, read how to hire a developer to fix your vibe coded project. If you want to know whether the app is worth securing at all, read do vibe coded apps make money.
The rest of this page shows how we ranked the checks, what each one looks like in practice, what the builders who hit each failure said, and where our data is weak.
We searched Reddit on September 25, 2026 across r/lovable, r/vibecoding, r/cursor, r/Supabase, r/replit, r/boltnewbuilders, r/ClaudeCode, r/SaaS and r/v0_, plus a sitewide search for vibe coding security terms. After de-duplicating by post we had 900+ posts. We kept a post only if it came from a builder community and its title, or at least three distinct security terms in its body, were about security. That left 400+ posts.
Each post was then tagged with every failure type it described, using keyword rules for nine classes: database access control, exposed secrets, broken authentication and authorization, abuse and rate limits, payments and webhooks, injection, dependencies, storage, and headers. A post can carry several tags, so shares add up to more than 100%. About 80% of posts matched at least one class. The full method is in the methodology section.
This is the same approach we use for our state of SaaS pain points report: count distinct complaints, not opinions about complaints. It is how complaint analysis works across the whole BigIdeasDB warehouse, and it is the same kind of pull our Reddit pipeline builder automates. For the manual version, see Reddit market research.
| Rank | Failure type | Posts | Share (all 400+) | Share (plain “security” search) | Checks |
|---|---|---|---|---|---|
| 1 | Database access control (RLS, Firebase rules, other users’ data) | 230+ | 59.8% | 19.0% | 1, 2, 5, 10, 11 |
| 2 | Exposed secrets and API keys | 170+ | 42.8% | 35.9% | 3, 9, 12 |
| 3 | Broken authentication and authorization | 80+ | 21.8% | 16.4% | 1, 4, 13 |
| 4 | Abuse, rate limits and runaway bills | 80+ | 21.5% | 25.1% | 7, 15 |
| 5 | Payments and webhooks | 50+ | 14.8% | 14.9% | 6, 14 |
| 6 | Dependencies and known CVEs | 40+ | 12.0% | 7.7% | 17 |
| 7 | Injection and unsanitised input | 40+ | 11.5% | 11.3% | 16 |
| 8 | Public storage and file uploads | 30+ | 8.3% | 6.2% | 8, 18 |
| 9 | Headers, CORS and source maps | 20+ | 7.3% | 7.2% | 19 |
The order lines up with the professional standard. The OWASP Top 10:2025 puts Broken Access Control at A01, Security Misconfiguration at A02 and Software Supply Chain Failures at A03. What our data adds is the vibe coding specific shape of it: the access control failure is almost always a database policy, and the misconfiguration is almost always a key in the browser.
The builder posting on r/lovable a month ago captured why this matters before launch, not after:
“Saw someone test the security toggle and even after turning it on, a normal logged-in user could still see other peoples orders, profiles and change store settings.” – r/lovable
The ranking depends on how you look. Across all 400+ posts, database access control leads by a wide margin. Among the 190+ posts found by a plain “security” search, exposed secrets lead at 35.9% and database access drops to 19.0%.
Part of that is our search design: we searched r/Supabase for RLS terms, which inflates the database share. Part of it is real. Keys are the failure people talk about in general terms, because anyone can understand a leaked password. RLS is the failure people only discover when they go looking. Either way, both are in the top two in every cut we ran, so both are non-negotiable before launch.
“ai gets stuff working fast, but i dont really trust it to catch things like auth issues, exposed keys, db rules/rls, server-side checks, rate limiting, etc unless i explicitly ask.” – r/vibecoding
Notice the order that builder listed. It matches our top four almost exactly. For how these failures fit the broader set of problems AI-built products run into, see our analysis of web developer pain points and our complaint explorer.
We re-ran the split on the 130+ posts from the last 90 days. The top two did not move, but secrets gained ground.
| Failure type | 12 months | Last 90 days | Direction |
|---|---|---|---|
| Database access control | 59.8% | 57.7% | Flat |
| Exposed secrets and keys | 42.8% | 48.2% | Up |
| Authentication and authorization | 21.8% | 21.2% | Flat |
| Abuse and rate limits | 21.5% | 17.5% | Down |
| Dependencies and CVEs | 12.0% | 14.6% | Up |
| Payments and webhooks | 14.8% | 12.4% | Down |
| Headers, CORS, source maps | 7.3% | 10.2% | Up |
We counted 40+ builder security posts in the last 30 days alone. Google Trends points the same way at lower volume: worldwide interest in “supabase rls” peaked in the week of June 14, 2026 at an index of 14 and sits at 2 now, while “vibe coding” itself holds at about half its March 2026 peak. Fewer people are learning RLS from scratch. More are shipping.
The main gap in existing checklists is that they mix “open an incognito window” with “write per-operation policies with pgTAP tests” in one list. A non-coder stalls at item four. So we split them. If you built without code, as in our guide to building a SaaS without code, the first nine checks are yours. They tell you whether you have a problem. The last ten are how a developer fixes it.
| # | Check | Who | Targets | Time |
|---|---|---|---|---|
| 1 | Two-account test | Anyone | Database access, authorization | 15 min |
| 2 | Logged-out incognito test | Anyone | Database access | 5 min |
| 3 | Search live JavaScript for keys | Anyone | Secrets | 10 min |
| 4 | Guess your own admin URLs | Anyone | Authorization | 5 min |
| 5 | Read the security advisor, then distrust it | Anyone | Database access | 10 min |
| 6 | Test-mode pay, cancel, refund | Anyone | Payments | 15 min |
| 7 | Hammer your own signup and AI forms | Anyone | Abuse, bills | 5 min |
| 8 | Open an upload link logged out | Anyone | Storage | 5 min |
| 9 | Check whether a key was ever committed | Anyone with repo access | Secrets | 10 min |
| 10 | Per-operation RLS, grants revoked, tested | Developer | Database access | Hours |
| 11 | Views, security definer functions, user metadata | Developer | Database access | 1-2 hours |
| 12 | Secrets server-side and rotated | Developer | Secrets | 1-2 hours |
| 13 | Server-side authorization on every route | Developer | Authorization | Hours |
| 14 | Verified, idempotent webhooks | Developer | Payments | 1-3 hours |
| 15 | Rate limits and spend caps | Developer | Abuse, bills | 1-2 hours |
| 16 | Input validation, parameterized queries | Developer | Injection | Hours |
| 17 | Dependencies and known CVEs | Developer | Supply chain | 1 hour |
| 18 | Storage policies and Firebase rules | Developer | Storage, database | 1 hour |
| 19 | Headers, CORS, source maps | Developer | Misconfiguration | 1 hour |
A backend engineer who rescues these apps for a living put the split bluntly:
“The crazy part is that 70% of what I end up fixing is stuff the founder could have checked themselves in an afternoon before they ever needed me.” – r/nocode
Everything on this page is for testing an app you own or are explicitly authorized to test. Never run these checks against someone else’s app. Four ground rules:
If you are still deciding what to build, do the demand work first. Securing an app nobody wants is wasted effort. Our guide to validating a SaaS idea before coding and the startup idea validation checklist cover that step. So does how to validate a startup idea, and how small your MVP should be is worth reading before you add features that each need securing.
Targets: database access control and authorization, the number one and number three failures. Who: anyone.
Pass: B sees nothing of A’s and cannot change anything of A’s. Fail: anything leaks. Do not launch. Hand checks 10, 11 and 13 to a developer. If you have no technical partner, our guide to building a startup without a technical co-founder covers where to find one.
This is the check experienced builders reach for first:
“The first security test I run on a Lovable app only needs two accounts” – r/lovable
“Ask Lovable to show every RLS policy, but verify the result with the second account.” – r/lovable
We counted 30+ posts in the sample recommending a second-account, logged-out or incognito test. It is the most repeated piece of practical advice in the whole dataset, and the reason it is check number one here.
Targets: database access control. Who: anyone.
Open your live app in an incognito window without logging in. Visit every page you normally see when logged in, using the direct URLs. Watch whether data appears, even briefly, before a redirect.
“lazy way: open your live app logged out and see if your data still loads.” – r/vibecoding
“If you get rows back without logging in, so does everyone else.” – r/Supabase
Pass: every private page redirects to login with no data flash. Fail: any private data renders. A page that redirects after showing data is still a fail, because the data already reached the browser. A weekend launch is exactly when this gets skipped.
The worst version of this failure is the one a Supabase builder described after reviewing a single MVP:
“I could see every user’s email, payment status, and home address.” – r/vibecoding
Targets: exposed secrets, the number two failure. Who: anyone.
sk_live, sk-, service_role, secret, api_key and whsec_.Expected: a Supabase anon or publishable key, a Firebase config and a Stripe publishable key (pk_) are designed to be public. Fail: any secret, service role, live payment secret or AI provider key.
“Everything I found was accessible with a normal browser and basic DevTools knowledge.” – r/vibecoding
“But a service_role key in there means anyone who opens DevTools has full database access.” – r/lovableThe environment variable file does not save you if the build step inlines the value into client code. On most frameworks, any variable with a public prefix ends up in the browser bundle. That is why check 3 looks at the live site, not the code. A good micro SaaS boilerplate separates public and server-only variables for you.
Targets: broken authorization. Who: anyone.
Logged out, then logged in as an ordinary user, visit /admin, /dashboard, /debug, /settings, /internal and any admin page you remember the AI building.
“Hiding the ‘Admin Dashboard’ button in your UI doesn’t stop someone from typing your-app.com/admin or your-app.com/dashboard.” – r/vibecoding
“The AI adds /debug or /admin while building and nobody removes it.” – r/vibecoding
Pass: admin pages refuse ordinary users and logged-out visitors, and the data behind them refuses too. Fail: the page loads, or the page is blank but its data request still returns rows. A hidden button is not a permission.
Targets: database access control. Who: anyone with dashboard access.
Open your builder’s security scan and, if you use Supabase, the Security Advisor in the database section of the dashboard. Fix everything that says RLS is disabled. Then repeat check 1 anyway, because the advisor answers a narrower question than you think.
“Lovable’s Security Scan checks if RLS exists, not if it’s restrictive.” – r/lovable
“After checking a pile of Lovable/Bolt-built Supabase apps, the same three things keep coming up, and Security Advisor is green on all of them because RLS is enabled” – r/Supabase
Scanners are worth running. They catch the missing-RLS case cleanly. They cannot know whether User B should see User A’s order, because that is a business rule. See what scanners miss below.
Targets: payments and webhooks. Who: anyone.
“Checkout was working, but billing also needed webhooks, retries, duplicate-event protection, subscription states, refunds, and access control.” – r/vibecoding
Your users see this failure from the other side. In our app-store data, 110+ negative reviews describe paying and not getting access:
“I have upgraded my account and paid but still asking me to upgrade i dont understand” – App Store review
If any step misbehaves, hand check 14 to a developer. If you are still choosing a payment stack, our guide to building a SaaS with Next.js, Supabase and Stripe covers the setup, and the Stripe integration page covers how BigIdeasDB reads Stripe data. Failed and unprocessed payments are also a leading cause of why SaaS customers churn, and SaaS pricing strategies covers the plan design your webhook has to enforce.
Targets: abuse, rate limits and runaway bills. Who: anyone.
Submit your own login form with a wrong password ten times fast. Submit signup ten times with different fake emails. Submit any AI-powered feature twenty times in a row. Watch whether anything slows you down, and watch your AI provider’s usage page.
“7 out of 8 had no rate limiting on login.” – r/vibecoding
“i keep seeing posts like ‘my AWS bill jumped to $40k overnight’ or ‘my API key got stolen it was literally hardcoded’ and it’s just painful to watch.” – r/vibecoding
This class ranks second (25.1%) in the plain security search because the damage is so visible: a bill. Our guide to AI agent cost control covers the spend side, and AI SaaS pricing models shows why every free AI action is a cost you carry.
Targets: public storage. Who: anyone.
Upload a private file as User A: an avatar, a receipt, a document. Copy its link. Paste it into an incognito window. If it loads, your storage is public, whatever your table policies say.
“However, I managed to create a public storage bucket for the receipt images. Of course a bot found it.” – r/Supabase
Storage is only 8.3% of posts, but it is the one failure where a builder who did everything else right still gets caught, because table RLS and storage policies are separate systems.
Targets: exposed secrets. Who: anyone with access to the repository.
If your project lives on GitHub, turn on secret scanning in the repository’s security settings. On public repositories GitHub’s secret scanning runs for free and scans the entire git history on all branches. Any key that was ever committed counts, even if you deleted it the next minute.
“If you accidentally commit .env even once, your database credentials live in git history forever and can be found publicly on GitHub.” – r/lovable“Rotate every secret you have ever pasted into an AI tool.” – r/VibeCodersNest
Fail: any live secret in history. Rotate it with the provider first. GitHub notes that removing secrets from history is time-intensive and often unnecessary once the credential is revoked. Rotation is the fix; scrubbing is optional.
For a developer. This is the fix behind a failed check 1, 2 or 5, and the single highest-value item on the list.
anon and authenticated, then grant back only what each role needs.select, insert, update and delete. Name the role with to authenticated.with check on insert and update so a user cannot create or reassign a row to someone else.The Supabase Row Level Security documentation is explicit that a table in an exposed schema without RLS is readable and writable by any role with a grant, and that adding policies does not take the default grants back. It also says that until the test suite passes, you do not know whether the policies do what you intended.
The failure builders hit here is not missing RLS. It is RLS that does nothing:
“I had tables where policies were enabled but the conditions were too permissive, anyone with the anon key could read other users’ data.” – r/lovable
“Your RLS SELECT policy is hiding the fact that your UPDATE policy is wide open” – r/Supabase
“The ‘profiles’ table had RLS enabled (good!), but the UPDATE policy was too broad.” – r/lovable
That last pattern is worth a specific test: can a user update their own plan, role or credits column? If a user can write to the row that decides whether they have paid, the paywall is decorative.
For a developer. Three Supabase-specific traps that survive a correct-looking policy set, all documented by Supabase:
security_invoker = true, or keep them out of exposed schemas.search_path.raw_user_meta_data can be rewritten by the user it is meant to restrict. Store roles in app metadata instead.Also check how policies behave when auth.uid() is null for a logged-out request. Supabase recommends an explicit auth.uid() IS NOT NULL check so intent is clear.
For a developer. The fix behind a failed check 3 or 9.
Supabase’s documentation says to never use a secret key in the browser or expose it to customers. The trap is how the key gets there. Builders describe the same sequence again and again:
“You hit an RLS/permission error, ask AI to ‘fix it,’ it suggests the service role key in the client.” – r/lovable
When a permission error appears, the right fix is almost always a policy, not a more powerful key. Our guide to building with Cursor and Claude covers prompting for that. For a stack that keeps keys server-side by default, compare the options in our roundup of Next.js SaaS boilerplates and our guide to a starter kit with auth, payments and a database.
For a developer. The fix behind a failed check 1 or 4 when the app has its own API routes or edge functions.
“Supabase authentication and Supabase authorization are two different things.” – r/vibecoding
“Authentication was working, but then I had to think about authorization and whether every user could access only their own data.” – r/vibecoding
OWASP lists Authentication Failures at A07:2025 and Broken Access Control at A01:2025. In AI builds the second is far more common, because login is usually handled by a provider and works, while the per-record check is left to generated code. Our guide to building a SaaS covers where authorization belongs in the architecture.
For a developer. The fix behind a failed check 6.
Stripe-Signature header, the raw request body and your endpoint secret.“The webhook endpoint that updates user subscriptions probably isnt verifying the Stripe signature.” – r/lovable
Real payment flows are not rare in this cohort. In our Stripe Index of 30,000+ companies listed in Stripe’s public directory, 430+ run their product on a builder or hosting subdomain such as lovable.app, replit.app, bolt.host, vercel.app or netlify.app. Those are live merchants taking money through generated code. Our Stripe Index database guide explains how the directory is built, and the Stripe Index MCP tools let you query it from your agent.
For a developer. The fix behind a failed check 7.
Your users notice abuse before you do. In our app-store data, 110+ negative reviews complain about fake accounts, spam and bots:
“Too many fake profiles and bot-generated fake messages.” – App Store review
For a developer. Injection appears in 11.5% of posts. Lower than the top five, but still one in nine.
OWASP places Injection at A05:2025. The AI-specific risk is that generated code often trusts the frontend for validation because the frontend is where the prompt described the rule.
For a developer. Dependencies rose from 12.0% of posts over the year to 14.6% in the last 90 days.
OWASP moved Software Supply Chain Failures to A03:2025. Coding models can suggest packages that do not exist or are misnamed, which is why “verify the package is real” belongs on a pre-launch list. It is also one of the first things a buyer checks, as our SaaS acquisition due diligence checklist shows.
For a developer. The fix behind a failed check 8, and the Firebase equivalent of check 10.
Firebase’s guide to insecure rules warns that open rules let anyone who guesses your project ID steal, modify or delete data, and that rules checking only for a logged-in user give any logged-in user access to everything.
“Firebase rules left on allow read, write: if true, including the console’s 30 day test mode” – r/Supabase
For a developer. The smallest class at 7.3%, but it rose to 10.2% in the last 90 days.
The most common emotional note in the dataset is not fear of hackers. It is not knowing whether to believe the tool.
“AI says its fixed, tests pass, and then im still wondering if users can see each others data, some api route is open, or a secret got shipped in the frontend.” – r/cursor
“I’m pretty close to launching a small SaaS with Lovable and ngl the security part is making me nervous.” – r/lovable
A coding model verifies that the feature works. Security is about whether a forbidden action fails. Those are different tests, and a fix that makes an error disappear can do it by opening the door wider. One experienced auditor described why the output is hard to eyeball:
“AI writes insecure code that looks like it was written by a senior engineer.” – r/vibecoding
The practical rule: after any security fix, re-run the specific non-coder check that failed. Our help guide on how to verify AI agent work covers the general habit, and Claude Code for founders covers working with an agent that writes most of your code. Even careful builders feel the limit:
“I review everything that’s being generated, but I don’t have 10+ years of production software experience to instinctively spot subtle security flaws, edge cases, or architectural weaknesses.” – r/cursor
We found 20+ posts describing a scanner, advisor or built-in toggle showing green while data stayed reachable. Scanners are also the most common thing builders post about: 30+ posts in the sample are someone launching their own scanner or audit tool.
“It’s honest but shallow, and a clean surface scan is not a clean bill of health.” – r/lovable
“My RLS checker printed OK on a table that hands every row to every authenticated user” – r/Supabase
What an automated scan can and cannot tell you:
| Tool | Good at | Cannot tell you |
|---|---|---|
| Builder security scan | Whether RLS is enabled, obvious exposed keys | Whether a policy actually blocks another user |
| Supabase Security Advisor | RLS disabled, risky functions and views | Business rules (who should see which row) |
| External surface scanner | Keys in bundles, headers, public files | Anything behind login |
| Secret scanning on your repo | Known key formats in git history | Keys that never touched the repo |
| Dependency audit | Known vulnerable packages | Whether your own code is safe |
| Your two-account test | Whether the forbidden action fails | Routes you forgot to try |
Run the automated tools. Then run the manual checks. Only the manual ones ask the question that matters: can a stranger do what they should not?
The US National Vulnerability Database entry for CVE-2025-48757, published May 30, 2025, describes insufficient database Row Level Security policies in Lovable-generated sites through April 15, 2025, allowing remote unauthenticated reading or writing of database tables. It carries a CVSS 3.1 base score of 9.3 (critical) and is classed under CWE-863, incorrect authorization.
The entry is tagged as disputed. The supplier’s position, recorded in the NVD text, is that each customer of the platform is responsible for protecting their own application’s data. We are not taking a side. For a builder about to launch, both readings end in the same place: nobody else is going to verify your database policies for you.
That is why check 10 includes policy tests and why check 1 exists at all. A platform can change defaults. It cannot know your business rules.
Builders describe causes. Users describe symptoms. We searched 99,000+ negative reviews (three stars or fewer) in our app-store database of 136,000+ reviews for the symptoms these failures produce.
| What users report | Negative reviews | Likely cause | Check |
|---|---|---|---|
| Verification code or password reset never arrives | 230+ | Auth email flow, deliverability | 6, 13 |
| Unauthorized or duplicate charges | 170+ | Payment logic, retries | 6, 14 |
| Fake accounts, spam and bots | 110+ | No rate limits or signup checks | 7, 15 |
| Account hacked or compromised | 110+ | Weak auth, no rate limits | 7, 13, 15 |
| Paid but access not unlocked | 110+ | Webhook not processed | 6, 14 |
| App sells or shares my data | 50+ | Privacy practices | n/a |
| Data breach or leak | 40+ | Access control, storage | 1, 8, 10 |
Seeing someone else’s data is rare in reviews, only a handful of cases, but it is unambiguous when it happens:
“I tried to play the game but it keeps syncing me to someone else’s profile... the company refused to fix the issue.” – App Store review
“Users’ daily goal checkins are public by default, and they CANNOT retroactively change that data to private.” – App Store review
“First I never received the verification code in my email, I tried three times.” – App Store review
For the wider picture of what mobile users complain about, see our state of mobile app pain points report and the guide to analyzing app store reviews. Our roundup of app store review analysis tools compares ways to do it.
If you sell to businesses, security is also a sales question. In 273,000+ Capterra reviews in our Capterra dataset, the cons field mentions security 1,300+ times, user permissions and roles 550+ times, and two-factor authentication, MFA or single sign-on 340+ times. Audit logs come up 70+ times.
“The lack of 2FA is a concern.” – Capterra review
“Role-based access control could be more granular.” – Capterra review
“The user roles and permissions felt too restrictive, and that adding new agent groups necessitated using multiple separate admin panels.” – Capterra review
Across 9,400+ G2 insights, 490+ raise security or permissions and 190+ raise permission levels or roles specifically. The pattern is consistent: business buyers want roles, 2FA and a record of who did what. Those are features, and they sit on top of the access control work in checks 10 and 13. Our guides to Capterra analysis and G2 analysis show how to pull these for your own category, and competitor analysis for SaaS shows how to turn them into a feature list.
Money has flowed to making apps faster than to making them safe. In our database of 17,000+ funded companies, 170+ describe AI coding, app building or no-code products. 40+ describe application security, code security or vulnerability testing. Only one explicitly targets securing AI-generated code.
The revenue side is small but real. Of 8,600+ revenue-verified startups in TrustMRR, 130+ run on a builder or hosting subdomain, and roughly one in nine of those earned revenue in the last 30 days. Our guide to making money vibe coding breaks down why subdomain-hosted apps earn less, and do vibe coded apps make money has the full revenue picture. Security is part of it: buyers notice.
Builders see the gap too. The same r/SaaS thread that argued security is not the biggest problem conceded the point:
“The leaked keys and open endpoints are real but security is a known category of problem.” – r/SaaS
Known category means checkable. That is the good news, and the reason a list like this one works. If you are hunting for product ideas in this gap, our vibe coding project ideas and funded startups database guide are the places to start. Our analysis of what no-code SaaS actually sells for shows how buyers price these apps, and no-code SaaS ideas lists where the demand is.
Copy this into your launch doc. Every box must be ticked or explicitly marked not applicable with a reason.
You can run these (about an hour):
sk_live, sk-, service_role, whsec_ or other secret.A developer confirms these:
Passing the checklist is the floor, not the finish. Once you have users, work through our vibe coded app production checklist for backups, environments and monitoring. For the first week after launch:
If you are timing the launch itself, our guides to where to launch your startup and how to get your first 100 SaaS users cover what comes next, along with finding your first SaaS customers. Launch traffic is exactly when a missing rate limit gets found.
Hire help before launch, not after, if any of these are true:
Hand the developer this page, your failed-check screenshots and access to a staging copy. Our guide to hiring a developer to fix a vibe coded project covers scoping and cost, and our roundup of vibe code rescue services covers who does it. For larger rebuilds, see our list of MVP development agencies. If you are weighing whether to start over, read buying vs building a SaaS.
“Rotate the key in the Supabase dashboard before anything else, then audit your query logs for requests that shouldn’t have come from your application.” – r/Supabase
“deleting the code doesn’t help, the old bundle was already scraped.” – r/vibecoding
Reddit sample. On September 25, 2026 we ran keyword searches (security, RLS, row level security, API key, leaked, exposed, auth, webhook, service role, penetration test and similar) in r/lovable, r/vibecoding, r/cursor, r/Supabase, r/replit, r/boltnewbuilders, r/ClaudeCode, r/SaaS and r/v0_, plus one sitewide search for vibe coding security phrases, mostly over a 12-month window. We de-duplicated by post, giving 900+ posts.
Relevance filter. We kept posts from builder communities whose title contained a security term, or whose body contained at least three distinct security terms. That gave 400+ posts: r/vibecoding (90+), r/Supabase (70+), r/lovable (60+), r/SaaS (40+), r/cursor (40+), r/ClaudeCode (30+), r/replit (20+) and r/boltnewbuilders (10+), with a few from smaller builder subreddits.
Classification. Each post was tagged by keyword rules into nine non-exclusive classes. Shares are the share of posts carrying each tag. The “plain security search” frame repeats the count for the 190+ posts retrieved by generic security phrases only, to reduce the bias from searching directly for RLS. We spot-checked random samples from each of the top three classes by hand.
Warehouse sources. App-store, Capterra, G2, funded-company, Stripe directory and revenue figures come from read-only SQL against BigIdeasDB on September 25, 2026, using regular-expression matches on review text or company descriptions. Counts are rounded down with a plus sign; percentages are exact. Quotes are verbatim and attributed to platform or subreddit only. We did not scan, test or name any third-party app.
| Source | What it contributed | Limitation |
|---|---|---|
| Reddit builder posts (400+ classified) | Failure-type frequency, quotes, 90-day trend | Keyword-retrieved sample, not a census. RLS-specific searches inflate the database share. Posts by scanner vendors and auditors are over-represented. |
| App-store reviews (99,000+ negative) | User-visible symptoms of security failures | Consumer mobile apps, not specifically AI-built. Regex matching misses paraphrase and catches some unrelated uses. |
| Capterra reviews (273,000+) | B2B buyer expectations: permissions, 2FA, audit logs | Established software, not vibe coded apps. Coverage decays alphabetically by category. |
| G2 insights (9,400+) | Security and permission complaints | AI-summarised insights, not raw reviews. Undated. |
| Funded companies (17,000+) | Builders vs security company counts | Keyword match on descriptions. Funding amounts not used. |
| Stripe Index (30,000+) | Merchants on builder or hosting subdomains | Subdomain hosting is a proxy for AI-built, not proof. Custom domains are invisible to this cut. |
| TrustMRR (8,600+ startups) | Revenue share of subdomain-hosted startups | Small subgroup. Skews to indie products. |
| Google Trends | Direction of interest in RLS and vibe coding | Relative index only, never a search volume. Low-volume terms are noisy. |
| NVD, OWASP, Supabase, Stripe, Firebase, GitHub | Standards, CVE facts, vendor guidance | Vendor documentation changes. Checked September 25, 2026. |
The ranking measures how often builders talk about each failure, not how often each failure exists in deployed apps. A failure that is easy to notice, like a surprise bill, will be over-reported relative to one that stays silent, like an open UPDATE policy nobody has tried. That bias probably understates database access problems, which is one more reason to keep them at number one.
The sample leans toward Supabase-backed builders because r/Supabase and r/lovable are large and because we searched them for RLS terms. Builders on other backends face the same failure shapes under different names, which is why Firebase rules sit in the same class.
We looked for demand signal in Upwork job posts and found 20+ jobs mentioning AI builders and none mentioning securing them, too few to publish (our guide to validating SaaS demand with Upwork jobs explains that dataset). Hacker News returned nothing relevant in its best-stories feed on the day. We logged both gaps rather than stretch them.
BigIdeasDB holds 1M+ real complaints from Reddit, app stores, G2, Capterra and Upwork, plus revenue data on 8,600+ startups and 30,000+ Stripe merchants. Check what breaks for users in your category before you ship.
See BigIdeasDB plans →BigIdeasDB does not scan your app. It tells you what users in your market already complain about, which is where most security and reliability expectations come from. For researching what to build and what buyers will demand of it, here is how the options compare:
| Rank | Tool | Best for | Evidence |
|---|---|---|---|
| 1 | BigIdeasDB | Real complaints, revenue and buyer expectations by category | 1M+ complaints, 8,600+ revenue-verified startups, 30,000+ Stripe merchants |
| 2 | Claude | Reviewing your own code and policies with you | Your code, not market data |
| 3 | ChatGPT | Explaining a security concept in plain language | General knowledge |
| 4 | Raw Reddit | Reading individual builder threads | Unstructured, one thread at a time |
| 5 | Google Trends | Direction of interest in a topic | Relative index only |
Start with the pain points database, run a concept through the idea evaluator, or connect the data to your coding agent with the BigIdeasDB MCP server. The idea validation guide and pain points database guide show the workflow. The idea evaluator guide and MCP setup guide cover the rest. If you are building from a template, the Micro SaaS Boilerplate ships with auth, payments and a database wired together.
Run the two-account test first: sign up as two different users in two browsers and try to see or change the other user's data. Then open your app logged out in an incognito window, search your live site's JavaScript for secret keys, guess your own admin URLs, and run a test payment, cancel and refund. Those five checks need no coding and cover the failures that show up most often in real builder posts.
Broken database access control. In 400+ security posts from builder subreddits over the last 12 months (as of September 2026), 60% described Row Level Security, Firebase rules or users seeing each other's data. Exposed API keys and secrets came second at 43%, and first (36%) among posts found by a plain 'security' search.
Not necessarily. RLS being enabled only means policies are checked. A policy written as 'using (true)', an UPDATE policy that is wider than the SELECT policy, or a view that bypasses RLS can leave data open with RLS switched on. Supabase's own documentation notes that adding policies does not remove the default grants. Test with two accounts, do not trust the toggle.
Create two ordinary user accounts, A and B. Log in as A in one browser and B in another (or an incognito window). As B, try to open A's pages, records, orders or settings, including by changing IDs in the URL. If B can see or edit anything that belongs to A, your authorization is broken and you should not launch.
Open your live site, open the browser developer tools, go to the Sources or Debugger tab and search the loaded JavaScript for strings like sk_live, sk-, service_role, secret and api_key. A publishable or anon key is expected in the browser. A secret, service role or live payment key is not. If you find one, rotate it with the provider first, then move it server-side.
The anon or publishable key is designed to be public, but it is only safe when every exposed table has RLS enabled, correct policies and trimmed grants. The service role or secret key bypasses RLS entirely and must never reach the browser. Supabase's documentation says to never use a secret key in the browser or expose it to customers.
Use it, but do not treat a green result as a pass. Builders on Reddit repeatedly report that platform scanners check whether RLS exists, not whether it actually blocks another user. We counted 20+ posts describing a scanner or advisor showing green while data stayed open. A clean scan plus a failed two-account test means you are not ready.
CVE-2025-48757, published in the US National Vulnerability Database on May 30, 2025, describes insufficient Row Level Security policies in Lovable-generated sites through April 15, 2025, rated 9.3 critical under CVSS 3.1. The supplier disputes it, saying each customer is responsible for their app's data. Either way, the lesson is that database policies are your job to verify before launch.
Not for every app. If you store only emails and a free-tier product, the 19 checks here plus a developer review of the database policies are a reasonable bar. If you handle payments beyond a hosted checkout, health, financial or children's data, or B2B customer records, pay for a developer review or a scoped test before launch.
Verify every webhook with the Stripe-Signature header and your endpoint secret before acting on it, use the raw request body, and make the handler idempotent so a repeated event does not grant access twice. Then run a real test-mode flow: subscribe, confirm access unlocks, cancel, confirm access ends, refund, confirm the status changes.
Rotate or revoke the key with the provider immediately. Deleting it from your code does not help, because old bundles and git history keep it. Then check the provider's usage and billing for activity you did not cause, move the key to a server-side environment variable, and redeploy. GitHub's documentation notes that rotating the credential matters more than scrubbing git history.
Because a coding model checks that the feature still works, not that a forbidden action is blocked. A fix that makes the permission error disappear can do it by widening a policy or moving a secret key into the client. Only a test of the forbidden action, such as the two-account test, proves the fix.
Yes, on three endpoints at minimum: login, signup and anything that calls a paid AI model or API. Abuse, spam and runaway bills appear in 22% of the security posts we classified and 25% of those found by a plain security search. One scripted client can burn an AI budget overnight.
No. The failure is the same shape. Firebase's own documentation warns against rules that allow open access or that only check 'auth != null', which lets any logged-in user read and write everything. Test mode rules left in place are the Firebase equivalent of a missing RLS policy.
Writing and testing per-operation RLS policies, auditing views and security definer functions, moving secrets server-side, adding server-side authorization to every route and edge function, verifying webhook signatures, adding rate limits, validating input, updating vulnerable dependencies and setting storage rules and headers. The non-coder checks tell you whether these are needed.
The nine non-coder checks take about an hour on a small app. The developer checks take anywhere from an afternoon to a few days, depending on how many tables, routes and integrations the app has. Budget for the second part before you announce a launch date.
From 900+ Reddit posts pulled on September 25, 2026 across builder subreddits and classified into nine failure types, plus BigIdeasDB's warehouse: 99,000+ negative app-store reviews, 273,000+ Capterra reviews, 9,400+ G2 insights, 17,000+ funded companies, 30,000+ Stripe directory companies and 8,600+ revenue-verified startups, within a corpus of 1M+ records.
BigIdeasDB Research. (2026). Vibe Coded App Security Checklist: 19 Pre-Launch Checks, Ranked by Real Failures. BigIdeasDB. Retrieved from https://bigideasdb.com/vibe-coded-app-security-checklist