Run the accessibility pass on the design artifact before it ships to engineering: deterministic contrast tools, target sizes, focus-order annotation and AI-drafted alt text — every finding verified against WCAG, nothing shipped on AI's word. Fixing a contrast failure in Figma costs minutes; fixing it in production costs a sprint.
Workflow area: Accessibility & Design QA · Tier: Core · Hands-on time: ~35 minutes
Most accessibility review happens too late — on the built product, where every finding is a ticket, a re-test and an argument about priority. The artifact-side gate moves the pass upstream to the Figma file, where you still own every pixel. The division of labor matters: contrast and target sizes are math, so deterministic tools decide them; focus order, alt text and semantic structure are judgment, so AI drafts and you verify against WCAG. An LLM eyeballing "does this look accessible?" is neither — never let it be the checker for anything a checker can compute.
Run the deterministic checks first — no AI involved. In Figma, run Stark or axe for Designs across the flow: text and UI-component contrast (WCAG 1.4.3 / 1.4.11), touch-target sizes (24×24 CSS px minimum under WCAG 2.2's 2.5.8; 44pt against Apple's HIG), and text-resize risk on fixed-height containers. These are computations. Record every failure with its frame and layer. This list is fact, not opinion.
Annotate focus order and semantics — AI drafts, you decide. Screenshot each screen and ask a vision model for a draft:
Here is a screenshot of one screen from [FLOW]. Draft accessibility
annotations for engineering handoff:
1. FOCUS ORDER: propose a numbered keyboard focus sequence for all
interactive elements. Flag anything whose visual position would
make the DOM order ambiguous.
2. HEADING STRUCTURE: propose heading levels (h1–h4) for the text
that is structurally a heading; flag styled-as-heading text that
is not one.
3. LANDMARKS/ROLES: nav, main, dialog, alert — what applies here?
4. STATES: which elements need visible focus, and which convey
meaning by color alone (WCAG 1.4.1 risk)?
Number your proposals so I can accept/reject each individually.
Do not evaluate color contrast — that is already measured.
Walk the proposed focus order with your own tab-key logic; the model often orders by visual layout when the interaction logic demands otherwise (e.g., a dialog's confirm before its dismiss). Correct it, then annotate the frame — numbered focus badges, heading levels, roles — using your annotation kit of choice.
Draft alt text with context, verify by hand. For every meaningful image, feed the model the image plus its purpose in the flow — alt text describes function, not pixels:
Write alt text for this image. Context: it appears on [SCREEN],
its purpose is [WHY IT'S THERE]. Rules: under 125 characters,
function over appearance, no "image of", and return "decorative —
empty alt" if it adds no information a user needs.
Then verify each one yourself: does it say what a user who can't see the image needs on this screen? Mark genuinely decorative images as such — empty alt is a decision, not an omission.
Compile the findings table, mapped to WCAG. Merge the deterministic failures and your accepted annotations into one table: finding, frame/layer, WCAG criterion, severity, fix. Have the model format and map the criteria numbers, then spot-check the mappings — models misattribute criteria numbers often enough that an unchecked mapping is a liability in any audit conversation.
Fix in the file, then gate. Contrast and target failures get fixed now, in Figma — that is the entire point of artifact-side. The annotated file plus the findings table ships as the handoff; anything deferred is logged with an owner, not silently dropped. The gate passes when the table is empty or every open row has a name on it.
Accessibility review protects real users with real stakes — never let "the AI checked it" close a finding. AI drafts and accelerates; deterministic tools measure; a human is accountable for every pass.
Split the gate by nature of the check: math to the plugins, drafting to the model, judgment and accountability to you — and run it artifact-side, where every fix is still just an edit.