Preflight

Proof, not config

Check your AI‑built app before strangers do.

Free scan of what any stranger can see. Then the Proof Suite: a second user on your live app, proving what they can read, change or charge you for.

Sample Preflight run on a synthetic demo app

Before launch · demo app

demo-notes.app
  1. Secret keys in JS bundle None found
  2. Security headers 2 missing
  3. User A reads B's notes Proof Report Fail · 214 rows RLS is on and a policy exists. It just doesn't hold. Fix ready.
  4. User A upgrades own plan Proof Report Fail · allowed
  5. AI endpoint without sign-in Proof Report Blocked
  6. Forged payment webhook Proof Report Rejected
Sample run · demo app · synthetic data
A pilot's gloved hand shines a flashlight along an aircraft wing at dawn during a preflight walk-around.

Pilots walk around the plane before every flight. Do the same before every launch.

16,326

Supabase databases with readable tables; over half showed indicators of personal data.

UpGuard, Sep 2026

The Proof Suite

Included in the $29 Proof Report

Config checks tell you a policy exists. These tests show whether it holds. Each one runs on your own verified project, only as the two throwaway test accounts you create, and only on rows those accounts made. You opt in test by test, and we clean up afterwards.

  1. Can user A read user B's data?

    Signs in as A and tries to read B's rows across every exposed table, storage bucket and database function. Catches “any signed-in user reads everything” policies, and flags open sign-up that turns “signed in” into “anyone”. Counts only, never row contents.

  2. Can they change it, or promote themselves?

    Tries to insert, update or delete B's rows, reassign a row's user_id, or set their own is_admin, plan or credits. Only on test-account rows, inside a rollback, then cleaned up.

  3. Can a stranger run up your AI bill?

    Finds AI endpoints that answer without sign-in or without a per-user limit. Each probe is one tiny, harmless request under a strict cap.

  4. Will your app accept a forged payment?

    Sends an unsigned and a wrongly signed test event to the webhook endpoint you declare, and checks it's rejected. Stripe, Creem, Polar and Lemon Squeezy formats.

  5. Do your edge functions check who's calling?

    Calls each discovered function with no credentials and with the wrong user's credentials, and reports which ones answer anyway.

Test logins are encrypted at rest, used only during the scan, and deleted when it finishes. The cross-user tests are Supabase-first; Firebase is next if enough of you ask for it. Each test goes live only after it passes on our deliberately broken demo apps.

The free scan

The basics every launch needs. They run outside-in (what anyone on the internet can see of your deployed app), after you prove you own the domain. Several are also covered free by your platform's own tools, and you should use those too.

Leaked secrets in your bundle

Stripe secret keys, OpenAI and other AI provider keys, AWS keys, Supabase service-role keys and similar, shipped to the browser. Always masked in reports.

Security headers

Content-Security-Policy, HSTS, frame options, CORS, and cookie flags (Secure, HttpOnly, SameSite), with the exact lines to add for your host.

Exposed files and routes

Public .env and .git, backup files, source maps, and debug or admin routes left open.

Auth and sign-up settings

Sign-ups without email confirmation, anonymous sign-ins, open sign-up where you didn't mean it, public storage buckets.

Known-vulnerable libraries

Front-end libraries we can identify in your bundle, matched against public CVEs.

TLS and email DNS

Certificate expiry and HTTPS setup, plus SPF and DMARC so nobody can easily send email as your domain.

Open databases (Firebase too)

Supabase tables readable without signing in, and Firestore or Realtime Database rules open to the world. The free scan shows how many tables are exposed; which ones, and the fix, are in the Proof Report.

Signs of unprotected webhooks

Payment webhook routes we can spot from outside. Proving they reject forged events is part of the Proof Suite.

What config checks can't show

how they differ

Use your platform's built-in checks. They're free and good. Supabase's Security Advisor lints your database configuration, and Lovable's security scans review your project's settings and code. Both read how things are set up. Neither signs in to your live app as two users and tries things. That's the part Preflight adds:

  • Policies that look fine but don't hold. A select policy like auth.uid() is not null lets every signed-in user read every row. Supabase's always-true lint doesn't flag select policies (see its source), and no config check knows your sign-up is open.
  • What a user can change or charge. Self-granted plan or credits, forged payment events, AI endpoints with no limit, edge functions that skip auth. Shown by trying them, on test rows only.
  • Your deployed site, in one report. Headers, exposed files, bundle secrets, TLS and email DNS live on your host, outside your database and editor. Same report whichever tool built the app.

Some other scanners test parts of this too, for example signed-in checks on URLs you list, or attacks on a copy of your database rebuilt from migrations. Preflight runs the whole Proof Suite against your live project, self-serve, in minutes.

Four steps, no code upload

No repo access, no agent to install, never your service key.

  1. 1

    Paste your URL

    Preflight reads what any browser can see: your pages, JavaScript bundles, response headers, certificate and DNS.

  2. 2

    Prove it's yours

    Add a DNS TXT record or a meta tag. Nothing is scanned until ownership is verified. That rule applies to us too.

  3. 3

    Opt in to the proofs Proof Report

    Create two throwaway test accounts, declare your webhook endpoint if you have one, and tick the tests you want. Skip this and the free scan still runs.

  4. 4

    Paste the fix

    Every finding shows how we know, then gives you an exact fix (SQL, header lines or config) and a ready prompt for your AI tool. Re-run to confirm it holds.

A finding looks like this

This is a sample from a demo app we broke on purpose. Real reports have the same shape: what failed, how we know, and what to paste. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them. Fixes are suggestions: back up and test before you apply them.

Emergency · Cross-user read

sample · demo-notes.app

Test user A read 214 of test user B's notes

Criticaltable public.notespolicy "notes_select" · auth.uid() is not nullrows read: count only

RLS is on and notes has a select policy, so config checks pass. But the policy only asks "is someone signed in?", not "is this their note?". Anyone who signs up can read everyone's notes.

How we know

# signed in as test user A (redacted)
GET /rest/v1/notes?user_id=eq.<user B>&select=id
# response: 214 rows (ids hashed, contents never fetched)

Paste this SQL

drop policy "notes_select" on public.notes;
create policy "notes_select_own" on public.notes
  for select to authenticated
  using ( (select auth.uid()) = user_id );

Or paste this into your AI tool

# Prompt for Lovable / Bolt / Cursor / Claude Code
In Supabase, the notes table's select policy is
"auth.uid() is not null". Replace it so a signed-in user
can only select rows where user_id = auth.uid().
Don't change insert/update/delete policies.

Pricing

Start with the free scan. Buy the Proof Report when you want the proof, and your $29 counts toward Monitor if you keep watching. Paid tiers open with the scanner. Full pricing.

Price list

USD · prices before any sales tax

Free scan

Every outside-in check on one verified app. Every finding and its severity, one in full detail, and how many tables are exposed. The cross-user test and the rest of the Proof Suite are in the Proof Report.Opens Mon 26 Oct 2026

$0

Proof Report

The Proof Suite tests you opt into on one app, plus every finding in full: how we know, exact fixes and AI-tool prompts. A shareable, dated report link and Markdown export. Up to 20 re-scans in 30 days. Your $29 is credited toward Monitor if you upgrade.One-time · opens with the scanner

$29

Monitor

Weekly automatic re-scan of up to 3 apps, with an email when something new fails. Re-run the Proof Suite anytime by adding test logins again (we delete them after every scan). Cancel anytime from your billing portal. Founding price for early buyers: $12/mo, locked while you stay subscribed.$19/mo or $190/yr · opens with the scanner

$19/mo

Launch Pack

For builders shipping several apps: a Proof Report on up to 3 apps, with re-scans for 90 days.One-time · opens with the scanner

$79

Refunds: full refund within 14 days if you're not satisfied, and an automatic refund if a paid scan can't complete. Reports are kept 90 days, then deleted.

Checkout by Creem, our merchant of record, which handles sales tax. We'll publish the scanner's accuracy run on deliberately broken demo apps, misses included.

What Preflight will never do

A security tool that cuts corners is the problem it claims to solve. These are rules in the code, not promises in a footer.

  • Test an app you haven't proven you ownDNS or meta-tag verification comes first, every time.
  • Touch your real users' dataReads are counted, never stored. Write tests only touch rows your test accounts created, inside a rollback, then cleaned up.
  • Run a test you didn't switch onEvery proof test is opt-in, rate-capped, and stops at the first clear answer. No load testing.
  • Show a full secretKeys are masked in reports and never logged.
  • Call green “safe”Every report lists what wasn't checked. Automated checks can miss things.
  • Fake a number on this pageNo invented users, reviews or countdowns. The demos above are labeled as demos.

Questions

When can I use it?

The free scan opens on Monday 26 October 2026. The Proof Report, Monitor and Launch Pack open with the scanner. Each check goes live only after it passes its accuracy bar on deliberately broken demo apps. Join the list and you'll get one email when you can start.

How do you handle test logins?

For the Proof Report you create two throwaway accounts in your app. Their logins are encrypted at rest, used only during the scan, and deleted when it finishes. Never use real users' accounts. You also tick a box confirming you own the app or have written permission to test it.

My app doesn't use Supabase. Is this for me?

Yes. The free scan (secrets, headers, exposed files, auth settings, vulnerable libraries, TLS and email DNS, open Firebase rules) works for any web app, and so do the AI-endpoint and webhook proofs. The deep cross-user database tests are Supabase-first. Firebase is next if enough people ask for it.

Doesn't Supabase already check this?

Supabase's Security Advisor is good and you should use it: it flags tables with RLS off, always-true write policies, exposed functions and other configuration issues. It reads configuration. It doesn't sign in as two of your users and try to read or change each other's data, and it doesn't look at your deployed site's headers, files or bundle. That's what Preflight adds.

Will the write tests change my data?

Not your real users' data. Write and privilege tests run only as your two test accounts, only against rows those accounts created, inside a transaction that's rolled back, and anything left over is deleted at the end. You switch each test on yourself.

What is Preflight, exactly?

Automated, self-serve security-check software. It runs a fixed, published set of checks and tests against an app you've verified you own, and every report lists what it didn't check. It can miss things, so treat a clean report as a good sign, not a guarantee.

Do you need my code or my service key?

No. Preflight uses only what's public plus the two test accounts you create. Never paste a service-role key into any scanner, including this one. Code-level checks (server routes that skip auth, secrets in git history, your full dependency tree) come later, in a separate read-only code tier. It isn't priced yet.

Who's behind this?

Preflight is operated by Thomas Kanze, an indie developer in Costa Rica, and built in public as part of “30 days, the bot is the boss”, a challenge where an AI agent runs the business. Questions: support@preflightbot.com.

Check before takeoff.