audit tooling

I turned design handoffs from a trust fall into a checklist.


Forge reads a design handoff, grades it against our system, and hands back the fix. It's the front door to spec-driven development, where every surface is built by an AI swarm against specs and gates, not loose prompts.

  • Design System Lead & Sole Forge Maintainer
  • React, Vite, FastAPI, Shield (@ch/ui), Claude Design
  • Design systems, Tooling, Internal products
  • Accessibility, Fidelity, Developer experience
forge.charliehealth.dev/audits/practitioner-view
Upload
Audits
Guides
Handoffs
Auditspractitioner-view
Copy promptSaveShare
Path to green7 to decide
Components decided
13/20
Guideline violations
96 open
Ready to hand off.
Handoff
To decide · 7
Decided · 13
All
AppShell.jsx#AppRailNavneeds-work
Suggested reuse:Sidebar
100%
Reuse · SidebarReassign•••
Eligibility.jsx#ApptTypeChipnet-new
Suggested reuse:Badge
72%
Find a match•••
Eligibility.jsx#ApptTypesCa...needs-work
Suggested reuse:Card
60%
Reuse · CardReassign•••

The frustration

Every handoff was a trust fall.

We design in Claude Design using a Shield design-synced design system, then build with the Shield package. But between those two things there's a divergence: Claude Design recreates our components in monolithic JSX files, not in the composable primitives Shield actually ships. Nobody could see how far the output had drifted from the system, or translate it into something a swarm could read.

Swarm output
Claude Design output
Claude Design output
Swarm output

The insight

The handoff already knew what each component was supposed to be.

Our Claude Design exports weren't just pictures. Every element carried a data-design-symbol. If the handoff already knew what each component was supposed to be, I could compare it to the real Shield catalog and grade fidelity automatically. That one detail became the seed for Forge.

The handoff already knew what each component was supposed to be.

The tool

Canvas on the left, verdict cards on the right.

Forge takes a real Claude Design handoff, renders it live, and grades every component against Shield, with a verdict for each: reuse this Shield component, needs work, or genuinely new. It generates a fix prompt that you hand straight back to Claude to bring the screen in line. The output of an audit is a next step, not a to-do list.

Canvas on the left, verdict cards on the right.

The layer

Design fidelity as an enforced spec dimension.

Forge is the design-side front door to the SDD layer, the scaffold every engagement inherits, where the AI swarm builds against specs and gates instead of loose prompts. A forged surface doesn't stay a picture: it lands as a runnable @ch/ui prototype plus a design.yaml whose mapping table is the machine-readable contract.

From there the layer runs it: design-sync checks the mappings, the swarm builds the surface into its domain-scoped feature directory, and visual-fidelity verifies the build actually composes what the design promised. Shield is the linchpin, the one vocabulary spoken at every stage and the registry every gate validates against, so design and build can't disagree about what "correct" means.

Design fidelity as an enforced spec dimension.

The SDD layer

From design to a conformant PR, gated at every step.

Forge is the front door to spec-driven development. A forged surface becomes a machine-readable contract, and Shield is the shared vocabulary every gate validates against.

Design
ForgeDesigner turns a finished design into a runnable, instrumented @ch/ui handoff.
Contract
designs/The handoff + its design.yaml mapping table land in the SDD layer.
Gate
G.design-syncMappings verified: the right Shield components, resolvable.
Build
Swarm buildScion agents build the surface into its domain-scoped feature directory.
Gate
G.visual-fidelityRendered DOM checked against the design: composition and required parts.
Ship
PRA design-conformant pull request, ready for engineering review.
SHIELD · shared vocabulary at every step · registry every gate validates against

The screens

Shield & Forge

The problem

We design in Claude Design and build on Shield, our design system. But somewhere between the two, things quietly slipped. Every handoff was a trust fall, and nobody could actually see how close a build was to the system.

The first version

Handoff rendered live on the left. On the right, a card for every component with a verdict (reuse this Shield component, needs work, or genuinely new) and a path to green so progress felt tangible.

Handling real exports

Real exports are messy: multiple views bundled together, shared dependencies, whole apps that need to actually boot. Fixing import-maps and scoping each view to its own files was the unglamorous work that made Forge trustworthy instead of a demo.

The review experience

A 40-item audit is only useful if you can move through it. Every card is navigable: click one and Forge reveals the right view and isolates that component on the canvas. Guideline violations grouped by rule with counts and how-to-fixes.

Fix prompts

An audit that only lists problems creates work. Forge generates a fix prompt, a structured brief complete with reviewer notes and specific guideline violations, that you hand straight back to Claude to bring the screen in line.

A team object

Audits became living and shared. Once you share one, the state persists for everyone, anyone can edit, and an avatar shows who touched it last. Small touches that turned Forge from a solo tool into something a reviewer and builder could stand around together.

Closing the loop

A finished audit now opens a branch and PR straight from Forge, and Linear integration means an audit doesn’t just describe the work, it starts it. From handoff to ticket to code, one flow.

What I took away

Forge started as a designer’s frustration and turned into a full-stack product I shipped and maintained alone: frontend, backend, database, security, the whole thing. The biggest lesson wasn’t technical: it was that the unglamorous work is the work. The insight (design handoffs are inspectable) took an afternoon; making it trustworthy (booting real exports, failing closed, dogfooding end to end) took the rest. That’s the part that decides whether a tool gets used or gets bookmarked.

I also came away convinced that the best design-systems work happens between the tools, not inside any one of them. Forge lives in the seam between Claude Design and Shield, and its whole value is making that seam visible. As a designer, being able to build in that gap myself, instead of writing a spec and hoping, changed what kinds of problems I could take on.