The Vibe Coding Launch Checklist
108 automated checks across 12 pillars for apps built with Cursor, Lovable, Bolt, Windsurf, and Claude Code. Catch leaked secrets, broken webhooks, and hallucinated packages before opening day.
Launch Readiness0%
Severity:
Showing 108 checks
SEC-001critical•Hardcoded Secrets
No Live Stripe Secret Keys in Source Code
AI agents frequently paste sample sk_live_ keys directly into lib/stripe.ts or API route handlers instead of reading from process.env.
SEC-002critical•Hardcoded Secrets
No OpenAI, Anthropic, or AI Provider API Keys Committed
When testing LLM calls, AI assistants often write raw sk-ant-... or sk-proj-... strings directly into client components or scripts.
SEC-003critical•Hardcoded Secrets
Database Connection URIs Hidden from Client Bundles
Agents often configure Prisma or Postgres pools inside shared utility files imported by both client and server code.
SEC-004critical•Hardcoded Secrets
No AWS / Cloud Storage Secret Keys in Git
When configuring S3 or cloud upload buckets, AI agents place raw AKIA access keys and secret tokens directly in client upload utilities.
SEC-005critical•Hardcoded Secrets
Supabase Service Role Key Excluded from Client Code
AI tools mix up the public anon key with the full-access service_role key, pasting the service key into client Supabase clients.
SEC-006critical•Hardcoded Secrets
No NEXT_PUBLIC_ or VITE_ Prefixes on Private Secrets
When an environment variable is undefined in client code, agents prefix it with NEXT_PUBLIC_ without recognizing it exposes private secrets.
SEC-007critical•Hardcoded Secrets
JWT Signing Secrets Isolated on Server
Agents write fallback secret strings like secret = process.env.JWT_SECRET || "default_jwt_secret" which allows trivial signature forging.
SEC-008high•Hardcoded Secrets
Transactional Email Service Keys (SendGrid/Resend) Protected
Email sending logic is often placed in frontend utilities or webhook helpers with hardcoded re_ or SG. keys.
SEC-009critical•Hardcoded Secrets
.env Files Added to .gitignore Before Initial Commit
AI scaffolding scripts create .env or .env.local files before initializing git, causing them to be tracked in history.
SEC-010high•Hardcoded Secrets
Public Webhook Signing Secrets Verified on Backend Only
Agents sometimes import webhook secrets into shared types or configuration files accessible by frontend builders.
AUTH-001critical•Broken Authentication
Authentication Middleware Covers All Private API Routes
AI agents create new API routes in subfolders (e.g. app/api/user/settings/route.ts) that bypass the middleware matcher regex.
AUTH-002high•Broken Authentication
Rate Limiting Enforced on Login, Signup & Reset Endpoints
AI models write straightforward credential check handlers without considering brute-force or credential-stuffing attacks.
AUTH-003high•Broken Authentication
No Wildcard CORS on Authenticated API Endpoints
To fix cross-origin browser errors during development, agents frequently add Access-Control-Allow-Origin: * to all responses.
AUTH-004critical•Broken Authentication
Row Level Security (RLS) Enabled on Supabase / PostgreSQL Tables
Lovable and Bolt create database tables via migrations but frequently forget to execute ALTER TABLE ... ENABLE ROW LEVEL SECURITY.
AUTH-005critical•Broken Authentication
Object-Level Access Control (IDOR / BOLA Prevention)
AI route handlers read an id from the URL params and query db.find(id) without verifying the record belongs to the logged-in user.
AUTH-006high•Broken Authentication
Session Cookies Configured with HttpOnly, Secure, and SameSite
Agents set cookies using basic document.cookie or simple response headers without security flags.
AUTH-007high•Broken Authentication
Strict Redirect URL Allowlist on OAuth Callbacks
AI code accepts a redirect query param from the user and passes it directly to router.push() or res.redirect(), enabling open redirects.
AUTH-008medium•Broken Authentication
Session Token Expiry and Revocation Handlers Present
Agents generate JWT tokens with infinite or multi-year expiry times so users never have to re-login.
AUTH-009critical•Broken Authentication
Passwords Hashed with Argon2 or Bcrypt (Minimum 10 Rounds)
Custom auth code written by AI sometimes uses SHA256 or MD5 hashes without salt instead of standard password hashing algorithms.
AUTH-010critical•Broken Authentication
No Role Escalation Flaws in User Registration
AI endpoints accept req.body directly into user creation, allowing users to pass role: "admin" in the signup JSON payload.
AUTH-011high•Broken Authentication
State-Changing Actions Restricted to POST/PUT/DELETE
Agents sometimes create GET endpoints like /api/delete-item?id=123 for convenience, exposing them to prefetching and CSRF.
AUTH-012critical•Broken Authentication
Multi-Tenant Data Isolation Enforced in Database Queries
In multi-tenant or team apps, AI forgets to include org_id or team_id in sub-entity queries.
PAY-001critical•Payment & Webhook Integrity
Stripe Webhook Signature Verification Mandatory
Agents parse req.body as plain JSON and process checkout events without running stripe.webhooks.constructEvent().
PAY-002high•Payment & Webhook Integrity
Webhook Idempotency Prevents Double-Credit or Double-Grant
Stripe delivers events multiple times during retries. AI handlers increment balances directly without tracking event.id.
PAY-003critical•Payment & Webhook Integrity
customer.subscription.deleted Handled to Revoke Access
AI boilerplate handles checkout.session.completed but forgets customer.subscription.deleted, leaving cancelled users on paid tiers indefinitely.
PAY-004high•Payment & Webhook Integrity
invoice.payment_failed Handled to Notify User & Restrict Features
AI templates assume all recurring payments succeed, ignoring declined cards and expired payment methods.
PAY-005critical•Payment & Webhook Integrity
Prices Defined Server-Side (No Client-Provided Price Overrides)
Frontend checkout forms written by AI sometimes pass price or amount in the checkout POST body, enabling client price tampering.
PAY-006high•Payment & Webhook Integrity
Raw Request Body Preserved for Webhook Handler in Next.js
In Next.js App Router, agents use req.json() on webhook routes which breaks Stripe signature cryptographic checks.
PAY-007high•Payment & Webhook Integrity
Stripe Customer ID Mapped Reliably to User Account
AI routes match users by billing email alone. When a user checks out with a different Apple Pay or PayPal email, the account is never upgraded.
PAY-008medium•Payment & Webhook Integrity
Checkout Session Creation Rate-Limited
Unprotected checkout session endpoints allow malicious bots to spam Stripe API calls and hit provider rate limits.
PAY-009critical•Payment & Webhook Integrity
Payment Entitlements Verified Server-Side in Database
Some AI apps read user tier from a client localStorage item or unverified session claim, allowing users to unlock features with DevTools.
DEP-AI-01critical•AI Hallucinations & Dependencies
No Hallucinated npm or PyPI Package Imports
LLMs invent plausible package names like @auth/next-guard or react-smart-filter that do not exist. Attackers can register these (slopsquatting) to inject malware.
DEP-AI-02high•AI Hallucinations & Dependencies
Committed Lockfile Present (package-lock.json or pnpm-lock.yaml)
AI coding tools sometimes generate a package.json without running a package install, omitting the lockfile from the repository.
DEP-AI-03high•AI Hallucinations & Dependencies
No Unpinned Asterisk (*) or Loose Major Ranges on Critical Packages
Agents put "stripe": "*" or "express": "latest" in package manifests, which breaks production builds when dependencies release breaking changes.
DEP-AI-04critical•AI Hallucinations & Dependencies
No Known Critical CVEs in Production Dependencies
AI models frequently recommend outdated package versions trained into their weights (e.g. Next.js 13 or vulnerable jsonwebtoken releases).
DEP-AI-05medium•AI Hallucinations & Dependencies
No Conflicting Lockfiles (Single Package Manager Enforced)
Developers switch between npm, yarn, and pnpm during AI prompts, leaving multiple conflicting lockfiles in the repository.
DEP-AI-06medium•AI Hallucinations & Dependencies
No Bloated or Abandoned Utility Libraries (e.g. Full Lodash Imports)
AI writes import _ from "lodash" for a single helper function, bundling 70KB of unused legacy utilities into frontend scripts.
DEP-AI-07medium•AI Hallucinations & Dependencies
DevDependencies Properly Separated from Production Dependencies
AI tools add build tooling, testing frameworks (jest, vitest), and types directly into dependencies instead of devDependencies.
DEP-AI-08high•AI Hallucinations & Dependencies
No Untrusted Third-Party CDN Script Tags in index.html
To add features quickly, agents paste unversioned <script src="https://cdn..."> tags into root layouts without integrity hashes.
DEP-AI-09low•AI Hallucinations & Dependencies
Duplicate Functionality Libraries Consolidated
AI prompts across different sessions import both axios and native fetch, or date-fns and dayjs in the same codebase.
DEP-AI-10low•AI Hallucinations & Dependencies
No Unused Packages Left in package.json
When AI replaces a feature or refactors an approach, it leaves the previous packages in package.json.
INJ-001critical•Injection & Input Validation
Parameterized Queries on All Database Operations (No Raw SQL Concatenation)
AI writes template string queries like `SELECT * FROM users WHERE email = '${req.body.email}'` which allows trivial SQL injection.
INJ-002critical•Injection & Input Validation
No dangerouslySetInnerHTML Without Strict Sanitization
When rendering markdown or rich text, agents render raw strings directly through dangerouslySetInnerHTML={{ __html: content }}.
INJ-003high•Injection & Input Validation
Runtime Schema Validation on All Incoming API Requests (Zod/Valibot)
Agents typecast request bodies using TypeScript interfaces (const body = await req.json() as UserInput) with zero runtime validation.
INJ-004critical•Injection & Input Validation
No child_process.exec with Unsanitized User Input
AI scripts that invoke shell commands often concatenate user parameters into exec(`ffmpeg -i ${filename}`) enabling arbitrary command injection.
INJ-005critical•Injection & Input Validation
Path Traversal Prevention on File Downloads and Uploads
Agents read files using path.join(uploadDir, req.query.file) without stripping ../ sequences, allowing attackers to read system files.
INJ-006critical•Injection & Input Validation
Server-Side Request Forgery (SSRF) Protection on URL Fetchers
When building preview scrapers or webhook testers, AI uses fetch(req.body.url) without blocking loopback IPs or cloud metadata endpoints.
INJ-007high•Injection & Input Validation
File Upload Extension and MIME Type Verification
Agents validate only the client-reported file extension (.jpg) without verifying magic bytes or blocking executable extensions (.svg, .html, .exe).
INJ-008medium•Injection & Input Validation
Maximum Request Payload Size Limits Enforced
AI route handlers do not specify body size limits, exposing serverless workers to memory exhaustion and denial-of-service.
INJ-009medium•Injection & Input Validation
No Regex Denial of Service (ReDoS) Vulnerabilities
Agents write complex nested regular expressions like /([a-z]+)+$/ for email or URL checks that hang on crafted input.
INJ-010low•Injection & Input Validation
Input String Trimming and Length Bounding
AI forms accept arbitrarily long strings without max-length limits, causing database column truncation or layout breaks.
PRIV-001critical•Data Privacy & Logging
No Passwords or Tokens Logged in console.log Statements
During debugging, AI agents place console.log("Login payload:", req.body) in auth routes, leaking passwords into server log stores.
PRIV-002high•Data Privacy & Logging
No Sensitive Query Parameters in Browser URLs
AI reset password flows sometimes put reset tokens or user emails in GET query parameters, leaking them into referrer headers.
PRIV-003high•Data Privacy & Logging
Error Responses Strip Internal Server Stack Traces in Production
Catch blocks written by AI return res.status(500).json({ error: error.message, stack: error.stack }), leaking internal file paths.
PRIV-004medium•Data Privacy & Logging
PII Scrubbing in Client Analytics and Error Trackers (Sentry/PostHog)
AI scaffolding scripts send full page state and form input events directly to analytics trackers without PII masking.
PRIV-005medium•Data Privacy & Logging
Privacy Policy and Terms of Service Routes Live & Linked
AI apps often have dead footer links pointing to "#" or generic placeholders for /privacy and /terms.
PRIV-006low•Data Privacy & Logging
Cookie Consent or Necessary-Only Cookie Classification Defined
AI templates drop third-party tracking pixels (Meta Pixel, Google Ads) without providing a banner or privacy opt-out mechanism.
PRIV-007medium•Data Privacy & Logging
Account Deletion Flow Implemented (GDPR / CCPA Right to Erasure)
AI apps build sign up and profile editing but omit the delete account endpoint, violating store guidelines and privacy laws.
PRIV-008medium•Data Privacy & Logging
Debug Logging Disabled in Production Builds
Developers leave verbose DEBUG=* or verbose logger configurations active when pushing to production hosts.
CFG-001high•Configuration & Headers
Content Security Policy (CSP) Defined on All HTML Pages
Default Next.js and Vite scaffolds do not include a Content Security Policy header unless explicitly configured in config files.
CFG-002high•Configuration & Headers
Strict-Transport-Security (HSTS) Active with 1-Year Max Age
AI templates do not set HSTS headers, leaving browsers vulnerable to SSL stripping attacks on initial visits.
CFG-003medium•Configuration & Headers
X-Content-Type-Options: nosniff Header Enabled
Modern frameworks require custom header definitions to guarantee MIME sniffing protection on static and dynamic assets.
CFG-004high•Configuration & Headers
X-Frame-Options: DENY or SAMEORIGIN (Clickjacking Protection)
AI apps often overlook frame protection headers, allowing malicious websites to embed the app in invisible iframes.
CFG-005medium•Configuration & Headers
Referrer-Policy Set to strict-origin-when-cross-origin
Without a Referrer-Policy header, outgoing links can leak private path names and query strings to external domains.
CFG-006medium•Configuration & Headers
Permissions-Policy Disables Unused Hardware Features
AI boilerplates omit the Permissions-Policy header, leaving camera, microphone, and geolocation permissions open by default.
CFG-007high•Configuration & Headers
No Hardcoded "localhost" URLs in Production Code
Agents hardcode fetch("http://localhost:3000/api/...") during local testing and forget to replace it with dynamic environment variables.
CFG-008medium•Configuration & Headers
NODE_ENV Explicitly Set to "production" in Deployment Settings
Hosting presets sometimes run dev scripts instead of production builds, leaving slow development diagnostics enabled.
AIR-001critical•AI Anti-Patterns & Runtime
No eval() or new Function() Dynamic Execution Sinks
When asked to parse dynamic expressions or formulas, AI code resorts to eval() or new Function(code)() which creates arbitrary code execution holes.
AIR-002high•AI Anti-Patterns & Runtime
Unsanitized LLM Markdown Output Safely Rendered in UI
AI coding tools render streaming model output directly into DOM nodes without filtering out malicious script injection from external prompts.
AIR-003medium•AI Anti-Patterns & Runtime
System Prompts Protected from Direct Client-Side Exposure
In client-side AI apps, agents place detailed system instructions in frontend state, allowing users to extract proprietary prompts in DevTools.
AIR-004critical•AI Anti-Patterns & Runtime
Tool Calls and Function Calling Validated Before Execution
When AI agents generate tool calls (e.g. deleteUser, sendMoney), code executes the function arguments without user permission or boundary checks.
AIR-005high•AI Anti-Patterns & Runtime
AI Output JSON Parsed with try/catch and Schema Validation
AI frequently outputs markdown code fences (```json ... ```) that break JSON.parse() and crash application route handlers.
AIR-006medium•AI Anti-Patterns & Runtime
Token Usage and Output Length Limits Enforced on Model Calls
AI templates omit max_tokens parameters, allowing unbounded prompt loops that exhaust API credit balances.
AIR-007high•AI Anti-Patterns & Runtime
Prompt Injection Safeguards on User Input Before LLM Calls
Agents concatenate raw user input directly into system prompts (e.g. `System: ${userPrompt}`) without boundary delineation.
AIR-008medium•AI Anti-Patterns & Runtime
Fallback Logic for LLM API Timeouts and Rate Limits
When an AI provider returns 429 (rate limited) or 503 (overloaded), the app hangs or displays a blank screen.
CMP-001medium•Code Complexity & Quality
No Monolithic "God Files" Exceeding 500 Lines of Code
AI tools prefer appending new code to existing files rather than refactoring, producing massive 1,000+ line components that break context windows.
CMP-002low•Code Complexity & Quality
Duplicate API Fetch Logic Refactored into Reusable Functions
Agents copy and paste the same fetch boilerplate (headers, error handling, token attachment) across dozens of components.
CMP-003low•Code Complexity & Quality
Unused Imports and Orphaned Files Removed
When AI replaces an approach, it leaves old component files, dead utility functions, and unused imports in the codebase.
CMP-004high•Code Complexity & Quality
No Lingering "TODO: Implement Later" in Critical User Paths
AI agents frequently place comments like // TODO: add real payment verification or // TODO: handle error in critical backend routes.
CMP-005low•Code Complexity & Quality
Deeply Nested Conditionals Refactored (Max 4 Levels)
Agents write deeply nested if/else ladders inside callbacks rather than using guard clauses or early returns.
CMP-006low•Code Complexity & Quality
Consistent State Management Pattern (Avoid Mixed Paradigms)
Across different prompt iterations, agents mix Redux, Zustand, React Context, and raw useState for the same application state.
CMP-007medium•Code Complexity & Quality
TypeScript strict Mode Enabled in tsconfig.json
To silence compiler errors quickly, agents set "strict": false or sprinkle any types across complex interfaces.
CMP-008high•Code Complexity & Quality
No Mock Test Data Remaining in Production API Handlers
AI handlers frequently contain commented-out or active mock data (const users = [{ id: 1, name: "Test" }]) that overrides real database calls.
ERR-001high•Error Handling & Resilience
No Swallowed Catch Blocks (Empty catch (e) {})
When async code throws, AI agents wrap it in try { ... } catch (e) {} with no logging or error handling, making production bugs impossible to diagnose.
ERR-002medium•Error Handling & Resilience
Global Error Boundary (error.tsx) Configured in Next.js
AI templates omit error.tsx and global-error.tsx, causing unexpected component crashes to render an unstyled white screen of death.
ERR-003low•Error Handling & Resilience
Custom 404 Not Found Page (not-found.tsx) Live
Default frameworks show generic 404 pages that break brand continuity and leave lost visitors with no navigation path back to the home page.
ERR-004high•Error Handling & Resilience
Asynchronous Promise Rejections Explicitly Handled
AI writes unhandled floating promises like doAsyncWork() without await or .catch(), triggering unhandledRejection crashes on Node.js.
ERR-005medium•Error Handling & Resilience
Network Requests Implement Timeout Limits
Native fetch calls without an AbortController signal can hang indefinitely if a third-party API becomes unresponsive.
ERR-006medium•Error Handling & Resilience
Form Submissions Show User-Friendly Validation Feedback
AI forms often log errors to console but fail to show visible error messages to the user when validation fails.
ERR-007high•Error Handling & Resilience
Database Reconnection and Pool Retry Configuration Active
AI sets up database clients that crash on transient network disconnects without automatic pool reconnection.
ERR-008medium•Error Handling & Resilience
Graceful Degradation for Optional Third-Party Services
If an optional analytics or chat widget fails to load, the AI script crashes the entire page layout.
PERF-001high•Performance & Assets
Next/Image or Optimized Formats Used (No Multi-Megabyte PNGs)
AI puts raw 4MB screenshot PNGs into /public/hero.png and uses raw <img> tags instead of responsive next/image components.
PERF-002medium•Performance & Assets
Web Fonts Self-Hosted or Preloaded via next/font
AI templates drop multiple heavy Google Fonts @import statements in globals.css, blocking first contentful paint by 1-2 seconds.
PERF-003medium•Performance & Assets
Heavy Component Modules Dynamically Imported (Code Splitting)
Heavy libraries like Monaco Editor, charting engines (Chart.js), or rich text editors are statically imported into initial bundles.
PERF-004high•Performance & Assets
No N+1 Waterfall Queries in Server Components or Endpoints
Agents execute database queries in array.map(async (item) => await db.find(item.id)) loops rather than using single batch queries.
PERF-005medium•Performance & Assets
Static Assets Cached with Long-Lived Cache-Control Headers
Custom server configs and API routes serve static assets with no-cache headers, causing repeat downloads on every page view.
PERF-006medium•Performance & Assets
Gzip or Brotli Compression Enabled on Production Server
Custom Express or VPS configurations miss compression middleware, serving uncompressed text and JSON payloads.
PERF-007high•Performance & Assets
No Infinite Re-render Loops in useEffect Hooks
AI frequently omits dependency arrays or updates state inside a useEffect that depends on the same state, spinning CPU cycles.
PERF-008low•Performance & Assets
Third-Party Analytics and Pixels Deferred or Loaded via Strategy
Agents paste tracking scripts directly into the HTML <head> with synchronous execution, delaying time to interactive.
PERF-009medium•Performance & Assets
Core Web Vitals Pass Lighthouse Performance Baseline (75+)
Accumulated client scripts, unoptimized fonts, and missing image dimensions push Core Web Vitals into failing zones.
OPS-001high•Deployment & Launch Hygiene
.env.example Documented with All Required Variable Names
When collaborating or deploying, AI adds new environment variables in code without updating .env.example, causing deployment failures.
OPS-002medium•Deployment & Launch Hygiene
Health Check Route (/api/health) Responds 200 OK
Hosting platforms like Render, AWS, or Railway require a lightweight health endpoint to confirm container uptime.
OPS-003medium•Deployment & Launch Hygiene
Robots.txt Configured with Production Host and Sitemap Link
AI projects often deploy with default robots.txt that blocks search engines (Disallow: /) or misses sitemap location.
OPS-004medium•Deployment & Launch Hygiene
Sitemap.xml Generated and Valid for All Key Marketing Routes
AI apps often have broken or outdated sitemaps that point to localhost or omit dynamic blog and tool pages.
OPS-005low•Deployment & Launch Hygiene
OpenGraph Meta Tags & Social Share Card Previews Configured
When founders share their new app on Twitter/X or LinkedIn, the link shows a broken preview or default framework icon.
OPS-006low•Deployment & Launch Hygiene
Favicon and App Icons Customized (No Framework Defaults)
Vibe-coded apps frequently deploy with the default Next.js, Vercel, or Vite triangular favicon in browser tabs.
OPS-007low•Deployment & Launch Hygiene
Canonical URL Configured on All Major Landing Pages
Search engines see duplicate content penalties when both www and non-www or trailing slash versions of URLs are indexed.
OPS-008critical•Deployment & Launch Hygiene
Automated Database Backup and Restore Procedure Verified
AI developers set up cloud databases (Supabase, Neon, Render) without confirming point-in-time recovery (PITR) is active.
Audit All 108 Checks in Under 60 Seconds
Why spend hours manually verifying code? Our static scanner inspects your repository or deployed URL, prioritizes your top launch blockers, and provides copy-paste prompts for Cursor, Bolt, and Lovable to fix them immediately.
Frequently Asked Questions About Vibe Coding Audits
Everything you need to know about securing and launching AI-built applications.
What is a vibe coding launch checklist?▼
A vibe coding launch checklist is a comprehensive catalog of security, payment, dependency, and performance safeguards specifically designed for applications generated using AI coding assistants like Cursor, Lovable, Bolt, Windsurf, and Claude Code. It targets the exact failure modes that LLMs repeatedly introduce into production code.
What is an AI-hallucinated package (slopsquatting)?▼
When writing code, LLMs frequently hallucinate package names that sound plausible but do not exist in the official npm or PyPI registries. Malicious attackers register these fake package names and upload trojanized versions containing keyloggers or reverse shells. When your application installs dependencies, the attacker code runs automatically.
What are the most common payment bugs in AI-generated apps?▼
The two most common payment flaws are: (1) missing Stripe webhook signature verification, allowing attackers to forge payment events and unlock accounts for free; and (2) missing customer.subscription.deleted handlers, which leaves users on paid subscription tiers after they cancel.
How is Vibe Code Detector different from general linters like SonarQube?▼
Traditional linters dump hundreds of minor stylistic warnings without prioritizing what actually breaks launch day. Vibe Code Detector isolates your Top 5 Launch Blockers, checks live deployed URLs alongside source code, and generates ready-to-run prompts that you can paste back into your AI coding tool to fix the issues immediately.