{"slug": "show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps", "title": "Show HN: Vibecheck – a pre-launch security audit for AI-built apps", "summary": "A new open-source tool called Vibecheck scans AI-generated applications for security flaws before launch, citing a January 2026 incident in which a vibe-coded social network exposed 1.5 million API tokens and 35,000 email addresses after a Supabase key was left in the front end with Row Level Security disabled. Vibecheck pairs a zero-dependency scanner with 60+ checks with an AI agent that verifies findings, traces attack flows and removes false positives, then assigns a 0-100 Launch Score with a NO-GO, FIX FIRST or GO verdict. The tool also ships copy-paste fix prompts for Claude Code, Cursor, Lovable, Bolt, v0 and Replit, a hook that blocks agents from hardcoding API keys or committing .env files, and deploy checks for missing host environment variables and case-sensitive import errors.", "body_md": "**Your AI wrote the app. vibecheck makes sure it doesn't leak your users' data, or your wallet.**\n\n[Install](#install) ·\n  [What it catches](#what-it-catches) ·\n  [Commands](#commands) ·\n  [Guard](#the-guard-always-on) ·\n  [CI](#use-it-in-ci) ·\n  [🇮🇩 Bahasa Indonesia](https://github.com/ribato22/vibecheck/blob/main/README.id.md)\n\nIn January 2026, a vibe-coded social network exposed **1.5 million API tokens and 35,000 email addresses**. One Supabase key sat in the front-end, and Row Level Security was off ([Wiz](https://www.wiz.io/blog/common-security-risks-in-vibe-coded-apps), [Infosecurity](https://www.infosecurity-magazine.com/news/moltbook-exposes-user-data-api/)). In 2025, **170+ Lovable apps** shipped with the same hole ([CVE-2025-48757](https://nvd.nist.gov/vuln/detail/CVE-2025-48757)). Every week, someone finds out their OpenAI key was in the JavaScript bundle by reading their bill.\n\nAI tools write code that **works**. Nobody checks that it's **safe**. vibecheck is the senior engineer who reviews your app before you hit deploy, in plain language, with the fixes ready to paste.\n\n- 🚦 **A Launch Score and a verdict.** 0 to 100, plus 🔴 NO-GO, 🟡 FIX FIRST or 🟢 GO, so you know if you can ship today.\n- 🔍 **A real audit, not regex soup.** A zero-dependency scanner (60+ checks) finds the leads fast. Your AI agent then reads the code to verify each one, traces attack flows like \"can user A read user B's data?\", and drops the false positives.\n- 🗣️ **Plain language.** Every finding starts with*what can happen* (\"anyone can read every private message\"), then the technical detail. Reports come in the language you write in.\n- 📋 **Copy-paste fix prompts.** Every finding has a ready prompt for Claude Code, Cursor, Lovable, Bolt, v0 or Replit, so it helps even if your app lives in a no-code builder.\n- 🛠️ **`/vibecheck:fix`.** Fixes issues one at a time, criticals first, verifies each one, and never \"fixes\" by weakening security.\n- 🛡️ **An always-on guard.** A hook stops your agent from hardcoding API keys or committing`.env`*before* it happens.\n- 🚀 **`/vibecheck:deploy`.** Catches \"works on my machine, broken in production\" before you deploy: env vars missing on the host, hardcoded localhost URLs, imports whose letter case only works on a Mac, packages missing from package.json, servers on the wrong port, SQLite on serverless, and the dashboard steps people forget.\n- 🧭 **`/vibecheck:unstuck`.** Breaks the \"AI fix loop\" when the same bug keeps coming back.\n\n| Area | Examples | \n|---|---|\n| 🔑 **Secrets** | OpenAI / Anthropic / Stripe / AWS / Supabase keys in code; secrets behind `NEXT_PUBLIC_` /`VITE_` /`EXPO_PUBLIC_` ;`.env` committed now or in git history | \n| 🗄️ **Database** | Supabase tables without RLS, `using (true)` policies, users editing their own`is_admin` , policies trusting`user_metadata` ; Firebase \"test mode\" and open rules; the service-role key in browser code | \n| 🔐 **Auth** | API routes and server actions without a server-side check, IDOR (reading other people's records), admin by client flag, middleware-only auth, `jwt.decode` without verify | \n| 💸 **Money** | AI calls from the browser ( `dangerouslyAllowBrowser` ), paid APIs with no rate limit (\"denial of wallet\"), prices taken from the request, unverified Stripe / Midtrans / Xendit webhooks, premium unlocked from a success URL | \n| 🧱 **Input** | SQL injection, mass assignment, XSS via `dangerouslySetInnerHTML` and AI output, SSRF, shell injection, prompt injection through tools | \n| 🚀 **Config** | `CORS *` with credentials, debug mode, public source maps, disabled TLS checks, missing security headers, hallucinated npm packages | \n| 🛟 **Reliability** | No git, no backups, no error monitoring, schema not in migrations, no lockfile | \n| 🌍 **Launch** | Privacy policy and terms, account deletion (App Store), OG tags, sitemap, robots, 404, favicon, analytics, email DNS | \n| 🚀 **Deploy** | Env vars not set on the host, `localhost` URLs,`import './button'` vs`Button.tsx` (breaks on Linux), undeclared packages, fixed ports and`127.0.0.1` in containers, SQLite and disk writes on serverless, Prisma client not generated, Node version and lockfile mismatches | \n\nDeepest coverage: **Next.js, React/Vite, Supabase, Firebase, Stripe, OpenAI/Anthropic/Gemini, Express, FastAPI/Flask/Django, Expo**, with **Midtrans and Xendit** for Indonesian payments. The generic checks work on any stack.\n\n```\n/plugin marketplace add ribato22/vibecheck\n/plugin install vibecheck@vibecheck\nnpx skills add ribato22/vibecheck\n```\n\nCopy the folders in `skills/` into `~/.claude/skills/` (or your agent's skills folder).\n\n| Command | What it does | \n|---|---|\n| `/vibecheck:check` | Full audit → score, verdict and `.vibecheck/report.md` with fix prompts | \n| `/vibecheck:check quick` | 2-minute pre-deploy check: secrets, database access and criticals | \n| `/vibecheck:check security` | Security areas only | \n| `/vibecheck:check launch` | Launch checklist (legal, SEO, monitoring) plus any critical | \n| `/vibecheck:fix` | Fix criticals, then highs, one at a time, with before → after score | \n| `/vibecheck:fix VC-DB-NO-RLS` | Fix one specific finding | \n| `/vibecheck:deploy` | Will it run in production? Env vars vs the host, localhost URLs, case-sensitive imports, ports, serverless storage, plus the host checklist → `.vibecheck/deploy.md` | \n| `/vibecheck:deploy --host vercel` | Same, with host-specific checks (vercel, netlify, cloudflare, railway, render, fly, heroku, docker, or `local` for apps that only run on your machine) | \n| `/vibecheck:unstuck` | Stop the fix loop: reproduce, find the root cause, revert the pile | \n\nYou don't have to remember them. Ask *\"is my app ready to launch?\"*, *\"why does it work locally but not on Vercel?\"* or say *\"it's still broken, you keep going in circles\"* and the right skill kicks in. In other agents, call the skill by name (`check`, `deploy`, `fix`, `unstuck`).\n\nWith the Claude Code plugin, vibecheck watches every file write and every `git commit` / `git push` your agent makes:\n\n```\nvibecheck guard blocked this: it would put secrets where they do not belong.\n\n  - OpenAI API key sk-p…9xQz in src/lib/ai.ts:3\n  - NEXT_PUBLIC_OPENAI_API_KEY has a browser-public prefix, so its value ships to every visitor (.env:2)\n\nFix:\n  1. Put the secret in .env (gitignored) and read it with process.env.NAME in server-only code.\n  2. Keep browser-public prefixes (NEXT_PUBLIC_, VITE_, EXPO_PUBLIC_...) for values that are safe to publish.\n```\n\nThe agent reads that message and fixes it itself. The guard blocks only high-confidence key formats, allows secrets in `.env`, and checks every unpushed commit (not just the last one). Silence a false positive with a `vibecheck-ignore` comment on the line, or turn the guard off with `VIBECHECK_GUARD=off`.\n\nThe scanner is a single Node file with no dependencies:\n\n```\nnode skills/check/scripts/scan.mjs ./my-app                     # human-readable\nnode skills/check/scripts/scan.mjs ./my-app --json              # for tools and agents\nnode skills/check/scripts/scan.mjs . --fail-on critical         # exit 1 on high-confidence criticals\n# .github/workflows/vibecheck.yml\nname: vibecheck\non: [push, pull_request]\njobs:\n  scan:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v5\n        with: { fetch-depth: 0 }   # full history, so .env files committed in the past are caught\n      - uses: actions/checkout@v5\n        with: { repository: ribato22/vibecheck, path: .vibecheck-tool }\n      - uses: actions/setup-node@v5\n        with: { node-version: 22 }\n      - run: node .vibecheck-tool/skills/check/scripts/scan.mjs . --fail-on critical\n```\n\nGot a 🟢 GO? Add the badge to your README:\n\n```\n[![vibecheck: GO 92/100](https://img.shields.io/badge/vibecheck-GO%2092%2F100-brightgreen)](https://github.com/ribato22/vibecheck)\n```\n\nOnly GO apps get a badge. A public \"NO-GO\" badge would tell attackers where to look.\n\nA security tool should never be the security problem.\n\n- **The audit is read-only.** It writes only to`.vibecheck/` , which ignores itself in git. Fixes happen only in`/vibecheck:fix` , after you agree.\n- **Zero dependencies, zero network calls** , and it never runs your project's code. About 1,000 lines of plain JavaScript you can read in 15 minutes:[`rules.mjs`](https://github.com/ribato22/vibecheck/blob/main/skills/check/scripts/rules.mjs) ,[`scan.mjs`](https://github.com/ribato22/vibecheck/blob/main/skills/check/scripts/scan.mjs) ,[`guard.mjs`](https://github.com/ribato22/vibecheck/blob/main/hooks/guard.mjs) .\n- **Secrets are always masked** (`sk-p…9xQz` ) in output, reports and guard messages.\n- **The guard fails open.** If it crashes, your work continues.\n\nFound a vulnerability in vibecheck itself? Please report it privately: see [SECURITY.md](https://github.com/ribato22/vibecheck/blob/main/SECURITY.md).\n\n**Does this replace a penetration test?**\nNo. It catches the mistakes AI tools make most often, and that's most real-world vibe-coding breaches. If you handle health, financial or children's data, get a professional review too.\n\n**Does it send my code anywhere?**\nThe scanner doesn't touch the network. The skills run inside the AI agent you already use, like any other prompt.\n\n**It flagged something that's fine.**\nAdd `// vibecheck-ignore` (or `# vibecheck-ignore`) on that line. Put `vibecheck-ignore-file` in the first lines to skip a whole file, such as test fixtures. Then open an issue so the rule gets better.\n\n**My app was built in Lovable / Bolt / v0 / Replit.**\nExport or sync it to GitHub, open it with any supported agent, and run the check. Paste the fix prompts back into your builder.\n\nNew rules, stack guides and false-positive reports are very welcome. See [CONTRIBUTING.md](https://github.com/ribato22/vibecheck/blob/main/CONTRIBUTING.md). Each rule ships with a test. Run them with `npm test` (Node 18+, no install needed).\n\n- Official GitHub Action\n- More stack guides: Convex, Clerk, Auth.js, Better Auth, Laravel, Rails\n- Live checks (security headers, open Supabase tables) behind an explicit opt-in\n\n  If vibecheck caught something before your users did, a ⭐ helps other builders find it.\n\n<sub>MIT © vibecheck contributors · Not affiliated with Anthropic, Supabase, Firebase, Stripe or any other vendor named here.</sub>", "url": "https://wpnews.pro/news/show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps", "canonical_source": "https://github.com/ribato22/vibecheck", "published_at": "2026-10-29 13:05:36+00:00", "updated_at": "2026-10-29 13:16:55.312315+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "ai-safety", "developer-tools", "ai-products"], "entities": ["Vibecheck", "Supabase", "Wiz", "Infosecurity", "Lovable", "CVE-2025-48757", "Claude Code", "Cursor"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps", "markdown": "https://wpnews.pro/news/show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps.md", "text": "https://wpnews.pro/news/show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps.txt", "jsonld": "https://wpnews.pro/news/show-hn-vibecheck-a-pre-launch-security-audit-for-ai-built-apps.jsonld"}}