AppInspected

Web app security check for apps built with AI

Built your app with Lovable, Bolt, v0, Replit or Cursor? Paste its address and see the security mistakes AI tools ship most, the way a stranger would see them. Free, about 20 seconds, no sign-up.

Free. No sign-up. We only read what your visitors' browsers already read.

Passive and read-only. Works with any public site, including apps built with Lovable, Bolt, v0, Replit, Cursor, Windsurf and Claude Code.

AppInspected
App
Waiting for your address
Checked
–
Critical issues
–
Not checked yet
Your result fills in this tag. Nothing is stored.

Why apps built with AI need their own check

AI app builders are very good at getting an app working. They are less careful about who else it works for. The same handful of mistakes comes up again and again in apps made with Lovable, Bolt, v0, Replit, Cursor and Claude Code, and almost all of them are visible to anyone who opens the browser's developer tools:

  • A secret key pasted in to get past an error. The page couldn't read a table, so the AI swapped in the database key that ignores every rule. It worked, so it shipped.
  • A "hidden" key in an environment variable. Variables starting with VITE_, NEXT_PUBLIC_, REACT_APP_ or EXPO_PUBLIC_ are copied into the JavaScript your visitors download.
  • AI and payment APIs called straight from the browser. The demo called OpenAI or Stripe from the page; the demo became the product.
  • Build leftovers. Source maps switched on for debugging, a .env file in the publish folder, a whole project folder deployed with its .git history.

Most of these apps are single-page apps that talk to Supabase or Firebase directly from the browser, so the JavaScript bundle is where the keys live. That's what this check reads.

What we check in your app

Secret keys in your bundle
We read your page, its scripts from your own domain and the code chunks they load (up to 25 files), and look for Stripe, OpenAI, Anthropic, AWS, GitHub, Slack, SendGrid, Resend and Twilio keys, private keys and database URLs with a password.
Supabase keys, decoded
Supabase's legacy keys are tokens with a role inside. We decode them: service_role is critical, anon is fine. New-style sb_secret_ keys are critical, sb_publishable_ keys are fine.
Firebase and Google keys
A Firebase web key is meant to be public, so it's marked fine with a reminder about Firestore rules. A Google API key with no Firebase config around it is flagged so you can check its restrictions.
Exposed files
/.env and /.git/HEAD, flagged only when they return real file contents and not your app's fallback page.
Readable source code
Whether the source map your main bundle points to can be downloaded.
HTTPS and headers
HTTPS, Strict-Transport-Security, Content-Security-Policy, framing protection and X-Content-Type-Options.

It works on any public address: *.lovable.app, *.bolt.host, *.vercel.app, *.netlify.app, *.replit.app, Firebase Hosting and your own domain.

Example result

Example free check result: two critical findings (a Supabase service_role key and a Stripe secret key in the JavaScript, both shown cut short), and a medium finding for public source maps, each with a link to a step-by-step fix guide.
A made-up app with a Supabase service_role key and a Stripe secret key in its JavaScript. Keys are always shown cut short.

Web app security scanners vs. this check

Classic web app security scanners such as OWASP ZAP or Burp Suite are active: they crawl every form and send attack payloads to look for injection and cross-site scripting. They're powerful, but they need setup, create junk data and should only ever be pointed at an app you own, ideally a staging copy.

This check is passive. It reads what your app already sends to every visitor and nothing more, so it's safe to run on a live app in 20 seconds. The trade-off is coverage. It can't tell you:

  • whether your Supabase tables have Row Level Security, or your Firestore rules are out of test mode (Supabase RLS disabled, Firestore test mode rules);
  • whether your API routes check who's logged in;
  • whether admin or paid features are only hidden in the browser rather than enforced on the server;
  • anything about mobile app binaries (iOS or Android). It checks web apps only.

The $19 website security report covers the middle two from the outside: it reads up to 40 of your app's JavaScript files for admin and paywall checks that only run in the browser, prices sent from the browser to checkout and AI APIs called directly, and it can add database tests for Supabase or Firebase using your own test accounts.

How to fix what it finds

  1. Rotate any leaked secret first

    Create a new key in the provider's dashboard and turn the old one off. Deleting it from your code isn't enough: copies of your old JavaScript are already out there. Step-by-step: Supabase service_role key exposed, Stripe secret key exposed, OpenAI API key in your frontend.
  2. Move the call to a server

    Whatever needed the secret key (payments, AI requests, admin database access) belongs in a server function: an API route, an Edge Function or a serverless function. Read the key from a server-only environment variable, never one starting with VITE_, NEXT_PUBLIC_, REACT_APP_ or EXPO_PUBLIC_.
  3. Take exposed files offline

    Remove .env and .git from what you deploy, then rotate every secret they held: .env file exposed, .git folder exposed. Turn off production source maps: source maps exposed in production.
  4. Add the missing headers

    Copy the config for your host from our security headers check page. Missing headers are hardening, so do them after any leaked key.
  5. Run the check again

    Deploy, then paste the same address above. A clean result means none of these problems is visible from outside any more.

Going through it before launch? The security checklist for AI-built apps has every step in one place, with a prompt to paste into your AI tool.

Keep it fixed

AI tools change a lot of code at once, so a key can come back with the next prompt. These plans pick up where the free check stops.

Website security report

$19 one time

For any website you own: a read-only review of up to 30 pages and 40 JavaScript files (found through your build manifest, routes and sitemap), app logic in the browser (admin and paid-feature checks, prices sent from the browser, AI APIs called directly), headers, cookies and CORS, domain and email records, libraries with known vulnerabilities, forgotten files and third-party scripts, with fixes written for your host. Optional database tests for Supabase or Firebase. Requires proof you own the site.

Get the report See an example report

Badge + daily monitoring

$9 per month

We repeat the outside checks every day and email you when something changes: a new key in your JavaScript, a removed header, a new third-party script, a certificate about to expire. Includes a live badge and one full website report every 30 days.

How monitoring works

Questions

Is my AI-built app secure?

Nobody can promise that from a single scan. What you can do quickly is rule out the mistakes that cause most real incidents in AI-built apps: secret keys in the browser, open database rules, exposed .env or .git files and public source maps. The check above covers the ones visible from outside; your database rules need a separate look.

Does it work with mobile apps?

It checks web apps: anything with a public web address. It doesn't analyze iOS or Android app files. If your mobile app also has a web version (for example an Expo web build), you can check that.

Will the check slow down or break my app?

No. It makes about as many requests as one visitor loading your page, plus a few small requests for well-known files. It never submits forms or writes data.

My app shows a login screen first. Can you still check it?

Yes. Single-page apps usually ship most of their JavaScript to the login page, so keys in the main bundle are still found. Code that only loads after login may not be read; the website security report follows your build manifest and routes to find code chunks the home page doesn't load.

Lovable and Bolt already have a security scan. Do I need this?

Their scans look at your project from the inside before you publish. This check looks at the published app from the outside, which also catches changes made outside the builder, custom domains and keys added after the scan ran. Use both.

Does it check my API routes?

No. It doesn't call your API or test its login checks. It reports what the browser can see. Testing who can call which endpoint needs access to your code, or an active test with your permission.

More free checks and guides