The QA education layer for AI-assisted development

Build fast.
|

VibeQA runs two AI agents on every scan — one reads your source code, one operates a real browser on your live site — then explains exactly what's wrong and teaches you why it matters.

2agents — code + browser
100+quality checks explained
0config files needed
The vibe coding blind spot

AI writes the code.
But who checks the code AI writes?

Vibe coding — using AI assistants to generate features at speed — is incredibly powerful. But AI models are optimised to make code that works, not code that is secure, observable, and production-ready. Two entire coverage gaps are almost always left open.

Gap 1 — Static code quality

What the AI never mentions

AI assistants generate route handlers, auth flows, and API endpoints — but they routinely skip:

  • Input validation on every parameter
  • Rate limiting to prevent abuse
  • CSRF tokens on state-mutating routes
  • Standardised error response shapes
  • Idempotency keys on payment endpoints
  • Request ID logging for debugging

These aren't bugs — the code runs fine. They're the gaps that let attackers in and make production incidents impossible to debug.

Gap 2 — Runtime behaviour

What only a real browser finds

Code review tells half the story. A browser agent finds the other half by actually using your app:

  • Images missing alt text (accessibility)
  • Forms that submit with no feedback
  • Loading states that never resolve
  • Mobile layout broken at 375 px
  • Console errors on page load
  • Redirect loops after login

No static analyser can see these. You need a real browser to run the flows a user would actually take.

See it in action

Both agents, running in parallel

One combs your repository. One drives your live site. Every finding links back to the code — with a plain-English explanation of the risk.

Code analysis agent

vibeqa — analysis

$ vibeqa analyze github.com/my-app

✓ Fetching repo tree (243 files)...

✓ Static checks: endpoints, auth, validation

✓ AI report generated (GPT-4.1)

↳ Browser agent launched at https://my-app.com

✓ 18 issues found · 3 P0 · 8 P1 · 7 P2

✓ Each issue includes: why it matters + fix steps

Issue detail — with education built in

vibeqa.app / issues / P0-001
P0Missing CSRF protection on /api/auth/login

Why it matters

An attacker can craft a page that silently submits a login form on behalf of a visitor, hijacking their session without any interaction.

Evidence — app/api/auth/login/route.ts:12

export async function POST(req: Request) {

// ← no origin / csrf token check

const { email, password } = await req.json();

Fix steps

Verify Origin / Referer header server-side
Add a CSRF token signed with your session secret
Reject requests where Origin doesn't match your domain
What VibeQA teaches you

Every finding is a lesson,
not just a ticket.

Most QA tools hand you a bug list. VibeQA explains the why behind every issue — so you ship the fix and understand the pattern well enough not to repeat it.

01

Understand the security model behind each check

Every security finding links to the attack vector it prevents. CSRF, injection, auth bypass — explained in plain English, not CVE numbers.

02

See the real user impact before it happens

Each issue shows the user-facing consequence: 'a visitor sees a blank screen', 'a screen reader can't navigate this page', 'an attacker can brute-force passwords'.

03

Get concrete fix steps, not vague advice

Every P0–P2 issue includes implementation steps and acceptance criteria you can paste into AI assistant prompts to generate the fix.

04

Learn the framework-specific best practice

Checks are tuned to your stack: Next.js App Router, Express, FastAPI. You learn the right pattern for your specific setup, not generic advice.

Before — what the AI generated

1export async function POST(req: Request) {
2 const { email, password } = await req.json();← no validation
3 const user = await db.users.findFirst({
4 where: { email }
5 });
6 // ... auth logic← no rate limit
7}

Unvalidated input + no rate limit = brute-forceable login endpoint

After — following VibeQA guidance

1export async function POST(req: Request) {
2 await rateLimit(req, { max: 10, window: '15m' });
3 const body = LoginSchema.safeParse(await req.json());
4 if (!body.success)
5 return NextResponse.json({ error: body.error }, { status: 400 });
6 // ... auth logic
7}

Validated input, rate-limited, standardised error shape

Common issue types vibe coders miss

The patterns AI assistants skip

These aren't rare edge cases. They appear in the majority of AI-generated codebases — and every one of them has a simple fix once you know what to look for.

P0Security — Auth

No rate limit on POST /api/auth/login

Without a rate limit, any attacker can try millions of password combinations. 10 lines of middleware prevents account takeover.

P0Security — CSRF

State-mutating route accepts any Origin

A malicious site can silently submit forms as your logged-in users. One Origin check blocks the entire attack class.

P1Validation

req.json() used without Zod / schema parse

Unvalidated input is the root cause of most injection and type-coercion bugs. A 5-line Zod schema eliminates the entire input surface.

P1Observability

No request ID attached to log entries

Without a request ID you cannot correlate a user complaint to a server error. Every failed request becomes a mystery.

P1Accessibility

<img> tags missing alt attribute

Screen readers announce 'image' to blind users. Alt text is a 10-second fix that opens your product to millions of users.

P2API Design

GET /api/items returns all rows with no limit

As data grows, this query will time out or OOM your server. Pagination with a max-limit cap is a one-time fix.

How it works

Connect a repo. Get a curriculum.

01

Drop your GitHub repo

Pick from your connected repos. No write access, no OAuth scopes beyond 'read'. The agents fetch the tree and get to work.

02

Two agents audit in parallel

The code agent scans endpoints, patterns, and stack. The browser agent navigates every route of your live site — clicking, submitting, observing.

03

Read your personalised issue guide

Issues arrive prioritised P0–P2, each with: the vulnerability class, user impact, code evidence with line numbers, and step-by-step fix guidance.

Free for any public or private GitHub repo

The fastest way to level up
your vibe-coded projects.

Connect your GitHub repo. In under two minutes, get a full code + browser audit — with explanations that make you a better builder, not just a faster one.

Security patterns explained
Why each issue matters
Fix steps you can act on