AIChecklist
daLæs på danskLovable Supabase Security Checklist: 9 Things to Check Before Launch
A Lovable Supabase security checklist for launch: 9 checks covering RLS policies, API keys, auth, storage, backups and GDPR basics for EU apps.

Freelance full-stack developer
- Published
- Reading time
- 8 min
In this post8
Before you launch a Lovable app, run nine checks, from Row Level Security and secret keys to auth settings, backups and account access. This Lovable Supabase security checklist focuses on the backend, where most serious leaks in Lovable apps happen. Full disclosure: I help founders take AI-built apps to production, so factor that in when I suggest getting help.
The short answer: nine checks
Lovable and Supabase pre-launch security checklist
- RLS everywhere: every table in the public schema has Row Level Security enabled.
- Policies tested: two test accounts can't read, edit or delete each other's data.
- No bypasses: views respect RLS, and no security definer functions are exposed by accident.
- Private files stay private: sensitive uploads live in private buckets with policies.
- Secrets server-side: only the publishable or anon key ships to the browser.
- Rules in the backend: payment status, credits, roles and prices can't be changed from the client.
- Auth ready for production: correct Site URL, exact redirect URLs, your own SMTP, sane password rules.
- Backups proven: automatic backups are on, and you've done a test restore.
- Access locked down: 2FA on every account, code synced to GitHub, project in the right region.
If you only have an hour, do checks 1, 2 and 5. The rest of the path to real users is in my guide to taking a vibe-coded app to production.
Why the Supabase setup is where Lovable apps leak
A Lovable frontend talks straight to Supabase from the user's browser, using a publishable (or legacy anon) key that anyone can read in your JavaScript. Supabase's API key documentation calls that key safe to expose, on one condition: Row Level Security decides what it can do. Without RLS, anyone holding the key can read and write the table.
In 2025, researcher Matt Palmer scanned 1,645 Lovable-built sites and found exposed data in 170 of them, logged as CVE-2025-48757. Lovable now runs a security scan before you publish, but its own docs say the tools can't guarantee complete security. A scanner can tell you a policy exists. It can't tell you whether "any logged-in user can read all invoices" is what you meant. For problems beyond Supabase, see my list of common security issues in vibe-coded apps.
Who can read your data: checks 1-4
1. RLS is on for every table
Open the Security Advisor in your Supabase dashboard. Any table it flags with RLS disabled needs fixing before launch, including the "unimportant" ones like waitlists and feedback, which usually hold email addresses. Re-run it before every release, since new features can add tables. RLS with no policies blocks all API access, which is the right default.
2. Your policies do what you think
These mistakes pass every click-through test:
- A policy letting any authenticated user select all rows. With open sign-up, "authenticated" means anyone with an email address.
- Insert or update policies whose
with checkclause doesn't verify ownership, so users can write rows owned by someone else. - A role or is_admin column on the profiles table that users can update themselves.
- Policies based on user_metadata, which users can edit.
Test with two accounts: sign in as user A, call the API directly, and try to fetch, change and delete user B's rows. If that sounds like a foreign language, an hour of developer time pays for itself here.
3. Views and functions don't bypass RLS
Postgres views run with their creator's permissions by default, so they skip RLS. Supabase's RLS guide recommends setting security_invoker = true on views. Functions declared security definer in the public schema are callable through the API and run with the owner's rights. The Security Advisor flags many of these.
4. Private files are in private buckets
Anyone with the URL can read files in a public Storage bucket. That's fine for product photos, not for invoices, contracts or passport scans. Use private buckets with policies, for example limiting each user to a folder named after their user ID, and restrict file types and sizes.
What must never live in the browser: checks 5-6
5. Secret keys stay on the server
The service_role or secret key bypasses all RLS. It must never sit in frontend code, your GitHub repo or Lovable's chat. The same goes for Stripe secret keys and LLM API keys, which belong in Edge Function secrets or Lovable's Secrets tool.
Open your published app with Chrome DevTools and search all loaded files for sb_secret, sk_ and sk-. With legacy keys (they start with eyJ), compare against the API settings in Supabase: the one in your code must be the anon key. If a secret has leaked, rotate it now. It stays in your git history even after you delete it.
6. Business rules are enforced in the backend
Users can change anything that runs in their browser. If credits or a "has paid" flag are only checked in React, anyone can skip the check by calling the API. Move those rules into database constraints, RLS policies or an Edge Function. Payment status should only change through a Stripe (or similar) webhook with a verified signature.
Sign-in, backups and access: checks 7-9
7. Auth is configured for real users
Supabase Auth ships with defaults meant for development:
- The Site URL defaults to
http://localhost:3000. Change it, or confirmation and reset emails will break. - Use exact redirect URLs in production rather than broad wildcards.
- The built-in email sender is for testing and only delivers to your team, so set up your own SMTP provider.
- Require at least 8 characters, and turn on leaked password protection if you're on Pro.
- If the app is invite-only, disable open sign-ups.
8. Backups exist, and you've restored one
According to Supabase's backup docs, the Free plan has no automatic backups. Pro keeps daily backups for 7 days, Team for 14. Point-in-Time Recovery is an add-on starting at around $100 a month. Storage files aren't included, and a restore means downtime.
My rule of thumb: once you have paying customers or data you can't recreate, be on Pro at minimum and rehearse a restore into a separate project. On Lovable Cloud, you'll find backups and restores in the Database section inside Lovable.
9. Access, ownership and region
- Turn on 2FA for Lovable, Supabase, GitHub, Stripe and your domain registrar. No shared logins.
- Sync the code to GitHub so you own it outside Lovable.
- Keep a separate test project, since Lovable changes the database of whichever project the app is connected to.
- Serving European customers? Choose an EU region such as Frankfurt or Stockholm when you create the project.
- Watch the Supabase logs during launch week.
When you can do this yourself
Small app, few tables, no payments, no sensitive data? The Security Advisor, Lovable's scan and two test accounts get you most of the way.
Get help when you handle payments, team accounts with different roles, B2B customer data or health and financial information. Those mistakes rarely show up in a scanner. My signs it's time to hire a developer can help you decide.
And the honest counterpoint: if the app is an investor demo or a test with fake data, spend your money finding out whether anyone wants the product, not on a security review. If the foundation won't hold, see my guide on whether to rewrite or refactor a vibe-coded app.
Next steps
- Run the Security Advisor and Lovable's scan, and fix everything flagged as an error or critical.
- Test your policies with two accounts, and confirm only public keys ship to the browser.
- Turn on backups and work through the rest of the checklist before opening sign-ups.
If you'd like a developer for the last mile, here's how I help founders move AI-built apps safely into production. You work directly with me, and you own the code from day one.
Frequently asked questions
Do I need a penetration test before launching a Lovable app?
Rarely as the first step. A configuration and policy review catches the issues that typically hit Lovable apps, and it usually costs less. A penetration test becomes worthwhile when you handle sensitive data or sell to larger companies whose security questionnaires ask for one.
Does this checklist apply to Lovable Cloud and Bolt?
Mostly, yes. Lovable Cloud is built on Supabase, so the same principles apply, even though the settings live inside Lovable rather than in the Supabase dashboard. If you build with Bolt or another tool on top of Supabase, all nine checks apply.
What should I do if user data has already been exposed?
Close the hole first: enable RLS or tighten the policies, and rotate any keys that might have leaked. Then check the Supabase logs quickly, since they're only kept for a limited time. If personal data was exposed, GDPR may require you to notify your data protection authority within 72 hours. Talk to a legal adviser about your specific case.