A security checklist for apps built with AI.
Last reviewed October 16, 2026 against the providers' current documentation.
The short version
Before launch, make sure no secret key is in your browser code, every database table or collection is protected by rules, no .env or .git file is downloadable, production source maps are off, and your site is served over HTTPS. Each item below links to a step-by-step fix.
Why it matters
AI app builders are good at making things work and less careful about who else they work for. The same mistakes come up again and again: a secret key pasted into frontend code to get past an error, a database left open so a page would load, a build setting left on. None of them show up when you use your own app, but all of them are visible to anyone who looks.
Fix it, in this order
No secret keys in the browser
Anything in your frontend JavaScript is public, including values fromVITE_…,NEXT_PUBLIC_…andEXPO_PUBLIC_…variables. Keys that can spend money or reach private data (Stripe secret keys, OpenAI and Anthropic keys, the Supabase service_role or secret key) belong on a server. Fix guides: Supabase service_role key, Stripe secret key, OpenAI key.Know which keys are meant to be public
The Supabase anon or publishable key, the Firebase web config and the Stripe publishable key are designed to be in your frontend. They're only safe when the database rules behind them are right. See Is the Supabase anon key safe?Supabase: Row Level Security on every table
Every table in thepublicschema needs RLS turned on, sensible grants, and a policy for each operation the app performs. See Supabase RLS disabled.Firebase: no test-mode rules
Firestore rules that sayif true, only check a date, or only check that someone is logged in leave your data open. See Firestore test mode rules.No .env or .git files on your site
Open/.envand/.git/HEADon your live domain in a private window. Neither should download. See .env file exposed and .git folder exposed.Production source maps off
Public.mapfiles hand out a readable copy of your frontend code. See Source maps exposed.HTTPS and basic security headers
Serve the site only over HTTPS and sendStrict-Transport-Securityso browsers keep using it. AContent-Security-Policylimits which scripts can run, andX-Content-Type-Options: nosniffplus framing protection (frame-ancestorsorX-Frame-Options) close off a few more tricks. Most hosts let you set these in their config file.
Or ask your AI tool to do it
Paste this into Lovable, Bolt, Cursor, Claude Code or whichever tool built your app. Review what it changes before you deploy.
Do a pre-launch security review of this app and report back before changing anything. 1) List every API key or secret referenced in client-side code or in VITE_, NEXT_PUBLIC_ or EXPO_PUBLIC_ variables, and say which are meant to be public (Supabase anon/publishable, Firebase web config, Stripe publishable) and which must move to the server. 2) If the app uses Supabase, list every table in the public schema with its RLS status, grants and policies. 3) If it uses Firebase, show the current Firestore and Storage rules and flag any that allow access with if true, a date check, or request.auth != null alone. 4) Check that no .env file or .git folder can end up in the deployed output, and that production source maps are off. 5) List the security headers the site sends and propose HTTPS, Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options and frame-ancestors settings for our host. Then fix the items I approve, one at a time.
How this happens
Each tool makes the same trade: get it working first. When something fails, the fastest fix is often to remove a safety check rather than add the right permission. A checklist before launch catches what those shortcuts leave behind.
Run the outside checks in 20 seconds
The free check covers the items on this list that are visible from outside: secret keys in your JavaScript, .env and .git files, source maps and security headers. It also names the Supabase or Firebase project your app uses so you know which rules to review.
Check my app freeQuestions
Does this checklist apply to Lovable, Bolt, v0, Replit and Cursor apps?
Yes. The checks are about what your deployed app exposes, not which tool wrote it. Some items, like Supabase RLS or Firestore rules, apply only if your app uses that backend.
Is passing the free check the same as being secure?
No. The free check reads what any visitor's browser can see: keys in your JavaScript, .env and .git files, source maps and headers. It can't see your database rules or server code. A clean result means none of these problems were visible from outside; it isn't a full security audit.
Sources
- Supabase: Row Level Security
- Supabase: Understanding API keys
- Firebase: Fix insecure rules (Cloud Firestore)
- Vite: Env variables and modes
- MDN: Strict-Transport-Security
- MDN: Content Security Policy (CSP)