# Design System Router
**Purpose:** Route component specifications to appropriate design system operations based on similarity analysis.
**Role:** Dumb router - identifies and routes, doesn't contain business logic.
---
## When This Runs
**Triggered from Phase 4:**
- After component specification is complete
- Only if design system is enabled in project
- Before returning to page specification
**Input:** Complete component specification (mixed content)
**Output:**
- Design system entry (component-level info)
- Page specification reference (page-specific info)
---
## Router Logic
```
┌─────────────────────────────────────┐
│ Component Specification Complete │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Check: Design System Enabled? │
└──────────────┬──────────────────────┘
│
┌──────┴──────┐
│ │
NO YES
│ │
▼ ▼
┌──────────┐ ┌─────────────────────┐
│ Skip │ │ Design System Router│
│ Return │ └──────────┬──────────┘
└──────────┘ │
▼
┌─────────────────────┐
│ Check: First │
│ Component? │
└──────┬──────────────┘
│
┌──────┴──────┐
│ │
YES NO
│ │
▼ ▼
┌──────────────────┐ ┌────────────────┐
│ Initialize │ │ Scan Existing │
│ Design System │ │ Components │
└────────┬─────────┘ └────────┬───────┘
│ │
│ ▼
│ ┌────────────────────┐
│ │ Similar Component │
│ │ Found? │
│ └────────┬───────────┘
│ │
│ ┌──────┴──────┐
│ │ │
│ NO YES
│ │ │
│ ▼ ▼
│ ┌────────────────┐ ┌──────────────┐
│ │ Create New │ │ Opportunity/ │
│ │ Component │ │ Risk │
│ │ │ │ Assessment │
│ └────────┬───────┘ └──────┬───────┘
│ │ │
└────────────┴─────────────────┘
│
▼
┌─────────────────────┐
│ Extract Component │
│ Info to Design │
│ System │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Create Reference │
│ ID │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Return to Page Spec │
│ Replace with │
│ Reference │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Complete │
└─────────────────────┘
```
---
## Step 1: Check Design System Status
Check project configuration:
- Read: `A-Project-Brief/project-config.md`
- Look for: `design_system_mode: [none|custom|library]`
- If `none`: Skip this entire workflow
- If `custom` or `library`: Continue
---
## Step 2: Check First Component
Check if design system folder exists:
- Look for: `D-Design-System/` folder
- If doesn't exist: This is the first component
- If exists: Check for existing components
---
## Step 3: Scan Existing Components
Scan design system folder:
- Read all files in `D-Design-System/components/`
- Extract component types and IDs
- Build list of existing components
---
## Step 4: Identify Similar Components
Compare current component to existing:
- Match by component type (Button, Input, Card, etc.)
- If type matches: Potential similarity
- If no type match: Create new component
---
## Routing Decisions
### Route A: Initialize Design System
**When:** First component in project
**Go to:** `operations/initialize-design-system.md`
**Result:** Create folder structure + first component
### Route B: Create New Component
**When:** No similar components found
**Go to:** `operations/create-new-component.md`
**Result:** Add new component to design system
### Route C: Opportunity/Risk Assessment
**When:** Similar component found
**Go to:** `assessment/01-scan-existing.md`
**Result:** Designer decides: same/variant/new
---
## After Routing
**All routes eventually:**
1. Extract component-level info to design system
2. Generate component ID (e.g., `btn-001`)
3. Create reference in page spec
4. Return control to Phase 4
**Example Return:**
**Input (Complete Spec):**
```yaml
Login Button:
why: Submit login credentials
label: "Log in"
error_text: "Invalid credentials"
states: [default, hover, disabled]
variants: [primary, secondary]
styling: {...}
````
**Output (Page Spec with Reference):**
```yaml
Login Button:
component: Button.primary [btn-001]
why: Submit login credentials
label: 'Log in'
error_text: 'Invalid credentials'
```
**Output (Design System Entry):**
```yaml
# D-Design-System/components/button.md
Button Component [btn-001]:
states: [default, hover, disabled]
variants: [primary, secondary]
styling: { ... }
```
---
## Router Characteristics
**✅ Does:**
- Check design system status
- Identify first component
- Scan existing components
- Match component types
- Route to appropriate operation
**❌ Doesn't:**
- Make design decisions
- Contain specification logic
- Store component knowledge
- Handle business rules
- Process component details
**Keep it dumb, keep it clean!**
---
## Error Handling
**If design system folder missing but config says enabled:**
```
⚠️ Design system is enabled but folder doesn't exist.
Treating this as first component and initializing.
```
**If component type unclear:**
```
❓ I'm not sure what type of component this is.
Current specification: [show spec]
Is this a:
1. Button
2. Input Field
3. Card
4. Other: [specify]
Your choice:
```
**If similarity check fails:**
```
⚠️ I couldn't determine similarity automatically.
Would you like to:
1. Create as new component
2. Manually specify which component it's similar to
3. Skip design system for this component
Your choice:
```
---
## Next Steps
**After routing:**
- Follow the routed operation instructions
- Complete design system entry
- Return reference to Phase 4
- Phase 4 updates page spec
- Continue with next component
---
**This is a router. It identifies and routes. Business logic lives in the operations it routes to.**