You spent months building your app. The UX is polished, the features work, and you're ready to ship. But before you flip that switch, there's one category most solo builders skip entirely: security.
Not because they don't care — but because security feels like a black box. Where do you even start? What counts as "secure enough"? And who has time for a full penetration test?
The answer: you don't need a $50k audit to ship safely. You need five focused checks, each designed to catch a specific class of vulnerability. And with AI, you can run all five yourself in an afternoon.
This post walks through each check — what it catches, which tools back it up, and the exact prompt you can paste into Claude or your AI assistant right now.
Why Security Gets Skipped (And Why That's Dangerous)
The typical builder timeline looks like this: idea → build → ship → market. Security is invisible in that flow until something breaks. And by then, the damage is done.
A leaked API key can drain your cloud credits overnight. An exposed user database destroys trust you can't rebuild. An authorization bug lets any user access any other user's data — and you won't know until someone tweets about it.
The good news: most of these failures come from a predictable set of mistakes. Mistakes that are easy to miss when you're building but easy to catch when you specifically look for them.
Here are the five checks to run before every launch.
Check 1: Secret Leak Prevention
What it catches: API keys, database passwords, and service credentials hardcoded in your codebase or accidentally committed to git.
This is the most common and most catastrophic mistake. A single Supabase key in a public repo can give attackers full database access within minutes — bots scan GitHub continuously.
Automated tool: Gitleaks — run it against your full git history, not just current files. Secrets committed and "deleted" are still in the history.
brew install gitleaks
gitleaks detect --source . --verbose
AI prompt to run:
Check for secret leaks in my codebase. Go through every file and:
1. Find any hardcoded API keys, passwords, tokens, or credentials — move them to environment variables
2. Check if Supabase anon keys, service role keys, or any other service credentials are exposed in frontend/client-side code
3. Review my .gitignore — make sure .env, .env.local, .env.production, and similar files are excluded
4. Scan application logs and error messages for accidentally captured sensitive data
5. Check if any secrets appear in build output, client bundles, or public/ folder
For each finding: file path, line number, what the secret is, severity (Critical/High/Medium), and the fix.
[PASTE YOUR CODEBASE OR RELEVANT FILES]
The critical rule: If it's a secret, it belongs in an environment variable — never in code, never in comments, never in logs.
Check 2: Personal Data Flow Audit
What it catches: Privacy violations, unnecessary data collection, compliance gaps (GDPR, CCPA), and user data leaking through third-party integrations.
You're probably collecting more than you think. Analytics tools, error trackers, and logging services all receive slices of your users' data. Do you know exactly what goes where?
Automated tool: Bearer — open-source static analysis specifically for data security and privacy.
brew install bearer/tap/bearer
bearer scan .
AI prompt to run:
Audit how personal data flows through my application. Check:
1. Personal data collection — what am I capturing? (name, email, IP address, device info, location, behavioral data)
2. Logging — are any sensitive fields being logged that shouldn't be (passwords, tokens, full email addresses in URLs)?
3. Third-party integrations — which services receive user data? (analytics, error tracking, support chat, payment processors) Is the data minimized?
4. Password handling — are passwords hashed with bcrypt/argon2 before storage? Are they ever logged or transmitted in plaintext?
5. Cookies — what's in them? Are they HttpOnly and Secure? Are any sensitive values stored?
6. API responses — do endpoints return more user fields than the client actually needs?
7. Data deletion — can users request their data to be deleted? Does deletion cascade correctly?
Map the complete data flow and flag every privacy or compliance concern.
[PASTE YOUR CODEBASE OR RELEVANT FILES]
The test: Pretend you're a user who just read your privacy policy and wants to know what data you actually have on them. Could you answer that question accurately?
Check 3: Pre-Deploy Production Audit
What it catches: Configuration drift, debug code left in, missing security headers, weak CORS settings, and other "almost right but not quite" production issues.
Dev and production environments diverge in subtle ways. This check closes that gap before users hit it.
Automated tool: ECC's Pre-Deploy checklist covers configuration, hardening, and readiness checks that automated scanners often miss.
AI prompt to run:
Run a full pre-deployment production audit on my codebase. Check:
1. Environment variables — are all required prod env vars documented? Is there any logic that silently falls back to insecure defaults when a var is missing?
2. Debug code — remove console.log statements, debug flags, test credentials, and development-only routes
3. Error handling — do error messages expose stack traces, internal paths, or database schema to end users? Production errors should show generic messages; details go to server logs only
4. Security headers — are the following configured: Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy
5. Rate limiting — are all public endpoints rate-limited? Especially auth endpoints (login, signup, password reset)?
6. CORS — is the allowed origin list locked down to your production domains only (not wildcard)?
7. Database security — are connections using least-privilege credentials? Is connection pooling configured? Are migrations idempotent?
8. Authentication tokens — do JWTs and session tokens have appropriate expiry? Are refresh token rotations implemented?
Flag everything that isn't production-ready with severity and exact fix.
[PASTE YOUR CONFIGURATION FILES, MIDDLEWARE, AND SERVER SETUP]
A common miss: CORS set to * during development and never updated. Any site can make authenticated requests to your API.
Check 4: Deep Security Audit
What it catches: Authorization bugs (IDOR), payment manipulation, SQL injection, XSS, and authentication bypass — the vulnerabilities that cause actual breaches.
This is where the real damage happens. An authorization bug that lets User A read User B's data is trivial to write and easy to miss in code review. But it's a GDPR violation and a trust-destroying incident waiting to happen.
Automated tool: Trail of Bits does professional deep audits. For automated scanning, Semgrep covers many of these patterns.
pip install semgrep
semgrep --config=p/security-audit .
AI prompt to run:
Perform a deep security audit of my application. Check:
1. Authentication flows — are there ways to bypass login? (password reset that doesn't expire, magic links that don't validate, OAuth flows that skip state validation)
2. Authorization — for every endpoint that returns or modifies data, is there an ownership check? Can user A access or modify user B's resources by changing an ID in the request? (IDOR vulnerabilities)
3. Payment logic — can users manipulate prices, quantities, or discount codes? Is payment verified server-side before granting access?
4. SQL injection — are all database queries parameterized? Are there any string-concatenated queries?
5. XSS — is user-generated content sanitized before rendering? Are dangerous sinks (innerHTML, eval, document.write) avoided?
6. API authentication — do all protected endpoints verify the token on every request? Are there any endpoints that only check authentication on some code paths?
7. Session management — can sessions be fixed or hijacked? Are session IDs regenerated after login?
For each finding: severity (Critical/High/Medium/Low), attack vector (how an attacker would exploit it), and the exact code fix.
[PASTE YOUR ROUTES, CONTROLLERS, AND DATABASE QUERY CODE]
The IDOR test: Take any resource URL with an ID. Change the ID to another user's resource ID. If it returns data — you have a breach.
Check 5: Attacker's Perspective Review
What it catches: Business logic flaws, privilege escalation paths, and abuse vectors that individual code checks miss because they require thinking about the system as a whole.
The first four checks look at individual files and patterns. This one is different — it asks: if you were trying to break this app, how would you do it?
Automated tool: ECC Security Review covers structured threat modeling. OWASP ZAP can automate some of this scanning.
AI prompt to run:
Review my application from an attacker's perspective. Try to find ways to:
1. ID manipulation — are there predictable or sequential IDs that let an attacker enumerate resources? (user/1, user/2, user/3 — switch to UUIDs)
2. Login bypass — are there ways to skip authentication? (password reset flaws, "remember me" token reuse, social login that trusts unverified emails)
3. Privilege escalation — can a regular user become an admin? Are role checks performed on every request, or only at some entry points?
4. Feature abuse — can free trial limits be bypassed? Can referral/coupon codes be abused? Can rate limits be circumvented with parallel requests?
5. Content injection — can a user inject content that affects other users? (stored XSS in profile fields, markdown injection in comments, URL redirects)
6. Internal exposure — are any admin routes, debug endpoints, or internal APIs accessible without proper authentication?
7. Business logic — can prices, quantities, or calculation inputs be manipulated? (negative quantities, free shipping threshold bypass, coupon stacking)
For each attack vector found: how the attack works step by step, the potential impact, and the exact code change that closes it.
[PASTE YOUR APPLICATION'S ROUTE DEFINITIONS AND BUSINESS LOGIC]
The mindset shift: You built the app assuming users will use it correctly. An attacker assumes the opposite. This check forces you to think like them before they do.
Quick Reference
| Check |
What it catches |
Time |
Tools |
| Secret Leak Prevention |
Hardcoded credentials, exposed keys |
30 min |
Gitleaks |
| Personal Data Flow Audit |
Privacy violations, data over-collection |
45 min |
Bearer |
| Pre-Deploy Production Audit |
Config drift, missing headers, debug code |
30 min |
Manual + AI |
| Deep Security Audit |
IDOR, SQLi, XSS, auth bypass |
60 min |
Semgrep + AI |
| Attacker's Perspective |
Business logic flaws, abuse vectors |
45 min |
AI + manual |
Total: ~3.5 hours for a comprehensive security review before launch.
How to Run These Efficiently
The fastest workflow:
- Run the automated tools first (Gitleaks, Bearer, Semgrep) — they surface the quick wins
- Fix the automated findings
- Run each AI prompt on the relevant section of your codebase
- Fix the AI-identified issues
- Manually test the IDOR check and business logic scenarios
Don't try to fix everything at once. Work through one check at a time, commit the fixes, then move to the next.
After the Checks
Security is not a one-time event. These checks should run:
- Before every major feature launch
- When you add a new third-party integration
- When you change your authentication system
- Quarterly, even if nothing "big" changed
The good news: after the first run, subsequent checks are faster. You know your codebase, you've already fixed the structural issues, and you're looking for regressions — not starting from scratch.
All five prompts above are available in the Prompt Library under the Security category — copy them directly from there when you need them.
Ship confidently. Audit first.