Skip to content

DOMAIN:DESIGN:FIGMA_HANDOFF

OWNER: alexander (Design System Engineer, shared) ALSO_USED_BY: floris, floor, felice UPDATED: 2026-03-26 SCOPE: design-to-code workflow, Figma Dev Mode, component inspection, asset export, design QA PREREQUISITE: design-system-engineering.md (DESIGN.md is the SSOT for agents)


FIGMA_HANDOFF:CONTEXT_FOR_GE

CRITICAL: in GE's agentic workflow, DESIGN.md is the primary design specification — NOT Figma REASON: agents cannot see Figma files — they read structured text specifications ROLE_OF_FIGMA: Figma is alexander's design tool for visual exploration and human review ROLE_OF_DESIGN_MD: DESIGN.md is the machine-readable output that developers consume

FLOW:

Alexander designs in Figma
  → Dirk-Jan reviews Figma visuals (human approval)
  → Alexander translates to DESIGN.md (machine-readable spec)
  → Agents implement from DESIGN.md
  → Felice does visual QA comparing implementation to Figma

RULE: anything in Figma that is NOT in DESIGN.md does NOT exist for development agents RULE: any discrepancy between Figma and DESIGN.md — DESIGN.md wins for agents, Figma wins for visual intent


FIGMA_HANDOFF:DEV_MODE

WHAT_IS_DEV_MODE

WHAT: Figma's developer-facing environment for inspecting designs FEATURES: component properties, token values, spacing measurements, code snippets, status workflows ACCESS: requires Figma paid seat with Dev Mode enabled

DEV_MODE_CAPABILITIES

INSPECT: click any element to see its properties (color, spacing, typography, effects) FOCUS: isolate a component in Focus View to see it without surrounding context STATUS: designers mark frames as "Ready for dev" — only ready frames appear in Dev Mode view HISTORY: see when a frame was last edited, compare versions side-by-side CODE: copy CSS/Swift/Android code snippets (as starting point, not production code) TOKENS: when Figma Variables are used, Dev Mode shows token names instead of raw values

HOW_GE_USES_DEV_MODE

USE: alexander inspects his own designs to extract precise values for DESIGN.md USE: felice uses Dev Mode to compare implementation against design during visual QA USE: Dirk-Jan reviews designs in presentation mode (not Dev Mode) NOT_USED_BY: floris, floor, or any development agents — they use DESIGN.md


FIGMA_HANDOFF:COMPONENT_INSPECTION

WHAT_TO_EXTRACT

FROM_FIGMA: component name, variant, size FROM_FIGMA: color tokens (mapped to design token names) FROM_FIGMA: spacing (padding, margin, gap) FROM_FIGMA: typography (font family, size, weight, line height, letter spacing) FROM_FIGMA: border (width, color, radius) FROM_FIGMA: shadow (offset, blur, spread, color) FROM_FIGMA: layout (flex direction, alignment, gap) FROM_FIGMA: responsive behavior (constraints, auto-layout settings)

EXTRACTION_CHECKLIST

CHECK: component name matches shadcn/ui component name (if using standard component) CHECK: all colors map to defined design tokens (no raw hex values) CHECK: spacing values align to 4px grid CHECK: typography uses defined type scale CHECK: border radius uses defined radius tokens CHECK: hover/focus/active/disabled states are all designed CHECK: empty, loading, and error states are designed CHECK: responsive variants are specified (mobile, tablet, desktop)


FIGMA_HANDOFF:SPACING_AND_SIZING_EXTRACTION

READING_SPACING_IN_FIGMA

METHOD: select element, hold Alt/Option, hover over adjacent element to see distance METHOD: select frame with auto-layout to see padding, gap values METHOD: use Dev Mode inspect panel for precise measurements

MAPPING_TO_TOKENS

RULE: every extracted spacing value must map to a spacing token RULE: if a value does not map to an existing token, flag it — do not create ad-hoc values

Figma Value Token
4px --spacing-1
8px --spacing-2
12px --spacing-3
16px --spacing-4
20px --spacing-5
24px --spacing-6
32px --spacing-8
40px --spacing-10
48px --spacing-12
64px --spacing-16

IF value does not match a token (e.g., 13px): OPTION_1: adjust design to nearest token value (12px or 16px) OPTION_2: add new token to primitive scale (requires alexander approval) OPTION_3: document as exception in DESIGN.md with justification


FIGMA_HANDOFF:ASSET_EXPORT

ICONS

FORMAT: SVG (always) SIZE: designed at 24x24 base, scalable OPTIMIZATION: run through SVGO before commit NAMING: kebab-case matching component usage (e.g., icon-arrow-right.svg) DELIVERY: committed to project repo in public/icons/ or equivalent ACCESSIBILITY: every icon used as meaningful content must have aria-label or accompanying text

IMAGES

FORMAT: WebP (primary), PNG (fallback), JPG (photos only) EXPORT: 1x and 2x resolution OPTIMIZATION: compress before commit (imagemin, squoosh) NAMING: descriptive kebab-case (e.g., hero-dashboard-preview.webp) RESPONSIVE: export at multiple widths for srcset

LOGOS

FORMAT: SVG (primary), PNG (fallback at multiple sizes) VARIANTS: full logo, icon only, monochrome, inverse (for dark backgrounds) DELIVERY: committed to project repo, referenced in DESIGN.md

ILLUSTRATIONS

FORMAT: SVG when possible, PNG for complex illustrations STYLE: defined in DESIGN.md (consistent illustration style per project) DELIVERY: committed to project repo


FIGMA_HANDOFF:DESIGN_SPECS_IN_DESIGN_MD

WHAT_ALEXANDER_WRITES

For every screen/component, DESIGN.md must include:

SECTION: component selection (which shadcn/ui component, or custom) SECTION: token assignments (which design tokens apply) SECTION: layout specification (flex/grid, alignment, gaps) SECTION: responsive behavior (what changes at each breakpoint) SECTION: state specifications (default, hover, focus, active, disabled, loading, error, empty) SECTION: accessibility notes (ARIA attributes, keyboard interaction, screen reader behavior) SECTION: animation specification (if any — with prefers-reduced-motion note)

EXAMPLE_SPEC

## SCREEN:DASHBOARD:PROJECT_CARD

COMPONENT: Card (shadcn/ui)
LAYOUT: vertical stack, gap --spacing-stack-md

ELEMENT: project-thumbnail
  TYPE: img
  SIZE: 100% width, aspect-ratio 16/9
  RADIUS: --radius-lg --radius-lg 0 0
  ALT: "{project.name} preview"

ELEMENT: project-title
  TYPE: h3
  FONT: --font-size-heading-subsection, weight 600
  COLOR: --color-text-primary
  TRUNCATE: single line with ellipsis

ELEMENT: project-status
  TYPE: Badge (shadcn/ui)
  VARIANT: "default" for active, "secondary" for draft, "destructive" for overdue
  A11Y: include text label, not color-only

ELEMENT: project-updated
  TYPE: p
  FONT: --font-size-caption
  COLOR: --color-text-secondary

STATE:HOVER: shadow --shadow-md, transition 150ms
STATE:LOADING: skeleton placeholder matching layout
STATE:EMPTY: "No projects yet" message with CTA

RESPONSIVE:
  DESKTOP: 3-column grid, gap --spacing-6
  TABLET: 2-column grid, gap --spacing-4
  MOBILE: 1-column stack, gap --spacing-4

FIGMA_HANDOFF:DEVELOPER_HANDOFF_CHECKLIST

BEFORE_MARKING_READY_FOR_DEV (Alexander)

CHECK: all components use Figma Variables (not raw values) CHECK: all states designed (default, hover, focus, active, disabled) CHECK: loading, error, and empty states designed CHECK: responsive variants for mobile, tablet, desktop CHECK: accessibility annotations present (focus order, screen reader text) CHECK: auto-layout used consistently (no absolute positioning except when necessary) CHECK: components are from shared library (not detached instances) CHECK: DESIGN.md updated with full specification for this screen/feature

BEFORE_STARTING_DEVELOPMENT (Floris/Floor)

CHECK: read DESIGN.md specification for the screen/feature CHECK: verify all referenced design tokens exist in the design system CHECK: verify all referenced shadcn/ui components are available CHECK: identify any custom components that need to be built CHECK: clarify any ambiguity with alexander BEFORE starting implementation

AFTER_IMPLEMENTATION (Felice — Visual QA)

CHECK: compare implementation side-by-side with Figma design CHECK: verify spacing matches (use browser DevTools overlay) CHECK: verify colors match design tokens (not hardcoded) CHECK: verify typography matches (size, weight, line height) CHECK: verify all states render correctly (hover, focus, error, loading, empty) CHECK: verify responsive behavior at all breakpoints CHECK: verify animations match specification (including reduced-motion)


FIGMA_HANDOFF:FIGMA_MCP_SERVER

WHAT_IT_IS

WHAT: Figma's MCP (Model Context Protocol) server brings Figma context into agentic coding tools STATUS: available in VS Code, Cursor, Windsurf, Claude CAPABILITY: read Figma file structure, extract component properties, generate code from designs

GE_POSITION

CURRENT: experimental — not yet integrated into GE's agentic pipeline REASON: DESIGN.md remains the SSOT — Figma MCP generates code as starting point, not production FUTURE: evaluate Figma MCP as input to alexander's DESIGN.md generation workflow WARNING: Figma MCP output requires significant refinement — it is not production-ready code

WHEN_TO_CONSIDER

CONSIDER: if Figma MCP improves to produce token-aware, accessible code CONSIDER: if Figma native Git integration stabilizes (design branches linked to code branches) DO_NOT: replace DESIGN.md with Figma MCP output — agents need structured specs, not generated code


FIGMA_HANDOFF:DESIGN_QA_PROCESS

WHO

REVIEWER: felice (Visual QA) REVIEWER: alexander (design sign-off) REVIEWER: julian (accessibility sign-off)

PROCESS

STEP: developer marks PR as ready for review STEP: felice compares implementation against Figma using Dev Mode STEP: felice opens issues for visual discrepancies STEP: alexander reviews design fidelity for complex/custom components STEP: julian runs accessibility spot-check (contrast, keyboard, screen reader) STEP: all three must approve before PR merges (for UI-visible changes)

COMMON_DISCREPANCIES

ISSUE: spacing is 2-4px off from design THRESHOLD: within 2px is acceptable, over 4px must be fixed ISSUE: wrong font weight (400 instead of 600) THRESHOLD: must match exactly ISSUE: wrong color shade (blue-500 instead of blue-600) THRESHOLD: must use correct token ISSUE: missing state (no loading state implemented) THRESHOLD: all designed states must be implemented


FIGMA_HANDOFF:AGENT_INSTRUCTIONS

FOR alexander: - Figma is YOUR tool — agents never touch it - every Figma design must be translated to DESIGN.md before developers can implement - use Figma Variables mapped to design token names - mark frames "Ready for dev" only when fully specified - export assets and commit to project repo

FOR floris, floor: - you implement from DESIGN.md, not from Figma - if DESIGN.md is unclear, ask alexander to clarify — do not guess from screenshots - never hardcode values — always use design tokens - flag missing specifications before starting implementation

FOR felice: - you are the bridge between Figma and implementation - use Dev Mode to compare implementation against design - log discrepancies as specific, measurable issues (e.g., "card padding is 12px, should be 16px") - verify responsive behavior at 320px, 768px, 1024px, 1440px


READ_ALSO: domains/design/design-system-engineering.md, domains/design/design-tokens.md, domains/design/component-library.md, domains/design/responsive-design.md