Hone your code reviews.

Writing code got easier. Reviewing it didn’t.

YO You requested changes

Practice on real PRs and build the judgment that teams and interview loops actually grade you on.

Real PRs in 40+ languages & frameworks.
First 3 reviews free, no card.

Why now
32.7%

of AI-generated PRs get merged. For human-written PRs it’s 84.4%.

Source: LinearB 2026 Benchmarks, 8.1M PRs

The bottleneck moved from writing code to reviewing it.

AI writes code faster than any team can read it. The scarce skill is no longer writing the solution. It’s the judgment to catch what the model gets subtly, dangerously wrong, and it’s what staff-level loops increasingly probe for.

How it works

Read it. Flag it. Get the verdict.

Every session is a real PR. You review it like you would at work, then get graded on what mattered.

Field guide

What slips through review.

Challenges hide defects like these inside full PRs. You learn to spot them by pattern, not by luck.

SQL injection

blocking
db.query(`… WHERE id = ${id}`)

User input glued into SQL. One request and the table is theirs.

Missing await

blocking
const ok = checkQuota(user)
if (ok) upload(file)

A Promise is always truthy, so the quota never says no.

Unverified JWT

blocking
const p = jwt.decode(token)
if (p.role === 'admin') next()

Decoded is not verified. Anyone can mint themselves admin.

Race condition

major
const bal = await getBalance(id)
await setBalance(id, bal - amt)

Two requests read the same balance. Double spend.

N+1 query

major
for (const o of orders)
o.user = await db.users.find(o.userId)

One query per row. Fine in dev, on fire in prod.

Off-by-one

minor
for (let i = 0; i <= items.length; i++)

Reads one past the end and hands undefined downstream.

Your profile

Know your blind spots.

The engine learns where you slip, like missed concurrency bugs, security holes, or approving changes you should have blocked, so you know exactly what to practice next.

Your weak spots last 30 reviews
Auth & security holes high
Missed 4 of 6 recently.
Approving risky changes high
Approved 2 PRs that needed changes.
Trusting unvalidated input medium
Missed 3 of 7 recently.
Tracks

Practice with your stack.

Guided tracks of real reviews in popular stacks. Finish every challenge in a track and earn the badge.

Browse all tracks ›
Pricing

Practice until the catch is automatic.

Your first 3 challenges are free, no card required.

Monthly
$19 /mo

Unlimited reviews, every difficulty tier, and practice aimed at your weak spots.

Get started
3-Month Sprint For interviewing
$45 one-time

No auto-renew. Full access for an active interview season.

Start the sprint
Yearly Save 37%
$144 /yr

About $12/mo, auto-renews. Everything in Monthly for less.

Get started
Cancel anytime
FAQ

Questions, answered.

See all FAQs ›
Goodcatch is a code-review practice app. You review real pull requests, then get graded on what you caught, what you missed, and where you spent review you didn't need to. It's the same judgment senior and staff loops test.
Goodcatch

Find it before it ships.

Hone your code reviews on real PRs. First 3 challenges free, no card required.