Design reading layer
Pulls nodes, hierarchy, fills, strokes, text, variables, and bounding boxes from the Figma file.
nodes · fills · strokes · bbox · variables
A working plugin is the proof. The real story is the workflow that produced it.
Every WCAG criterion that can be checked from the design runs against the selected Figma frame in one click — contrast, target sizes, focus visibility, labels, image semantics. No browser, no export, no API call. The audit happens in the file where the designer is already working.
Going beyond contrast meant teaching the plugin to read design structure, state, intent, and evidence.
Pulls nodes, hierarchy, fills, strokes, text, variables, and bounding boxes from the Figma file.
nodes · fills · strokes · bbox · variables
Walks ancestor groups and surfaces to find the true background behind any text or shape.
parent walk · ancestor surface · alpha blend
Combines geometry, regex, and component naming to classify inputs, buttons, links, and image-text candidates.
regex · geometry · component names · clickables
Runs every non-AI WCAG check and emits a pure DTO of pass, flag, or unable-to-test outcomes.
WCAG checks · pure DTO · pass/flag/unable
Diffs default, focus, and error variants to catch missing focus rings and color-only error states.
variant tree · focus · error · diff
Explicit include and exclude marks let designers override static inference when intent cannot be read from geometry.
include · exclude · intent override
A vision LLM handles image-of-text and visual review cases that deterministic rules cannot resolve.
vision LLM · image bytes · master prompts
A single VisionProvider interface hides API, CORS, auth, and JSON-mode differences across three LLM vendors.
VisionProvider · CORS · JSON mode
Copy-debug reports, tests, and per-user key storage make the tool inspectable in real workflows.
copy debug · tests · clientStorage
Plan in markdown first. Structured context bounds the model — less hallucination, less rework, fewer false starts.
Variant audit ships opt-in. Deterministic code can’t infer component intent, so the plugin asks instead of guessing.
The workshop reset the scope. One standard became three: WCAG 2.1 AA + GIGW 3.0 + IS 17802.
Designers override the classifier. A Frame named “ctaBlock” might be a button — trust the marker, not the inference.
Every arrow in that flowchart was one thing: giving the AI the right context at the right time.
Make the task explicit in markdown before asking the AI to execute it.
Turn raw material into artifacts both humans and AI can reason over.
Plans are living context, rewritten as you go — not one-time setup.
AI was never just plugged in — each shape had to be understood and shaped before it produced value.
Unstructured input → structured artifacts
Raw workshop recordings became usable project context.
Tool-context before leverage
I didn’t just ask AI to inspect Figma — I first understood what MCP returned and designed around that structure.
AI inside the product
Runtime AI is opt-in, BYO-key, prompt-controlled, and labelled opinion — not measurement.