Guide · Before launch
Your app works. That is not the same as ready.
Every app I review passes its own click-through test. What it usually fails is the test nobody wrote: a stranger opening it, guessing the URL of an admin page, reading the browser console, or reloading at the wrong moment during a payment. This is the checklist I run before real users arrive — you can run most of it yourself in an afternoon.
Written by the reviewer at CodeReviewPro · the same checks as in the sample report
Start here
Two questions decide everything
Before the checklist, answer this honestly: apart from you, who has opened this app? And: what breaks if the answer to a request is "no"? An app that only one person has used has only one path tested. An app that never receives a "no" has never shown you what it does with one.
Most of the expensive failures are not exotic. They are a normal feature, called by someone who was not supposed to call it, at a moment that was not supposed to happen.
01 / The checklist
Twelve checks, four groups
Group 1 — Who can read and change your data
- Log out, then open the app again. You should land on a login screen. If you see data, the page is rendered from a cached response or from a public source.
- Take a row that belongs to another account, and try to fetch it by its id. Change one number in the URL or in the network request. A "no" is what you want; a 200 with someone else's row is the single most common finding I report.
- Check the rules on the database itself, not only in your app. If your data lives in a service like Supabase or Firebase, permissions belong to that service. Buttons you hide in the interface are not permissions.
Group 2 — What the browser is allowed to know
- Search your published front-end for key-shaped strings. Open the built JavaScript and search for sk-, secret, service_role, password. A key that reaches the browser is public, whoever it belongs to.
- Look at the console and the network tab on every screen. Errors that leak table names, stack traces and email addresses are a map of your backend for anyone who looks.
- Check what your error pages say. A stack trace in production tells a stranger which framework and which version you are running.
Group 3 — Money
- Never trust a price, quantity or discount that arrives from the browser. Send a request with price: 0.01 and see if the server accepts it. The amount must be decided by your server.
- Reload the payment page after a successful payment. One order should not become two.
- Interrupt a payment, then finish it. If your app loses the link between the payment and the order, you will be reconciling by hand for weeks.
Group 4 — What happens when something fails
- Switch off your network halfway through a form. An app that loses the user's input silently is an app that loses users.
- Send the same request twice, fast. Double submissions, double e-mails and double charges come from a button that trusted the user to click once.
- Read your own error notification path. Who gets told when something breaks at 3 a.m.? If the answer is "nobody", you find out from a customer.
02 / The honest part
What this checklist will not catch
A self-check finds the failures you can trigger by hand. It does not find the ones that need two conditions at once: a permission check that is correct on the main route but missing on the copy of it, a webhook that can be replayed, a race between two requests that each look fine alone, an admin endpoint that is protected by obscurity instead of by a session.
That gap is the reason a review exists. Not to repeat your checklist, but to read the code where the checklist runs out — and to tell you which of the twelve checks above you actually passed, with evidence, instead of with hope.
Quick check $299 · Deep check $799 · repairs $120 per hour. Prices in USD, payment only after we agree on the scope. See what a review costs.
Free
Start with the two answers that matter
Send me a link to your app, or the repository, and tell me in one line what worries you. I will run this checklist on the live version and send you up to three findings. If I find nothing serious, that is what the answer says.
FAQ
Short answers
- My app is not launched yet. Is this checklist too early?
Right before launch is exactly the moment: the findings are still cheap to fix, and no customer has seen the weak version. - I built it with Lovable, Bolt, v0 or Cursor. Is that relevant?
It changes nothing in the review. It does change the odds of a specific failure — permissions and secrets in the browser are the usual suspects, because the demo never needed them. See what breaks after launch. - Can I just run a scanner?
Yes, and you should. Scanners find known shapes. This checklist is what you do when the scanner is quiet and you still need to know whether a stranger can read someone else's data. - Do you need my whole codebase?
For a Quick check, either the repository or a working link plus the code of the pieces that worry you. See how your code is handled.