Figma Workflow Guide
Design Handoff & Collaboration Processes
Document Date: December 13, 2025
1. Figma File Structure
1.1 Recommended Organization
STEMBlock.ai Design System
├── 📄 Cover Page
│ └── Version, changelog, quick links
│
├── 📐 Foundation
│ ├── Colors
│ ├── Typography
│ ├── Spacing & Grid
│ ├── Shadows & Effects
│ └── Icons Library
│
├── 🧩 Components
│ ├── Primitives
│ │ ├── Button
│ │ ├── Input
│ │ ├── Card
│ │ ├── Badge
│ │ └── ...
│ ├── Compositions
│ │ ├── Forms
│ │ ├── Modals
│ │ ├── Navigation
│ │ └── ...
│ └── Domain Components
│ ├── Assignment Card
│ ├── Submission Card
│ └── ...
│
├── 📱 Patterns
│ ├── Layout Patterns
│ ├── Navigation Patterns
│ └── Data Display
│
├── 🎨 Prototypes
│ ├── Student Dashboard
│ ├── Coach Review Flow
│ ├── Parent Reports
│ └── Admin Management
│
└── 📚 Documentation
├── Component Usage
├── Accessibility Notes
└── Developer Handoff
2. Design Token Setup in Figma
2.1 Color Styles
Naming Convention:
Category/Intent/Shade
Examples:
- Brand/Blue/500
- Brand/Purple/500
- Semantic/Success/500
- Semantic/Error/500
- Neutral/Gray/50
- Text/Primary
- Text/Secondary
- Background/Primary
- Background/Secondary
- Border/Default
- Border/Focus
Organization:
Foundation/Colors
├── Brand
│ ├── STEM Blue
│ │ ├── 50 #EFF6FF
│ │ ├── 100 #DBEAFE
│ │ ├── 500 #2E7CF6 (Primary)
│ │ └── 900 #1E3A8A
│ └── STEM Purple
│ └── ...
├── Semantic
│ ├── Success (Green)
│ ├── Warning (Orange)
│ ├── Error (Red)
│ └── Info (Teal)
└── Neutral
└── Gray (50-950)
Create Color Variables:
- Go to Local Variables
- Create Collection: "STEMBlock Colors"
- Add all color tokens with semantic names
- Link to color styles
2.2 Typography Styles
Text Style Naming:
Category/Variant/Size
Examples:
- Display/Bold/XL
- Heading/Bold/H1
- Heading/Bold/H2
- Body/Regular/Medium
- Body/Semibold/Medium
- Caption/Regular/Small
Typography Setup:
Foundation/Typography
├── Display
│ ├── Display 1 (Poppins 72px Bold)
│ └── Display 2 (Poppins 60px Bold)
├── Headings
│ ├── H1 (Poppins 48px Bold)
│ ├── H2 (Poppins 36px Bold)
│ ├── H3 (Poppins 30px Bold)
│ ├── H4 (Poppins 24px Semibold)
│ ├── H5 (Poppins 20px Semibold)
│ └── H6 (Poppins 18px Semibold)
└── Body
├── Large (Inter 18px Regular)
├── Medium (Inter 16px Regular)
├── Small (Inter 14px Regular)
└── XSmall (Inter 12px Regular)
2.3 Effect Styles
Shadow Naming:
Shadow/Elevation
Examples:
- Shadow/SM
- Shadow/MD
- Shadow/LG
- Shadow/XL
- Shadow/Blue (Brand shadow)
Create Effects:
Foundation/Effects
├── Shadows
│ ├── Small (0 1px 3px rgba(0,0,0,0.1))
│ ├── Medium (0 4px 6px rgba(0,0,0,0.1))
│ ├── Large (0 10px 15px rgba(0,0,0,0.1))
│ ├── Blue Shadow (0 4px 14px rgba(46,124,246,0.25))
│ └── Purple Shadow
└── Blur
└── Backdrop Blur
3. Component Library Creation
3.1 Component Anatomy
Every component should have:
1. Base Component
- Default state
- Clean, organized layers
- Proper constraints (fixed, hug, fill)
- Named layers (not "Frame 123")
2. Variants
- Size variants (sm, md, lg)
- State variants (default, hover, active, disabled)
- Type variants (primary, secondary, etc.)
3. Properties
- Boolean properties (icon, loading, fullWidth)
- Variant properties (size, variant)
- Text properties (label, description)
4. Documentation
- Component description
- Usage guidelines
- Do's and Don'ts
- Code snippet reference
3.2 Button Component Example
Component Structure:
Button [Component Set]
├── Properties
│ ├── Variant (primary, secondary, success, danger, ghost)
│ ├── Size (sm, md, lg)
│ ├── State (default, hover, active, disabled)
│ ├── Loading (boolean)
│ ├── Icon (boolean)
│ └── Full Width (boolean)
│
├── Layers
│ ├── Background (Auto layout)
│ ├── Content (Auto layout, horizontal)
│ │ ├── Icon (Instance, optional)
│ │ ├── Label (Text)
│ │ └── Loader (Instance, conditional)
│ └── Focus Ring (Effect)
│
└── Variants (Examples)
├── Primary / Medium / Default
├── Primary / Medium / Hover
├── Primary / Medium / Active
├── Primary / Medium / Disabled
├── Primary / Medium / Loading
├── Secondary / Medium / Default
└── ...
Auto Layout Settings:
Horizontal padding: 16px (md), 12px (sm), 24px (lg)
Vertical padding: 10px (md), 6px (sm), 12px (lg)
Gap between items: 8px
Horizontal resizing: Hug (or Fill for fullWidth)
Vertical resizing: Hug
Component Properties Panel:
Properties:
✓ Variant: Swap instance (create all variant combinations)
✓ Size: Variant property
✓ State: Variant property
✓ Icon: Boolean (show/hide icon layer)
✓ Loading: Boolean (show loader, hide label)
✓ Full Width: Boolean (changes horizontal resizing)
3.3 Responsive Card Component
Card Component Setup:
Card [Component Set]
├── Properties
│ ├── Variant (default, outlined, elevated)
│ ├── Padding (sm, md, lg)
│ ├── Header (boolean)
│ ├── Footer (boolean)
│ └── Hoverable (boolean)
│
├── Auto Layout
│ ├── Direction: Vertical
│ ├── Gap: 0
│ ├── Padding: Dynamic based on padding property
│ └── Resizing: Fill container
│
└── Layers
├── Header (Optional, auto-layout)
│ └── Header Content (Slot for content)
├── Body (Auto-layout, fill)
│ └── Body Content (Slot for content)
└── Footer (Optional, auto-layout)
└── Footer Actions (Slot for content)
Interactive Component Features:
Interactions:
- Default → Hover (on mouse enter)
- Change: Shadow from SM to MD
- Animate: Smart animate, 200ms ease-out
- Hover → Default (on mouse leave)
- Change: Shadow from MD to SM
- Animate: Smart animate, 200ms ease-in
4. Design Handoff Process
4.1 Developer Mode Setup
Enable Dev Mode:
- Click "Dev Mode" in top right
- Configure code generation preferences
- Add code snippets as comments
Add Code Snippets:
// On Button component
Add comment in Dev Mode:
```tsx
<Button
variant="primary"
size="md"
onClick=\{handleClick\}
>
Click me
</Button>
// Tailwind classes: className="px-4 py-2.5 rounded-lg bg-gradient-to-r from-stem-blue-500 to-stem-blue-600 text-white font-semibold hover:from-stem-blue-600 hover:to-stem-blue-700 transition-all duration-200"
**Inspect Panel Configuration:**
Code Snippets: ✓ Show CSS ✓ Show iOS (Swift) ✓ Show Android (Kotlin) ✗ Hide unnecessary platforms
Measurement Units: ✓ Pixels (px) ✗ Points (pt)
Export Settings: ✓ PNG (2x, 3x) ✓ SVG ✓ PDF
### 4.2 Component Documentation Template
**For each component, include:**
```markdown
# Component Name
## Description
Brief description of the component and its purpose.
## Usage
When to use this component vs alternatives.
## Variants
- **Primary**: For main CTAs
- **Secondary**: For less important actions
- **Ghost**: For tertiary actions
## Sizes
- **SM**: 32px height, 12px padding
- **MD**: 40px height, 16px padding (default)
- **LG**: 48px height, 24px padding
## States
- Default
- Hover (shadow, transform)
- Active (pressed)
- Disabled (50% opacity)
- Loading (spinner visible)
## Properties
- `variant`: 'primary' | 'secondary' | 'ghost'
- `size`: 'sm' | 'md' | 'lg'
- `loading`: boolean
- `disabled`: boolean
- `icon`: boolean
- `fullWidth`: boolean
## Code Example
```tsx
<Button variant="primary" size="md" onClick=\{handleSubmit\}>
Submit
</Button>
Accessibility
- Min touch target: 44x44px
- Focus visible on keyboard nav
- Disabled state not focusable
- ARIA labels for icon-only buttons
Do's and Don'ts
✅ DO: Use primary for main actions ❌ DON'T: Use more than one primary button per section
Related Components
- IconButton
- Link
### 4.3 Annotation and Redlines
**Use Figma's Annotation Tools:**
1. **Spacing Annotations**
- Select two layers
- Right-click → "Show spacing"
- Shows padding/margin values
2. **Measurement Annotations**
- Select layer
- Right-click → "Copy properties"
- Shows width, height, position
3. **Color/Typography Annotations**
- Auto-shown in Dev Mode
- Links to design tokens
4. **Interactive States**
- Create prototype flows
- Annotate transition timing
- Document hover/focus states
**Custom Annotation Frame:**
Create a frame called "Specs" with:
- Component screenshot
- Dimension callouts
- Color values
- Typography specs
- Spacing diagram
- State variations
- Code snippet
---
## 5. Version Control & Branching
### 5.1 Branching Strategy
**Main Branches:**
Main Branch ├── Production (Published library) │ └── Current live version │ ├── Staging │ └── Ready for review/testing │ └── Development ├── Feature/new-component ├── Feature/update-buttons └── Fix/color-contrast
**Branch Naming:**
feature/component-name fix/issue-description update/component-name experiment/idea-name
Examples:
- feature/achievement-badges
- fix/button-hover-states
- update/color-palette
- experiment/dark-mode
### 5.2 Version Numbering
**Semantic Versioning:**
Major.Minor.Patch
Examples:
- 1.0.0 - Initial release
- 1.1.0 - New component added
- 1.1.1 - Bug fix in existing component
- 2.0.0 - Breaking change (component API change)
**Changelog Format:**
```markdown
# Design System Changelog
## [1.2.0] - 2025-12-13
### Added
- New Achievement Badge component
- Loading skeleton components
- Confetti animation component
### Changed
- Updated Button component hover states
- Improved Card component spacing
### Fixed
- Button disabled state contrast
- Input field focus ring visibility
### Deprecated
- Old Progress component (use new version)
### Removed
- Unused color tokens
6. Collaboration Workflows
6.1 Designer → Developer Handoff
Weekly Design Review:
- Monday: Designer creates/updates designs in feature branch
- Wednesday: Design review meeting
- Walk through changes
- Discuss implementation details
- Address questions
- Thursday: Designer publishes to Staging
- Friday: Developer reviews in Dev Mode
- Inspects components
- Copies code snippets
- Downloads assets
Handoff Checklist:
- All components use design tokens
- Responsive variants created (mobile, tablet, desktop)
- All states documented (default, hover, active, disabled)
- Accessibility notes added
- Code snippets included
- Assets exported (icons, images)
- Prototype flows created for complex interactions
- Comments added for special requirements
6.2 Feedback Loop
Designer Feedback Process:
1. Developer implements component
2. Developer shares localhost URL or deployment
3. Designer reviews in browser
4. Designer leaves feedback using:
- Figma comments (link to implementation)
- Loom video walkthrough
- Annotated screenshots
5. Developer makes adjustments
6. Repeat until approved
Feedback Template:
## Component Review: Button
**Implementation URL:** http://localhost:3000/storybook/?path=/story/button
### Visual Comparison
- [ ] Colors match design tokens
- [ ] Spacing matches spec (16px padding)
- [ ] Border radius correct (12px)
- [ ] Typography matches (16px semibold)
### Interaction Review
- [ ] Hover state smooth transition (200ms)
- [ ] Active state visible
- [ ] Disabled state correct opacity (50%)
- [ ] Loading state spinner size/color correct
### Responsive Behavior
- [ ] Works on mobile (320px+)
- [ ] Touch targets adequate (44x44px min)
- [ ] Stacks properly in small containers
### Accessibility
- [ ] Focus ring visible
- [ ] Keyboard navigation works
- [ ] Screen reader announces correctly
- [ ] Color contrast passes WCAG AA
### Feedback
1. Hover transition feels too fast, increase to 300ms
2. Disabled state needs lower opacity (40% instead of 50%)
3. Loading spinner should be white, not blue
### Approval Status
- [ ] Approved
- [x] Needs revisions (see feedback above)
7. Asset Export Workflow
7.1 Icon Export
Export Settings:
Icons/
├── SVG
│ ├── icon-name.svg
│ └── Settings:
│ ├── Format: SVG
│ ├── Outline stroke: checked
│ ├── Remove fill: unchecked
│ └── Include id attribute: checked
│
└── PNG
├── icon-name.png
├── icon-name@2x.png
├── icon-name@3x.png
└── Settings:
├── Format: PNG
├── Scale: 1x, 2x, 3x
└── Constraints: Scale
Naming Convention:
icon-{category}-{name}-{variant}.svg
Examples:
- icon-action-edit.svg
- icon-action-delete.svg
- icon-status-success.svg
- icon-nav-home-outline.svg
- icon-nav-home-filled.svg
7.2 Image Export
Export Settings:
Images/
├── Optimized
│ ├── Format: WebP (primary)
│ ├── Quality: 80%
│ └── Progressive: checked
│
└── Fallback
├── Format: PNG/JPG
├── Quality: 85%
└── Compression: checked
Image Specifications:
Hero Images:
- Width: 1920px (desktop)
- Width: 1200px (tablet)
- Width: 640px (mobile)
- Format: WebP + JPG fallback
- Quality: 80%
Thumbnails:
- Width: 400px
- Format: WebP
- Quality: 75%
Icons:
- Size: 24x24px (base)
- Exports: SVG, PNG @2x, @3x
8. Figma Plugins & Tools
8.1 Recommended Plugins
Design Workflow:
- A11y - Color Contrast Checker - Verify WCAG compliance
- Stark - Comprehensive accessibility toolkit
- Content Reel - Generate realistic content
- Unsplash - High-quality placeholder images
- Lorem Ipsum - Text generation
Development Workflow:
- Figma to Code - Generate React/Tailwind code
- HTML to Figma - Import existing HTML
- CSS Exporter - Export precise CSS values
- Zeplin - Advanced developer handoff (alternative)
Productivity:
- Auto Layout Absolute - Quick layout adjustments
- Component Utilities - Batch component operations
- Find and Replace - Text and style updates
- Instance Finder - Locate component usage
8.2 Custom Plugin Development
For STEMBlock.ai-specific needs:
// plugins/stemblock-token-exporter/code.ts
// Export design tokens to Tailwind config format
figma.showUI(__html__, { width: 400, height: 600 })
figma.ui.onmessage = async (msg) => {
if (msg.type === 'export-tokens') {
const localStyles = await figma.getLocalPaintStyles()
const tokens = localStyles.reduce((acc, style) => {
// Convert Figma styles to Tailwind format
// Output: { 'stem-blue-500': '#2E7CF6', ... }
return acc
}, {})
figma.ui.postMessage({
type: 'tokens-exported',
data: tokens,
})
}
}
9. Maintenance & Updates
9.1 Regular Audits
Monthly Component Audit:
- Review usage statistics
- Identify unused components
- Check for detached instances
- Update component variants as needed
- Verify design token usage
Quarterly Design System Review:
- Assess design token effectiveness
- Evaluate component coverage
- Review accessibility compliance
- Update documentation
- Gather developer feedback
9.2 Deprecation Process
When deprecating a component:
-
Announce (Week 1)
- Add "DEPRECATED" label to component
- Update documentation with migration guide
- Notify team in design channel
-
Provide Alternative (Week 2-4)
- Offer new component as replacement
- Create migration documentation
- Support team during transition
-
Remove (Week 5+)
- Hide deprecated component from library
- Archive in "Deprecated" page
- Keep for reference (don't delete)
Deprecation Notice Template:
⚠️ DEPRECATED
This component will be removed in v2.0.0
Use [NewComponentName] instead.
Migration guide: [link to docs]
Last supported version: v1.5.0
Summary
This Figma workflow ensures:
- ✅ Organized, scalable design system
- ✅ Smooth designer-developer handoff
- ✅ Consistent component usage
- ✅ Efficient asset management
- ✅ Clear documentation and versioning
Next Document: Accessibility Checklist
Document Version: 1.0 Last Updated: December 13, 2025