The Five-Minute Database Breach
Before we talk about hiring someone to review your vibe-coded app, let me show you how to check for the most critical issue yourself. This takes five minutes and requires zero technical skill.How to Check Your Own App Right Now
If your app uses Supabase (and most vibe-coded apps do), here’s exactly what an attacker would do: Step 1: Open your app in Chrome and press F12 (or right-click → Inspect) Step 2: Go to the Network tab Step 3: Use your app normally - log in, click around, load some data Step 4: Look for requests to Supabase Filter the network requests by typing “supabase” in the filter box. You’re looking for requests to URLs likexxxxx.supabase.co.
Step 5: Click on any Supabase request and find the headers
Look in the Request Headers for something called apikey. It’ll be a long string starting with eyJ...
Step 6: Copy that API key
This is your anon/public key. It’s supposed to be public - that’s not the problem. The problem is what that key can access.
Step 7: Test what’s exposed
Take your Supabase URL and that API key to Supabase Schema. Paste them in and click Fetch. You’ll see every table in your database.
Now here’s the scary part: for each table you see, try querying it directly. If Row Level Security isn’t configured properly, you’ll get back all the data - not just the current user’s data.
What You’re Looking For
When you visualize your schema, here are the red flags:- Tables with no relationships (orphaned data that’s probably insecure)
- Missing
created_at/updated_attimestamps (no audit trail) - Sensitive data stored as plain text (passwords, API keys)
- No
user_idforeign key on user-owned data (no way to restrict access) - Tables named
test,temp, orbackup(forgotten development artifacts)
- Clear naming conventions
- Proper UUID primary keys
- Foreign key relationships defined
- Timestamp columns for audit trails
What “Vibe Coding” Actually Produces
When you build with AI tools - Cursor, Lovable, Bolt, Replit, v0 - you’re asking an AI to generate code based on your prompts. The AI doesn’t understand your business logic, your security requirements, or your scaling needs. It understands patterns from training data. The result is code that works - until it doesn’t. Here’s what’s typically hiding under the hood:- Inconsistent patterns: Each prompt might generate code following different conventions
- Security gaps: API keys in frontend code, missing authentication checks, overly permissive database rules
- No error handling: Happy path works great, edge cases crash
- Performance landmines: Queries that work with 10 users but break with 1,000
- Accumulated complexity: Features stacked on features with no refactoring
The Code Review Checklist
A proper code review for a vibe-coded app covers different ground than a typical review. Here’s what needs examination:Authentication & Authorization
Database Security (RLS)
Row Level Security is where most vibe-coded apps fail. Check:API & Environment Variables
Frontend Security
Code Quality
The Supabase Security Audit
If you’re hiring someone to review your app, this is what they should be checking:1. Check RLS Status
- Go to Table Editor in Supabase
- Look for the shield icon on each table
- If it’s grayed out, RLS is disabled (bad)
2. Review Policies
- Go to Authentication → Policies
- Each table should have policies defined
- Policies should reference
auth.uid()to restrict to current user
3. Check Function Permissions
- Go to Database → Functions
- Look for
SECURITY DEFINERfunctions (they run with elevated privileges) - These need careful review
4. Audit Storage Buckets
- Go to Storage
- Check bucket policies
- Are uploaded files public when they shouldn’t be?
Common Security Issues in AI-Generated Code
1. The “Works Locally” Problem AI tools often generate code that works in development but exposes secrets in production:- All API endpoints validate input
- Database constraints exist as a last line of defense
- No business logic relies solely on frontend checks
Deployment Readiness
Before going to production (or if you’re already there), verify:Environment Configuration
Performance Baseline
Backup & Recovery
Who to Hire for This Work
You need a senior full-stack developer with specific experience. Here’s the profile:Must-Have Qualifications
- 5+ years professional development experience
- Production Supabase experience (or equivalent - Firebase, Postgres)
- Security background - has performed security audits before
- AI-code experience - has cleaned up vibe-coded apps before
Nice-to-Have
- Experience with your specific stack (Next.js, React, etc.)
- DevOps/deployment experience
- Has worked with early-stage startups
Questions to Ask Candidates
Technical verification:- “Walk me through how you’d audit RLS policies in Supabase”
- “What are the top 3 security issues you see in AI-generated code?”
- “How would you handle finding API keys exposed in the frontend?”
- “Tell me about a vibe-coded app you’ve reviewed. What did you find?”
- “What’s your process for a code security audit?”
- “How do you prioritize which issues to fix first?”
- “How would you explain a critical security issue to a non-technical founder?”
- “What documentation would you provide after the review?”
Red Flags in Candidates
- Can’t explain their process clearly
- Wants to rewrite everything immediately
- Dismissive of AI-generated code without nuance
- No specific Supabase/database security experience
- Can’t provide references from similar work
Timeline & Cost Expectations
Typical Timeline
Total for review + critical fixes: 3-5 days
Cost Breakdown
For a senior full-stack developer at $100-150/hour:Budget reality check: If someone quotes significantly less, they’re either inexperienced or planning to cut corners. If they quote significantly more, they may be padding for a full rebuild.
What You Should Receive
At minimum, your review should deliver:- Executive summary - Top issues in plain English
- Security report - All vulnerabilities with severity ratings
- Code quality assessment - Patterns, technical debt, maintainability
- Prioritized fix list - What to fix first, second, third
- Deployment checklist - What’s needed before/for production
- Recommendations - Rebuild vs. remediate decision
The Rebuild vs. Remediate Decision
Sometimes the answer is: start fresh. Here’s how to know:Remediate When:
- Core architecture is sound
- Issues are fixable in < 2 weeks
- Business logic is correct, just insecure
- You have time pressure and the app is “mostly there”
Rebuild When:
- No consistent patterns exist
- Security issues are fundamental (not just missing pieces)
- Adding features takes 3x longer than it should
- The developer estimates remediation > new build
Next Steps
- Do the five-minute check: Open dev tools, find your Supabase key, see what’s exposed
- Document what you know: List features, integrations, and any issues you’ve noticed
- Find the right person: Use the hiring criteria above
- Get the audit: 3-5 days for a thorough review
- Make the call: Remediate or rebuild based on findings
Need help with this? WithSeismic specializes in taking vibe-coded MVPs to production. We’ve reviewed dozens of AI-generated codebases and know exactly where they break down. Get in touch for a no-BS assessment of your app.