Leaked credentials & API keys
Hard-coded keys by signature — Stripe (sk_live), OpenAI, Anthropic, GitHub, Google, Slack, and Supabase service-role keys (decoded to confirm the role). The #1 way a vibe-coded app leaks access. Secrets are redacted, never echoed in full.
Secrets exposed to the browser
A secret shipped to the client — a NEXT_PUBLIC_ variable holding a secret, or a browser component referencing the service-role key. The classic “token sent to the frontend” mistake.
Committed environment files
A real .env committed to the repository (visible in history even after deletion), or a missing .gitignore that would let one slip in.
Database access rules (RLS)
Whether each database table has Row-Level Security enabled — so the app's data and API aren't left wide open to anyone with the public key.
Live-site exposure
On the deployed site: security headers, and whether secret files are publicly downloadable over HTTP. A passive, read-only check — the same request a browser makes.
Dependencies & malicious code
Known-vulnerable packages (via OSV), and hidden or obfuscated code using malware techniques (eval, remote loading, off-screen payloads).