A key a stranger can copy
Secret keys in the page or the JavaScript are public. We flag them. Publishable keys stay quiet.
// harbor.example — sample, not a real key const config = { url: "https://harbor.example", service_role: "eyJhbGci…" }
Free scan for AI-built apps
Free scan for Lovable, Bolt, Replit and Cursor apps. Get a score out of 100 and see exactly what is exposed.
Score
72
out of 100
Four things are already public.
Layout sample only. Not a result from a customer site.
A secret key is sitting in the page
highThe database answered without a login
highThe signup page never loaded
mediumA basic browser protection is missing
lowBuilt for apps from
How it works
01
We score what a stranger can already see. About a minute. No account. We never log in.
02
The free result is the score and the problem names. The $9 report, plus tax, adds an explanation and a fix you can paste back into the tool that built the app.
03
Prove the app is yours. Then we rerun the checks. Free is once a day. Pro and Agency check every hour, and again after each production deploy.
What you see
Illustrations below are samples. They are not results from a customer app.
Secret keys in the page or the JavaScript are public. We flag them. Publishable keys stay quiet.
// harbor.example — sample, not a real key const config = { url: "https://harbor.example", service_role: "eyJhbGci…" }
Supabase or Firebase should not hand over rows with no login.
Anonymous read · 1 row
| plan | |
|---|---|
| a…@harbor.example | pro |
Sample table. Not customer data.
After you prove the app is yours, checks keep running. Free is daily. Pro and Agency are hourly, plus a run after each production deploy.
Sample check history. Two failures. Not a live app, and not an uptime percentage.
We read the headers that should ship with every public page, then name the ones that are missing.
What we check
Keys left in the HTML or the JavaScript. Publishable keys are ignored.
A Supabase or Firebase project that answers without a login.
The basic headers a public page should send, and the ones it skipped.
Pages, images, scripts, and stylesheets that fail while the public page loads.
Title, description, language, and a heading. Unquoted tags still count.
We look for a signup link and check that the page is reachable. We do not submit it.
Pricing
The scan is free. The written report is $9 once. Monitoring is billed monthly. Prices are in USD and do not include tax.
Freeone look
Paste a URL. Get a score out of 100 and the name of each problem. We email the same summary.
$9once
+ tax
Each problem gets a plain-English explanation and a fix you can paste into the tool that built the app.
$99once
+ tax
One app. The scan, plus a written list of fixes. No turnaround promise.
$0forever
1 app. 1 flow. Checked once a day. Run it now whenever you want.
$19per month
+ tax
3 apps and 3 flows. Hourly checks, plus a check after each production deploy.
$49per month
+ tax
10 apps and 50 flows. Same hourly checks and post-deploy runs as Pro.
A score out of 100 and the name of each problem from one read of the public page. The same summary is emailed when email is configured.
A one-time unlock. Each problem gets a plain-English explanation and a fix prompt you can paste into Lovable, Bolt, Replit, or Cursor. Tax is added at checkout.
No. The public scan only loads pages and files. It does not fill inputs or submit a form.
After you prove you own the app, with a DNS TXT record or a file at /.well-known/replaywatch.txt. Nothing automated runs before that.
One public page. A score out of 100. No account for the scan.