⏴ BB ⏵ INDEX
CASE STUDY·2026·LIVESOLO — DESIGN, ENGINEERING

Mergecraft

LLM-powered cross-PR retrospectives. Static SPA, no backend, no key custody, no telemetry.

STACK

  • Angular
  • TypeScript
  • Claude API
  • GitHub API
  • Signals
  • Static SPA
▦ IMAGE SLOT

Mergecraft analysis results showing cross-PR findings with citations

/work/mergecraft/hero.png

1600 × 900 PX

Cross-PR analysis output — every finding cites the specific PRs it's drawn from.

INTRO

An open-source tool that asks Claude to read across a batch of merged PRs and surface patterns a single-PR review can't see — recurring anti-patterns, review friction, author tendencies, churn hotspots. Every finding cites the PRs it's drawn from, with links back to GitHub.

The interesting constraint was self-imposed: no backend. The entire analysis pipeline runs in the browser — GitHub REST direct, Anthropic Messages API direct, user-supplied keys stored only in `localStorage`. That decision shaped everything downstream: cost previews became necessary, scan modes became explicit, architecture became the privacy guarantee.

01

SECTION

Cross-PR patterns, not single-PR observations

Most code-review tools look at one PR at a time. That's useful but it misses the patterns that only emerge in aggregate — the author who consistently ships 800-line diffs with two-line descriptions, the file that's been touched in 12 of the last 30 PRs, the review threads that keep relitigating the same architectural argument.

Mergecraft scoops up to 30 merged PRs in one batch, fetches metadata + reviews + inline comments locally, and asks Claude to find the *across-batch* signal. Output is structured: anti-patterns, review friction, author tendencies, churn hotspots — each with a list of citing PR numbers that render as clickable links back to the source. Findings without evidence get dropped before they're shown.

▦ IMAGE SLOT

Findings panel with anti-patterns, citations, and PR links

/work/mergecraft/findings.png

1400 × 800 PX

Every finding cites specific PR numbers. Click → GitHub.
02

SECTION

Architecture as the privacy guarantee

No backend means there is literally nothing to compromise. No proxy, no serverless function, no telemetry, no analytics. Your GitHub PAT and your Anthropic key live in your browser's `localStorage` and never leave it. Your PR data goes from GitHub straight to Anthropic — I never see it.

The trade-off is honest in the README: anything with browser access (a hostile extension, devtools running malicious code) can read `localStorage`. The benefit is the rest of the threat model collapses. There are no servers to breach, no logs to subpoena, no contract to violate. The recommended Content-Security-Policy locks the connect-src down to `api.github.com` and `api.anthropic.com` — anyone self-hosting can verify the network surface in a browser devtools tab in under a minute.

▦ IMAGE SLOT

Settings panel showing local key storage with explicit privacy disclosure

/work/mergecraft/settings.png

1200 × 900 PX

Keys live in localStorage. The trade-off is disclosed, not hidden.
▦ IMAGE SLOT

DevTools network tab showing only api.github.com and api.anthropic.com requests

/work/mergecraft/network.png

1200 × 900 PX

Two origins, both user-trusted. No middleman.
03

SECTION

Cost as a first-class UX concern

LLM tools that hide their costs train users to be afraid of every button. Mergecraft inverts that: before any analysis run, the cost preview calls Anthropic's free `count_tokens` endpoint and shows a `$0.04 – $0.09` range based on the actual selected batch and chosen model. You see what you're committing to.

Three scan modes (Shallow / Survey / Deep) make the data-cost trade-off explicit — Shallow sends metadata + reviews, Survey adds per-PR file lists for churn analysis, Deep adds truncated diffs (capped at 6KB per PR, skipped if >30 changed files). Three model tiers (Haiku 4.5, Sonnet 4.6, Opus 4.7) are listed with their actual $/MTok pricing, not marketing names. A 30-PR Shallow run on Haiku is ~$0.06; a 30-PR Deep run on Opus is ~$0.50. You know before you click.

▦ IMAGE SLOT

Cost preview showing $ range before committing to a run

/work/mergecraft/cost-preview.png

1400 × 800 PX

count_tokens (free endpoint) → $ range → informed click.
04

SECTION

Angular 21, signals, no state library

The frontend is Angular 21 — a deliberate choice in a React-saturated landscape. Built on Angular's native signals + dependency-injected services, with no external state management library. Two non-negotiable constraints, both stated in the contributing docs: no backend, no external state lib. Constraints force good design.

The payoff is a SPA that's small (~2.6k lines of TS/HTML/CSS), trivially self-hostable as a static bundle, and CI-gated with Prettier-blocking format checks. Build output goes straight to any static host — GitHub Pages, Netlify, Vercel, S3. The hosting README documents `_headers` and `_redirects` configs for Netlify and Cloudflare Pages alongside the recommended CSP.

OUTCOME

Shipped open source under MIT. ~2.6k lines of Angular + TypeScript, CI-gated, deployable as a static bundle to any host. Practical cost: $0.06 for a 30-PR Shallow scan on Haiku, $0.50 for a Deep scan on Opus. Zero infrastructure to maintain — the architecture is the operations plan.

05

EXHIBITS

CAPTURE / 01 OF 03

▦ IMAGE SLOT

PR selection screen with up to 30 merged PRs available

/work/mergecraft/select-prs.png

1200 × 900 PX

PR selection — up to 30 per batch.

CAPTURE / 02 OF 03

▦ IMAGE SLOT

Full analysis results with collapsible sections

/work/mergecraft/results.png

1200 × 900 PX

Results page — collapsible sections by finding type.

CAPTURE / 03 OF 03

▦ IMAGE SLOT

Local-only run history with summary previews

/work/mergecraft/history.png

1200 × 900 PX

History — local-only, summary previews of the last 20 runs.