Small card
A short title (about 40 characters), a clear scope and a list of what not to touch. One PR per card. If the scope grows midway, it becomes another card.
A card that grew midway became two: two smaller PRs, reviewed faster.
Process · version 1.0 · November 2026
The process and method behind 30+ design system and dark mode PRs now in production, and what I learned along the way. I own product and visual decisions; Claude acts as a senior developer; engineering reviews and merges.
Each card becomes one Claude session, in its own worktree, with a clear kickoff prompt and two checkpoints: the plan and the evidence. Claude handles everything else (code, checks, screenshots, tests, PR) and shows me the result. Commits and PRs happen only when I ask.
What changed the outcome most was making the decision boundary explicit: Claude settles anything technical and reversible on its own, and checks with me when the decision is about product or visuals, involves someone else, or can't be undone.
Ten steps in four phases. Pick a step on the timeline or use the arrow keys. Checkpoints are in yellow: Claude stops and waits for my call.
A short title (about 40 characters), a clear scope and a list of what not to touch. One PR per card. If the scope grows midway, it becomes another card.
A card that grew midway became two: two smaller PRs, reviewed faster.
One session per card, renamed with the ID and title so each one is easy to find in the sidebar, in a fresh worktree off an up-to-date main branch. Never an old branch: it shows screens that no longer exist.
Claude runs the team's setup: dependencies, internal libraries, environment variables and database.
DS-14 PR 3: sign-up fields
Before any screenshot, check where the environment is running from.
Instead of re-explaining the task from memory every time, paste a prompt with the goal, the visual reference, what's out of scope, the rules and the checkpoints. With the skill installed, it stays short.
The prompt generator builds one for a PR and one for the orchestrator.
Before editing any file, Claude sends the plan: files, the components it will use, what stays the same, and risks. I approve or correct it. It's the step that saves the most rework.
“Plan for DS-14: 3 files on the Orders screen. I'll swap the list's hardcoded background for the surface token and the status labels for the design system Badge; validation and payload stay the same. Risk: the yellow warning may lose contrast in light mode; I'll check it in the screenshots. OK to proceed?”
I follow along in the app's browser and check the screen in light and dark mode. Visual tweaks are my call.
The comparison layout and the performance criteria.
The team's checks, only on the packages touched: lint, types, tests, dead code. If the team requires documentation for visible changes, it goes in the same PR.
Global checks and large builds with the environment running overload the machine. Anything heavy runs with the environment stopped.
A separate reviewer (a subagent or another session acting as reviewer) looks only at the diff, hunting for bugs. If anything changes afterward, it runs again.
The second round often catches side effects introduced by the first round's fix.
Findings from the review bot: Claude fixes what's in scope and replies in the thread.
Comments from people: the conversation is mine. Claude brings the technical context for each point when I ask and applies what we agree on.
The method above didn't come out fully formed. Each rule came from something that went wrong, or that worked better than expected.
Without the comparison, fix-up work goes unnoticed: reviewers can't see what changed, and users never knew there was a problem. That's why evidence is a checkpoint, not an attachment.
A script counts, on every merge, how many uses of the old component remain, and a lint rule blocks new ones. Without that guardrail, five new files using the old component showed up in four days.
A performance run done hours apart showed a 21% regression that didn't exist. Once both branches were measured back to back, the difference disappeared.
The most serious bugs were on screens nobody had asked me to look at. Opening each screen to swap the component exposes what was already broken around it.
The AI rewrote a set of tabs to make them “cleaner” and broke the platform's identity. That became a rule: don't rebuild what already exists, and reuse the component from the reference screen.
A second session, looking only at the diff, found a bug that was already in production. Since then, the review runs again whenever something changes after it.
The number comes before the commitment. And each PR touches a single area, so it can be rolled back without undoing the rest.
When Claude makes a mistake that must not happen again, the fix goes into the project memory, along with the reason. Over time, the process lives in memories and rules files, and prompts get short.
The comparison is always the same grid: before on the left, after on the right; light on top, dark below. Reviewers spot the difference without reading a word.
Example: in dark mode, the list had a hardcoded light background and the status labels disappeared. After, it uses the surface token; light mode doesn't change. When the swap is invisible to users, like a forms library, the comparison shows the error state: the same messages, in the same place.
Each PR runs in its own session and worktree, but there's usually only one local environment: fixed ports, one database. Only one worktree can be running at a time. The orchestrator is its sole owner and decides who gets it.
Switching the environment by hand, PR by PR, didn't scale: every switch depended on someone being available right then, and PRs sat waiting. With the orchestrator owning the environment, the queue moves on its own.
STATUS.md, the status board for every PRDesign decisions, commits and PRs still come straight to me.
An afternoon with two PRs and the orchestrator. Step through it; the note below explains why each thing happens.
And how to avoid each one. The skill warns Claude about all of them.
git add -A with the environment running; stage only what's in scope and check the diff before pushing.Start with A. When the work is bigger than one PR, move on to B.
One PR, one person driving the session. No orchestration, evidence folder or scripts needed.
Setting up the local environment the first time is the hardest part: it's worth doing with someone from engineering.
An orchestrator running the whole workstream. For an area, a migration or a set of screens. You talk to a single session; it does the rest and calls you in at decision points.
Do path A at least once first, so you know the steps it will automate.
Version 1.0 · free · no sign-up
The skill makes Claude follow the process on its own; the guide walks through each step in plain language. Copy, download and adapt them to your team.
Or install it with one command, in the terminal where you run Claude Code:
Then fill in the team configuration at the top of the file (Claude asks about anything left blank the first time) and call it by name in a new session: “use processo-frontend on card DS-14” or /processo-frontend.
Loading…
Optional: get an email when a new version is out. Nothing else, no newsletter.
Done. I'll let you know when the next version is out.
Fill in, then copy. Missing fields show in yellow. Everything is saved only in this browser.
evidence-<card>.md# Evidence · <ID> <title> ## Screenshots Before (main) on the left, after (branch) on the right; light on top, dark below. - <screen>: default, error, disabled ## E2E for the area - Main: <x of y> · Branch: <x of y> - Pre-existing (already failing on main): <test and reason> ## Performance (both back to back, in the same window) | Screen | LCP before | LCP after | Difference | CLS before | CLS after | New long tasks | |-|-|-|-|-|-|-| ## Behavior - Validation, copy, payload and data-testid unchanged: <how it was checked> ## Checks - <lint, types, tests>: <result> - Didn't run, and why: <...> ## Independent review - Round 1: <findings and what changed> - Round 2: <if anything changed afterward>
Every technical term on this page. In the text, terms have a dotted underline; click one to see its definition.