// Creates production-ready design files, prototypes, and specifications for development teams. Translates validated concepts into detailed, implementable designs with comprehensive specs for developers. Produces Figma files (via API), high-fidelity prototypes, design specifications, and animation files.
| name | design-production |
| description | Creates production-ready design files, prototypes, and specifications for development teams. Translates validated concepts into detailed, implementable designs with comprehensive specs for developers. Produces Figma files (via API), high-fidelity prototypes, design specifications, and animation files. |
This skill guides Claude through creating production-ready design artifacts that development teams can confidently implement. Production design is about precision, completeness, and developer handoff quality.
Production design provides everything developers need to build accurately:
Production designs must be:
Step 1: Gather Requirements
Questions to ask user:
1. What concept/direction was approved?
2. Does a design system exist? (Components, tokens)
3. What platforms? (iOS, Android, Web, Desktop)
4. What breakpoints/screen sizes?
5. Any technical constraints? (Framework, performance)
6. Timeline and which screens/flows to prioritize?
7. Do you have Figma API access for creating Figma files?
Use `view` to read:
- Approved concept files
- Design system documentation
- Brand guidelines
- Technical requirements from engineering
Step 2: Determine Output Format Based on user needs:
Define Design Tokens First:
// Create design-tokens.js
export const tokens = {
colors: {
primary: {
50: '#E3F2FD',
500: '#2196F3',
900: '#0D47A1'
},
neutral: {
50: '#FAFAFA',
500: '#9E9E9E',
900: '#212121'
},
semantic: {
success: '#4CAF50',
error: '#F44336',
warning: '#FF9800',
info: '#2196F3'
}
},
typography: {
fontFamily: {
sans: 'Inter, system-ui, sans-serif',
mono: 'Monaco, monospace'
},
fontSize: {
xs: '0.75rem', // 12px
sm: '0.875rem', // 14px
base: '1rem', // 16px
lg: '1.125rem', // 18px
xl: '1.25rem', // 20px
'2xl': '1.5rem', // 24px
'3xl': '1.875rem' // 30px
},
fontWeight: {
normal: 400,
medium: 500,
semibold: 600,
bold: 700
},
lineHeight: {
tight: 1.25,
normal: 1.5,
relaxed: 1.75
}
},
spacing: {
0: '0',
1: '0.25rem', // 4px
2: '0.5rem', // 8px
3: '0.75rem', // 12px
4: '1rem', // 16px
6: '1.5rem', // 24px
8: '2rem', // 32px
12: '3rem', // 48px
16: '4rem' // 64px
},
borderRadius: {
none: '0',
sm: '0.125rem', // 2px
base: '0.25rem', // 4px
md: '0.375rem', // 6px
lg: '0.5rem', // 8px
xl: '0.75rem', // 12px
full: '9999px'
},
shadows: {
sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
base: '0 1px 3px 0 rgba(0, 0, 0, 0.1)',
md: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',
xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1)'
}
};
Create Reusable Components:
// Button.jsx - Example component
import React from 'react';
export const Button = ({
variant = 'primary',
size = 'md',
children,
disabled = false,
onClick
}) => {
const baseStyles = 'font-medium rounded-lg transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2';
const variants = {
primary: 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500 disabled:bg-blue-300',
secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 focus:ring-gray-500 disabled:bg-gray-100',
danger: 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 disabled:bg-red-300'
};
const sizes = {
sm: 'px-3 py-1.5 text-sm',
md: 'px-4 py-2 text-base',
lg: 'px-6 py-3 text-lg'
};
return (
<button
className={`${baseStyles} ${variants[variant]} ${sizes[size]}`}
disabled={disabled}
onClick={onClick}
>
{children}
</button>
);
};
Note: Figma API integration requires user's Figma API token and file permissions.
Creating Figma Files Programmatically:
# First, install Figma API client if needed
# Then use Python or Node.js to interact with Figma API
# Example workflow:
# 1. Create new Figma file
# 2. Set up pages (e.g., "Components", "Screens", "Specs")
# 3. Create frames for each screen
# 4. Add components, text, shapes using API
# 5. Set up auto-layout, constraints
# 6. Add annotations and developer notes
Reading Existing Figma Files:
# Use Figma API to:
# 1. Fetch file structure
# 2. Extract component definitions
# 3. Read design tokens (colors, typography)
# 4. Export assets
# 5. Generate specs from Figma data
React Component Structure:
// Organize components logically
/components
/ui // Base components (Button, Input, Card)
/features // Feature-specific components
/layouts // Page layouts
/icons // Icon components
// Use design tokens consistently
import { tokens } from './design-tokens';
// Include all interactive states
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
const [data, setData] = useState(null);
Specification Document Format:
# [Screen/Component Name] Design Specification
## Overview
[Brief description of purpose and user flow]
## Layout & Structure
### Desktop (1440px+)
- Container max-width: 1280px
- Horizontal padding: 64px
- Vertical spacing between sections: 48px
### Tablet (768px - 1439px)
- Container max-width: 100%
- Horizontal padding: 32px
- Vertical spacing between sections: 32px
### Mobile (< 768px)
- Container max-width: 100%
- Horizontal padding: 16px
- Vertical spacing between sections: 24px
## Components
### Primary CTA Button
**States**:
- Default: bg-blue-600, text-white, px-6 py-3, rounded-lg
- Hover: bg-blue-700, cursor-pointer
- Active: bg-blue-800
- Disabled: bg-blue-300, cursor-not-allowed
- Loading: Show spinner, text "Processing..."
**Interaction**:
- Transition: all 200ms ease
- Focus: 2px blue ring, 2px offset
- Min-width: 120px
- Height: 48px
### Form Input
**States**:
- Default: border-gray-300, bg-white
- Focus: border-blue-500, ring-2 ring-blue-100
- Error: border-red-500, ring-2 ring-red-100
- Disabled: bg-gray-100, cursor-not-allowed
**Validation**:
- Show error message below input
- Error color: text-red-600
- Error icon: Inline, left of message
## Interactions & Animations
### Modal Open Animation
- Duration: 200ms
- Easing: ease-out
- Transform: scale(0.95) → scale(1)
- Opacity: 0 → 1
- Backdrop: blur(4px), bg-opacity-50
### Loading State
- Show skeleton screens during data load
- Skeleton: bg-gray-200, animated pulse
- Min display time: 300ms (prevent flash)
## Edge Cases
### Empty States
[Screenshot or description]
- Centered icon and message
- CTA to take first action
- Copy: "No items yet. Get started by..."
### Error States
[Screenshot or description]
- Error icon with message
- Retry button or next steps
- Copy: "Something went wrong. [Action]"
### Loading States
[Screenshot or description]
- Skeleton screens or spinners
- Preserve layout to prevent jank
### Long Content
- Text truncation after 2 lines
- Tooltip on hover shows full text
- "Show more" expansion if needed
## Accessibility
### Keyboard Navigation
- Tab order: logical, left-to-right, top-to-bottom
- Focus indicators: visible 2px ring
- Escape key: Closes modals/dropdowns
- Enter/Space: Activates buttons/checkboxes
### Screen Reader Support
- All images have alt text
- Forms have associated labels
- Error messages announced
- Loading states announced
### Color Contrast
- Text on background: 4.5:1 minimum
- Large text (18px+): 3:1 minimum
- Interactive elements: 3:1 minimum
## Assets Required
### Icons
- icon-close.svg (24x24)
- icon-check.svg (20x20)
- icon-error.svg (20x20)
### Images
- hero-image@2x.jpg (2880x1620)
- placeholder-avatar.png (128x128)
### Animations
- loading-spinner.json (Lottie)
## Developer Notes
### Implementation Considerations
- Use CSS Grid for main layout
- Lazy load images below fold
- Prefetch critical assets
- Use proper semantic HTML (section, nav, etc.)
### Performance Targets
- First Contentful Paint: < 1.5s
- Time to Interactive: < 3.5s
- Lighthouse Score: 90+
### Browser Support
- Chrome/Edge: Last 2 versions
- Firefox: Last 2 versions
- Safari: Last 2 versions
- Mobile Safari: iOS 14+
IMPORTANT: Organize all deliverables by batch in dated folders.
Each batch of production design work should be saved in its own folder:
docs/design/production-batch-{number}-{MMDDYY}/
Examples:
docs/design/production-batch-1-102425/docs/design/production-batch-2-110525/Rationale:
Batch folder structure:
docs/design/production-batch-1-102425/
├── design-specification.md
├── component-implementation-guide.md
├── design-tokens.js
├── design-system.md
├── prototype-production.jsx
└── animations/
├── loading-spinner.json
└── success-checkmark.json
Created via: Figma API (if access provided) Structure:
Location: docs/design/production-batch-{number}-{MMDDYY}/
File: prototype-production.jsx or .html
Format: React with full design system (or HTML/CSS)
Include:
Location: docs/design/production-batch-{number}-{MMDDYY}/
File: design-specification.md
Format: Markdown with embedded images
Include:
Location: docs/design/production-batch-{number}-{MMDDYY}/animations/
File: {animation-name}.json
Format: Lottie JSON
Use cases: Loading indicators, success confirmations, illustrations
Tools: Export from After Effects or create programmatically
Location: docs/design/production-batch-{number}-{MMDDYY}/
File: design-system.md
Format: Markdown with code examples
Include:
❌ Poor Spec: "Add some space around the button" ✅ Good Spec: "Padding: 12px vertical, 24px horizontal (py-3 px-6 in Tailwind)"
❌ Poor Spec: "Use the brand blue" ✅ Good Spec: "Background: #2196F3 (primary-500 from design tokens)"
❌ Poor Spec: "Make it fade in" ✅ Good Spec: "Opacity transition: 0 to 1 over 200ms with ease-out easing"
## Button Component
### Variants
- **Primary**: Main CTAs, high emphasis actions
- **Secondary**: Supporting actions, medium emphasis
- **Tertiary**: Low emphasis, inline actions
- **Danger**: Destructive actions (delete, remove)
### Sizes
- **Small**: 32px height, 12px vertical padding
- **Medium**: 40px height, 16px vertical padding
- **Large**: 48px height, 20px vertical padding
### States & Interactions
| State | Visual | Notes |
|-------|--------|-------|
| Default | Solid background | Base state |
| Hover | Darken 10% | Cursor: pointer |
| Active | Darken 15% | During click |
| Focus | 2px ring | Keyboard navigation |
| Disabled | 50% opacity | Cursor: not-allowed |
| Loading | Spinner + "Loading..." | Min 300ms display |
### Accessibility
- Minimum touch target: 44x44px (iOS), 48x48px (Android)
- Color contrast: 4.5:1 text, 3:1 background
- Keyboard: Tab to focus, Enter/Space to activate
- Screen reader: Action announced clearly
### Code Example
\`\`\`jsx
<Button variant="primary" size="md" onClick={handleClick}>
Save Changes
</Button>
\`\`\`
Problem: Only designing default state, forgetting hover/loading/error Instead: Design all states for every interactive element
Problem: "Small gap" or "a bit darker" - developers have to guess Instead: Use exact values: "8px gap" or "#1E40AF"
Problem: Random spacing values (13px, 17px, 22px) Instead: Use spacing scale (4px, 8px, 12px, 16px, 24px, 32px...)
Problem: Only designing for desktop, assuming mobile "works" Instead: Define behavior at each breakpoint
Problem: Light gray text on white background Instead: Test contrast ratios, minimum 4.5:1 for body text
Problem: Designs break with long names, empty lists, slow networks Instead: Design for edge cases explicitly
Problem: Unlabeled Figma layers, no specs, missing assets Instead: Organize files, name everything, provide complete specs
Problem: Designs requiring impossible performance or unsupported features Instead: Collaborate with engineering on feasibility
Problem: Complex animations that hurt performance or accessibility Instead: Keep animations subtle, purposeful, and performant
Before delivering production designs to engineering:
/mnt/user-data/outputs/Before marking production design complete:
/mnt/user-data/outputs/