📋 What was this drill?

Drill: Redesign the slop: take a generic SaaS landing page (gradient hero, 3 feature cards, emoji icons) and redesign it to avoid every anti-slop rule in claude-design. Target: same content, 10x less generic.

Interpretation: Built as Diffbind, an AI code review tool — the most cliché devtool SaaS archetype. The inversion anchors on a real annotated code diff (a seconds-vs-milliseconds bug caught) as the hero detail. Aesthetic: Resend/Vercel editorial restraint — warm-white canvas, one surgical terracotta accent, Inter + JetBrains Mono, no gradients or glass.

Open-source beta · installs in one PR

Code review that reads diffs like a senior engineer, not a linter.

Diffbind leaves comments on pull requests the way a careful reviewer would — pointing at the line, naming the bug, and saying why. No nitpicks about formatting, no noise on generated files.

Self-host on your own runner. .github/workflows/diffbind.yml
src/auth/session.ts feat/refresh
+9 −5 PR #482
38async function refresh(token: Token) {
39 const now = Date.now();
40- const expiry = token.iat + 3600;
40+ const expiry = token.iat + 3600 * 1000;
41 if (now > expiry) {
42+ return reissue(token);
43 }
44}
Bug · high Unit mismatch — seconds vs milliseconds
Date.now() returns milliseconds, but token.iat is a Unix timestamp in seconds. The old code compared seconds to milliseconds, so now > expiry was effectively always true — every token looked expired. Multiplying by 1000 fixes it. The added early return is correct.
Verified against test/session.spec.ts — this case has no coverage.
How it works

It reviews what changed, in the order a human would.

A linter runs rule-by-rule. A reviewer reads the diff, asks what the author is trying to do, and checks whether the change accomplishes it. Diffbind is built the second way.

01 — READS THE INTENT

Understands the change, not just the lines

It reads the commit message and the surrounding code to figure out the goal — a bug fix, a refactor, a new feature — then judges the diff against that goal, not against a style guide.

02 — POINTS AT THE LINE

Comments anchor to the exact line, with a reason

Every comment is a line-anchored review note: the file, the line, what's wrong, and why. Never a vague “consider reviewing this file.”

03 — STAYS QUIET BY DEFAULT

No nitpicks, no formatting, no generated files

It skips lockfiles, minified bundles, and anything in your .diffbindignore. If a diff has nothing to say, it says nothing — the PR gets a single quiet check.

2 open
1 nit
12 clear
session.ts · L40
Unit mismatch — seconds vs milliseconds
highbug
checkout.ts · L88
Float used for money — rounding risk
highbug
cache.ts · L12
Key omits user id — cross-tenant leak
medsecurity
users.test.ts · L4
New branch not covered by a test
lownit
What it catches

The bugs that slip past a green CI.

These are real categories Diffbind flags on diffs — the kind of thing a careful reviewer catches on a second read, not the kind a compiler warns about.

Unit & type confusion

Seconds vs milliseconds, cents vs dollars, bytes vs bits. The classic class of bug that compiles and passes tests.

Date.now() > iat + 3600 // ms vs seconds

Money as floating point

Currency stored or summed in float instead of integer minor units — a rounding error waiting to ship.

total = price * 0.8 // float money

Cross-tenant data leaks

Cache keys, query scopes, and auth checks that omit a user or org id — so one tenant can read another's data.

cache.get(slug) // no user_id in key

Uncovered new branches

When a diff adds a code path but no test exercises it. Diffbind checks the diff against the test diff, not just coverage totals.

+ if (retry) { ... } // no test

Secrets & keys in diffs

Pasted API keys, tokens, and private keys — caught by entropy and pattern, before the commit lands in history.

+ key = "sk_live_8f2..." // leaked

Unsafe migrations

Destructive schema changes without a backfill, non-nullable columns added to populated tables, dropped indexes on hot paths.

ALTER TABLE users DROP col; // no backfill
It caught a milliseconds-vs-seconds bug that three of us signed off on. That's the moment we stopped thinking of it as a linter.
MW
Maren Wahl
Staff Engineer, payments platform · 11-person team
Pricing
Free for open source, forever. Private repos from $12 per active developer, per month.

“Active developer” means someone whose pull requests Diffbind actually reviews in a given month — not every seat on your org. No annual contracts, cancel anytime.