Flow Lab

A Bolt app showed every customer quote to strangers. Found and fixed the same day

Bolt built a quote-and-deposit app from one prompt. My outside check took about a minute to show that anyone with the public link could read all 8 customer quotes without logging in. After the fix, a visitor without a login reads 0 rows.

Self-initiated demo, not client work. Harbor Lane Mobile Detailing is an invented business. Every name, phone number and address in the app is made up, and no real money moves through it. Bolt built the app from scratch.

Screenshot: A Bolt app showed every customer quote to strangers. Found and fixed the same day
8 of 8customer quotes a stranger could read, with phone and home address
About a minutefor the outside check to find it
0 rowsreadable without a login after the fix
Same dayfrom the finding to the fix and a second check
The case

Task. A mobile car detailer sends a customer a quote as a link. The customer opens it on a phone, accepts and pays a deposit, and the owner sees every status on a dashboard. I asked Bolt to build this from scratch in one prompt. What came back looked finished: a dashboard, a list of quotes and a clean customer page.

Check. Before I call an app done, I look at it the way a stranger would, with only the public link. My script takes the database address and the public key from the page code (every visitor's browser already gets that key) and asks each table for rows without logging in. It only reads, and it counts rows instead of printing them. The whole run took about a minute.

About a minutefor the outside check to find it

Finding. Bolt had made the quotes table readable by anyone. A stranger could pull 8 of 8 quotes with each customer's name, phone, email and home address, plus the private link that lets the customer accept and pay. The settings table was open as well, and anyone could create an account in the app's database without confirming an email.

The outside check before and after the fix. It counts rows and names columns; it never prints the values.
The outside check before and after the fix. It counts rows and names columns; it never prints the values.

Fix. I described the fix to Bolt in one prompt. Anonymous reads of quotes and settings were removed. The customer page now loads a single quote through a database function that checks the link, and accepting, declining or paying goes through functions that check the link, the expiry date and the quote's status. After that I switched off new sign-ups in the Bolt Database settings and made an unknown link show "Quote not found".

Result. The same check, run again the same day: quotes and settings answer 401 without a login, and 0 rows come back. A customer's own link still opens their quote on a 390 px phone and on a desktop screen, and the owner dashboard works as before. I ran the check once more before publishing this page, with the same result.

Scope. The outside check shows what a stranger can reach. It does not read the source code line by line; that is the full review, a separate job.

Next step

Built your app in Bolt or Lovable?

Send me the public link. The one-day check starts at $150: what a stranger can read, what breaks on a phone, and what to fix first. If the fix is small, I can do it the same week.