The 30-Minute Vibe-Coded App Audit: Run It Yourself First

This is a checklist you run yourself. Twenty-five checks in six sections, about five minutes each. Most of them need a dashboard and a logged-in browser, not a terminal. Answer each one yes or no. "I don't know" counts as no, because in production it behaves like one.
It's the other half of the eleven greps. Those read the code for fingerprints. This one tests the product and the accounts around it: who can log in, what they can reach, where the money goes and what happens when something breaks. If you'd rather see what a paid audit sends back, that's in our sample report.
Grab whoever built it, if that isn't you. Set a timer.
Section 1. The repo (5 minutes)
- The README explains how to run the project locally, and it's still true.
- A fresh clone starts with
npm install && npm run dev, or your stack's equivalent, with no tribal knowledge. - No
.envfile is committed. Type.envinto the "Go to file" box on GitHub to check. - You can read the last 50 commit messages and say what each one changed.
mainis protected: nobody can force-push to it or merge without a pull request.
Section 2. Logins and roles (5 minutes)
- You can name the one auth provider. "Supabase, but there's also a NextAuth thing" is a no.
- You know where the session lives (a cookie or local storage) and when it expires.
- While logged in, copy a request that loads private data from dev tools as cURL. Delete the cookie or
Authorizationheader and run it. The API refuses. - You can list the roles (free, pro, team, admin) and point to the server code that enforces each one.
- Logged in as a normal user, change a record ID in a URL or request to someone else's. You get refused.
Section 3. Data (5 minutes)
- Every table has row-level security switched on, or the database can only be reached from your server.
- Migrations live in git.
- The schema in git matches production.
- Backups are on, and someone restored one and checked the data in the last three months.
Take the audit with ChatGPT
Describe your product and ChatGPT will ask you the 25 checks one section at a time, then tell you what to fix first.
“|”
Section 4. Money (5 minutes)
- The Stripe secret key is used in one place, on the server. Search the repo for
STRIPE_SECRETandsk_live. - You know where the webhook handler lives, and the webhooks page in the Stripe dashboard shows recent deliveries succeeding.
- The handler verifies Stripe's signature before it trusts an event.
- A webhook delivered twice doesn't double anything. Stripe says plainly that the same event can arrive more than once.
Section 5. Secrets (5 minutes)
- There's a written list of every API key the app uses.
- For each key, you know where it's stored and who can see it.
- If you left today, the next person could rotate every key in 30 minutes without taking production down.
Section 6. Error tracking (5 minutes)
- When a customer says "it's broken", you know the first place you'd look.
- Uncaught errors land somewhere a person sees them, such as Sentry, not only in a console nobody reads.
- You know the normal response time of your busiest endpoints.
- You'd hear the site is down from a monitor before you'd hear it from a customer.
Your score
Count the no's.
- 0 to 5. You're in decent shape. Fix what you found and ship the next feature.
- 6 to 10. Do a tightening pass before the next feature. Each fix is usually small. The hard part is doing them first.
- 11 to 15. The gaps now touch each other. A weak login check plus an open table is one incident, not two. Get someone who didn't build it to look.
- 16 or more. Stop shipping features until the foundation is fixed. Every new feature adds to what has to be unwound later.
Scored more than 10?
That's where a second pair of eyes pays for itself. We audit AI-built apps and fix them at a flat price, starting at $500 for a written audit in 48 hours and a flat-price plan for the fix. Send your email and we'll set up a 30-minute call within 24 hours.
What thirty minutes can't tell you
This checklist finds missing pieces. It can't tell you how they interact, or which fix has to land first. A missing tenant check might be one line or a redesign, and from the outside the two look identical.
That's the gap between a self-audit and a paid one. When we took over Oria, finding the problems was the short part: broken authorization, organizations seeing each other's data, broken uploads, no deploy process, hardcoded secrets, no tests. The real work was sorting the code into keep, fix and replace underneath a product that twelve institutions were already using.
If you scored under 6, you probably don't need us. Keep the list and run it again before your next big launch.
Related reading
- Anatomy of a vibe-coded SaaS: eleven things you can grep for before lunch: the code-side companion to this checklist
- What a $500 code audit report looks like: what comes back when someone else runs the audit
- We inherited an AI-generated codebase. Here is what we found: the six findings from a real rebuild
Built with a specific tool? Lovable, Bolt, Cursor, Replit Agent. No tests yet: start here. The service: Vibe Code Rescue.
Enjoyed this article? Share it with others
Related Posts

What a $500 Code Audit Report Looks Like (Sample Inside)
Before you pay $500 for an audit, you should see what comes back. Here's a sample built from a real AI-built codebase, details changed: six findings with severity, a keep, fix or replace verdict for each, and a plan with one fixed price per phase.

Anatomy of a Vibe-Coded SaaS: Eleven Things You Can Grep For Before Lunch
You don't need to read every file of a vibe-coded SaaS to know how it was built. Eleven greps, about thirty minutes: six show how the project was run, five find damage that breaks production or leaks data. Commands included.

We Don't Reject AI. We Use It Like Surgeons.
We write production code with AI agents every day, and we get hired to take over codebases that agents wrote with nobody steering. The tool is the same. Here is what we hand the agent, what never leaves a human, and the one rule behind both.