# Design → Code Pipeline: Overview
## Goal
Take a .fig design and produce production-ready code on the user's target stack (React, Vue, Svelte, etc. + Tailwind/CSS Modules/etc.) via AI-assisted code generation through the MCP server.
## Current State
### What exists (extraction layer)
| Capability | Tool/Module | Output |
|-----------|-------------|--------|
| Read node tree | `get_page_tree`, `get_node`, `find_nodes`, `query_nodes` | JSON node properties |
| Semantic analysis | `describe` | Role, layout, visual style, issues |
| JSX representation | `get_jsx` | OpenPencil JSX (``) |
| Tailwind JSX | `export-jsx.ts` (tailwind format) | `
` |
| SVG export | `export_svg` | SVG markup string |
| Image export | `export_image` | PNG/JPG/WEBP raster |
| Components list | `get_components` | Component IDs, names, pages |
| Design tokens | `list_variables`, `find_variables`, `list_collections` | Variable names, types, values, modes |
| Color analysis | `analyze_colors` | Palette, frequencies, variable bindings, similar clusters |
| Typography analysis | `analyze_typography` | Font families, sizes, weights, frequencies |
| Spacing analysis | `analyze_spacing` | Gaps, paddings, grid compliance |
| Pattern detection | `analyze_clusters` | Repeated structures → potential components |
| Structural diff | `diff_jsx`, `diff_create` | Unified diff between two nodes |
| XPath queries | `query_nodes` | `//FRAME[@width < 300]`, `//TEXT[contains(@text, 'Hello')]` |
### What does NOT exist
1. **System/instructions prompt for code generation** — no guidance for the AI on how to convert design → code
2. **Component decomposition** — `analyze_clusters` finds repeated patterns, but doesn't determine component boundaries, props, variants, slots
3. **Design token → CSS variable mapping** — `list_variables` returns raw Figma variables, but nothing maps them to `--color-primary`, `var(--spacing-4)`, etc.
4. **Target stack awareness** — no concept of "this project uses Vue 3 + Tailwind" vs "React + CSS Modules"
5. **Production JSX output** — `export-jsx.ts` tailwind format produces unstyled `
` soup without component structure, prop interfaces, or framework idioms
6. **Verification** — no way to compare generated code output against the design visually
---
## Architecture
```
.fig design file
│
▼
┌──────────────────────────────────────────────────────────────┐
│ PHASE 1: EXTRACTION (tools exist) │
│ │
│ get_page_tree → full structure │
│ get_components → component inventory │
│ list_variables → design tokens │
│ analyze_colors/typography/spacing → design system snapshot │
│ analyze_clusters → repeated patterns │
│ describe → semantic roles per node │
│ get_jsx → structural JSX │
│ export_svg → vector assets │
│ export_image → screenshots for verification │
└──────────────┬───────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ PHASE 2: DECOMPOSITION (needs: prompt + possibly tools) │
│ │
│ Which nodes are screens vs components vs primitives? │
│ What props does each component accept? │
│ Which components have variants (state, size, theme)? │
│ Which design variables map to which CSS tokens? │
│ What's the component hierarchy / dependency graph? │
└──────────────┬───────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ PHASE 3: CODE GENERATION (needs: prompt) │
│ │
│ Generate component files on target stack │
│ Map design tokens → CSS/theme variables │
│ Extract SVG assets for icons/illustrations │
│ Wire up component hierarchy and props │
│ Match typography, spacing, colors exactly │
└──────────────┬───────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ PHASE 4: VERIFICATION (needs: prompt guidance) │
│ │
│ Compare generated code visually against design │
│ Check token coverage, missing styles │
│ Verify responsive behavior │
└──────────────────────────────────────────────────────────────┘
```
---
## What to Build
### 1. MCP System Prompt for Code Generation
A system prompt served when AI is asked to generate code from a design. Not the same as the design-chat prompt in `use-chat.ts`. This one instructs the AI to use extraction tools, decompose the design, and output production code.
**Content outline:**
```
You are a frontend engineer generating production code from Figma designs.
# Workflow
1. UNDERSTAND the design
- get_page_tree → scan structure
- get_components → inventory reusable parts
- list_variables + list_collections → design tokens
- analyze_colors, analyze_typography, analyze_spacing → design system snapshot
2. PLAN the component tree
- analyze_clusters → find repeated patterns
- describe on key nodes → semantic roles
- Determine: which frames are pages/screens, which are components, which are primitives
- Map Figma components → code components
- Identify props: text content, colors, sizes, visibility, children (slots)
- Identify variants: if component has states (hover, active, disabled), map to props
3. EXTRACT design tokens
- list_variables → get all variables with values per mode (light/dark)
- Map to CSS custom properties or theme object
- Color variables → --color-{name}
- Number variables → --spacing-{name}, --radius-{name}, etc.
- Fonts → font-family definitions
4. GENERATE code
- One component per file
- Use get_jsx on each component to read structure
- Use export_svg for vector icons/illustrations
- Apply design tokens as CSS variables / theme references
- Match pixel values exactly: font sizes, spacing, radii, colors
- Framework-specific:
- React: functional components, TypeScript props interface, named exports
- Vue: