for apps built with Bolt

Built it with Bolt?
Let's check what it shows strangers.

Bolt builds in the browser and ships to Netlify or Bolt's own hosting, usually with Supabase behind it. Fast, and easy to publish something you did not mean to. We check the live app, and its code if it is on GitHub, and hand you prompts Bolt understands.

Free for one app. No card, no install.

what usually goes wrong

Where Bolt apps leak

Secret keys in the bundle

Vite builds every VITE_ variable into the JavaScript. A Stripe secret key or the Supabase service_role key in there is a key anyone can use.

live app: secret keys in the built JavaScript

AI called straight from the browser

Asking Bolt for "an AI feature" can produce code that calls OpenAI from the page itself. That only works by shipping your key to every visitor.

live app: AI SDK called from the browser

No safety headers by default

Out of the box, a static deploy sends none of the headers that tell browsers to be careful. One prompt adds a _headers file with HTTPS-only, frame protection and a content policy.

live app: HSTS, CSP, X-Frame-Options

Supabase tables without RLS

When Bolt wires up Supabase, the anon key goes in the front end, which is fine only if every table has Row Level Security. If your project is on GitHub, we read its migrations and flag the tables that do not.

repo: Supabase migrations without RLS

the fix is a prompt

Worded for Bolt

The most urgent thing we find in Bolt apps, and the prompt that comes with it:

criticalsecrets.supabase-service-role

Supabase service_role key exposed in your public JavaScript

The service_role key skips every RLS rule. With it, anyone can read, change or delete all of your data.

key
eyJhbGciOi…Qx4 (role: service_role)
found in
/assets/index-a71c03de.js

Rotate the service_role key in your Supabase project settings too: the old one has been public.

Paste into Bolt click to select

Security fix: my Supabase service_role key is in the front-end code.
Remove it from every front-end file and from any VITE_ environment variable. The front end must only use the anon key.
Anything that really needs service_role access should move into a Supabase Edge Function that reads the key from Supabase secrets. List every place you changed.

then rescan to confirm it is gone

verify your app

Proving it is yours, on Bolt

Bolt projects are Vite apps, and Vite copies the public folder into the build as-is, so the file proof works on Netlify, on bolt.host and on a custom domain.

  • Paste the prompt into Bolt. We give you yours, with your own token, when you add the app.
  • Deploy again so the file is in the live build.
  • Custom domain on Netlify? Verify that address. A DNS TXT record works there too.
Paste into Bolt click to select

Add a site verification for VibeProtect. Create the file public/.well-known/vibeprotect.txt containing exactly this single line:
vibeprotect-verify=3kQ9xZr1VbN0aT7mYw2cLp8e
Also add this tag inside <head> in index.html (or the root layout's metadata):
<meta name="vibeprotect-verification" content="vibeprotect-verify=3kQ9xZr1VbN0aT7mYw2cLp8e" />
Do not change anything else.

Your real token is in the app once you add it. The file ends up at /.well-known/vibeprotect.txt.

questions

Bolt questions

My Bolt app is on Netlify. Which address do I add?

The one people visit: your .netlify.app address, your .bolt.host address, or your custom domain. Each is a separate app to us, because each is a separate place someone could find a problem.

Can you scan the code too?

Yes, if the project is on GitHub. Connect the repo on a paid plan and we scan it for committed keys, vulnerable packages, Supabase migrations without RLS and risky code patterns.

Do you touch my Supabase project?

No. We never connect to it. The live scan looks at what your site sends to visitors, and the repo scan reads your migration files. Nothing is ever written anywhere.

See what your Bolt app is showing strangers.

One app is free, no card. The hardest part is asking Bolt to add a file.