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%
Run Automated Scan (60s)
Severity:
Showing 108 checks
SEC-001criticalHardcoded 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-002criticalHardcoded 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-003criticalHardcoded 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-004criticalHardcoded 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-005criticalHardcoded 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-006criticalHardcoded 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-007criticalHardcoded 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-008highHardcoded 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-009criticalHardcoded 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-010highHardcoded 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-001criticalBroken 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-002highBroken 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-003highBroken 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-004criticalBroken 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-005criticalBroken 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-006highBroken Authentication

Session Cookies Configured with HttpOnly, Secure, and SameSite

Agents set cookies using basic document.cookie or simple response headers without security flags.
AUTH-007highBroken 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-008mediumBroken 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-009criticalBroken 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-010criticalBroken 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-011highBroken 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-012criticalBroken 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-001criticalPayment & Webhook Integrity

Stripe Webhook Signature Verification Mandatory

Agents parse req.body as plain JSON and process checkout events without running stripe.webhooks.constructEvent().
PAY-002highPayment & 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-003criticalPayment & 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-004highPayment & 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-005criticalPayment & 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-006highPayment & 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-007highPayment & 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-008mediumPayment & 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-009criticalPayment & 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-01criticalAI 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-02highAI 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-03highAI 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-04criticalAI 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-05mediumAI 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-06mediumAI 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-07mediumAI 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-08highAI 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-09lowAI 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-10lowAI 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-001criticalInjection & 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-002criticalInjection & Input Validation

No dangerouslySetInnerHTML Without Strict Sanitization

When rendering markdown or rich text, agents render raw strings directly through dangerouslySetInnerHTML={{ __html: content }}.
INJ-003highInjection & 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-004criticalInjection & 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-005criticalInjection & 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-006criticalInjection & 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-007highInjection & 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-008mediumInjection & 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-009mediumInjection & 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-010lowInjection & 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-001criticalData 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-002highData 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-003highData 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-004mediumData 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-005mediumData 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-006lowData 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-007mediumData 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-008mediumData Privacy & Logging

Debug Logging Disabled in Production Builds

Developers leave verbose DEBUG=* or verbose logger configurations active when pushing to production hosts.
CFG-001highConfiguration & 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-002highConfiguration & 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-003mediumConfiguration & 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-004highConfiguration & 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-005mediumConfiguration & 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-006mediumConfiguration & Headers

Permissions-Policy Disables Unused Hardware Features

AI boilerplates omit the Permissions-Policy header, leaving camera, microphone, and geolocation permissions open by default.
CFG-007highConfiguration & 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-008mediumConfiguration & 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-001criticalAI 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-002highAI 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-003mediumAI 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-004criticalAI 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-005highAI 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-006mediumAI 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-007highAI 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-008mediumAI 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-001mediumCode 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-002lowCode 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-003lowCode 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-004highCode 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-005lowCode 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-006lowCode 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-007mediumCode 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-008highCode 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-001highError 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-002mediumError 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-003lowError 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-004highError 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-005mediumError 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-006mediumError 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-007highError 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-008mediumError 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-001highPerformance & 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-002mediumPerformance & 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-003mediumPerformance & 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-004highPerformance & 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-005mediumPerformance & 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-006mediumPerformance & Assets

Gzip or Brotli Compression Enabled on Production Server

Custom Express or VPS configurations miss compression middleware, serving uncompressed text and JSON payloads.
PERF-007highPerformance & 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-008lowPerformance & 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-009mediumPerformance & 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-001highDeployment & 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-002mediumDeployment & 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-003mediumDeployment & 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-004mediumDeployment & 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-005lowDeployment & 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-006lowDeployment & 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-007lowDeployment & 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-008criticalDeployment & 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.