Mandatory Preparation
Invoke /design-frontend — it contains design principles, anti-patterns, and the Context Gathering
Protocol. Follow the protocol before proceeding. If no design context exists yet, run
/design-context first. Additionally gather: quality bar (MVP vs flagship).
Perform a meticulous final pass to catch all the small details that separate good work from great work.
Pre-Polish Assessment
Understand the current state and goals:
Review completeness:
- Is it functionally complete?
- Are there known issues to preserve (mark with TODOs)?
- What is the quality bar? (MVP vs flagship feature?)
- When does it ship? (How much time for polish?)
Identify polish areas:
- Visual inconsistencies
- Spacing and alignment issues
- Interaction state gaps
- Copy inconsistencies
- Edge cases and error states
- Loading and transition smoothness
Polish is the last step, not the first. Do not polish work that is not functionally complete.
Polish Systematically
Work through these dimensions methodically:
Visual Alignment and Spacing
- Pixel-perfect alignment: Everything lines up to grid
- Consistent spacing: All gaps use spacing scale (no random 13px gaps)
- Optical alignment: Adjust for visual weight (icons may need offset for optical centering)
- Responsive consistency: Spacing and alignment work at all breakpoints
- Grid adherence: Elements snap to baseline grid
Check: Enable grid overlay, check spacing with browser inspector, test at multiple viewport sizes, look for elements that feel off.
Typography Refinement
- Hierarchy consistency: Same elements use same sizes/weights throughout
- Line length: 45-75 characters for body text
- Line height: Appropriate for font size and context
- Widows and orphans: No single words on last line
- Hyphenation: Appropriate for language and column width
- Kerning: Adjust letter spacing where needed (especially headlines)
- Font loading: No FOUT/FOIT flashes
Color and Contrast
- Contrast ratios: All text meets WCAG standards
- Consistent token usage: No hard-coded colors, all use design tokens
- Theme consistency: Works in all theme variants
- Color meaning: Same colors mean same things throughout
- Accessible focus: Focus indicators visible with sufficient contrast
- Tinted neutrals: No pure gray or pure black — add subtle color tint (0.01 chroma)
- Gray on color: Never put gray text on colored backgrounds — use a shade of that color or transparency
Interaction States
Every interactive element needs all states:
- Default: Resting state
- Hover: Subtle feedback (color, scale, shadow)
- Focus: Keyboard focus indicator (never remove without replacement)
- Active: Click/tap feedback
- Disabled: Clearly non-interactive
- Loading: Async action feedback
- Error: Validation or error state
- Success: Successful completion
Missing states create confusion and broken experiences.
Micro-interactions and Transitions
- Smooth transitions: All state changes animated appropriately (150-300ms)
- Consistent easing: Use ease-out-quart/quint/expo for natural deceleration. Never bounce or elastic.
- No jank: 60fps animations, only animate transform and opacity
- Appropriate motion: Motion serves purpose, not decoration
- Reduced motion: Respects
prefers-reduced-motion
Content and Copy
- Consistent terminology: Same things called same names throughout
- Consistent capitalization: Title Case vs Sentence case applied consistently
- Grammar and spelling: No typos
- Appropriate length: Not too wordy, not too terse
- Punctuation consistency: Periods on sentences, not on labels
Icons and Images
- Consistent style: All icons from same family or matching style
- Appropriate sizing: Icons sized consistently for context
- Proper alignment: Icons align with adjacent text optically
- Alt text: All images have descriptive alt text
- Loading states: Images do not cause layout shift, proper aspect ratios
- Retina support: 2x assets for high-DPI screens
Forms and Inputs
- Label consistency: All inputs properly labeled
- Required indicators: Clear and consistent
- Error messages: Helpful and consistent
- Tab order: Logical keyboard navigation
- Auto-focus: Appropriate (do not overuse)
- Validation timing: Consistent (on blur vs on submit)
Edge Cases and Error States
- Loading states: All async actions have loading feedback
- Empty states: Helpful empty states, not just blank space
- Error states: Clear error messages with recovery paths
- Success states: Confirmation of successful actions
- Long content: Handles very long names, descriptions, etc.
- No content: Handles missing data gracefully
Responsiveness
- All breakpoints: Test mobile, tablet, desktop
- Touch targets: 44x44px minimum on touch devices
- Readable text: No text smaller than 14px on mobile
- No horizontal scroll: Content fits viewport
- Appropriate reflow: Content adapts logically
Performance
- Fast initial load: Optimize critical path
- No layout shift: Elements do not jump after load (CLS)
- Smooth interactions: No lag or jank
- Optimized images: Appropriate formats and sizes
- Lazy loading: Off-screen content loads lazily
Code Quality
- Remove console logs: No debug logging in production
- Remove commented code: Clean up dead code
- Remove unused imports: Clean up unused dependencies
- Consistent naming: Variables and functions follow conventions
- Type safety: No TypeScript
any or ignored errors
- Accessibility: Proper ARIA labels and semantic HTML
Polish Checklist
NEVER:
- Polish before it is functionally complete
- Spend hours on polish if it ships in 30 minutes (triage)
- Introduce bugs while polishing (test thoroughly)
- Ignore systematic issues (if spacing is off everywhere, fix the system)
- Perfect one thing while leaving others rough (consistent quality level)
Final Verification
- Use it yourself: Actually interact with the feature
- Test on real devices: Not just browser DevTools
- Ask someone else to review: Fresh eyes catch things
- Compare to design: Match intended design
- Check all states: Do not just test happy path
1---2name: design-polish3description: Perform a final quality pass fixing alignment, spacing, consistency, and micro-detail issues before shipping. Use when asked to polish, add finishing touches, do a pre-launch review, fix something that looks off, or go from good to great.4---56## Mandatory Preparation78Invoke /design-frontend — it contains design principles, anti-patterns, and the Context Gathering9Protocol. Follow the protocol before proceeding. If no design context exists yet, run10/design-context first. Additionally gather: quality bar (MVP vs flagship).1112---1314Perform a meticulous final pass to catch all the small details that separate good work from great work.1516## Pre-Polish Assessment1718Understand the current state and goals:19201. **Review completeness**:21 - Is it functionally complete?22 - Are there known issues to preserve (mark with TODOs)?23 - What is the quality bar? (MVP vs flagship feature?)24 - When does it ship? (How much time for polish?)25262. **Identify polish areas**:27 - Visual inconsistencies28 - Spacing and alignment issues29 - Interaction state gaps30 - Copy inconsistencies31 - Edge cases and error states32 - Loading and transition smoothness3334Polish is the last step, not the first. Do not polish work that is not functionally complete.3536## Polish Systematically3738Work through these dimensions methodically:3940### Visual Alignment and Spacing4142- **Pixel-perfect alignment**: Everything lines up to grid43- **Consistent spacing**: All gaps use spacing scale (no random 13px gaps)44- **Optical alignment**: Adjust for visual weight (icons may need offset for optical centering)45- **Responsive consistency**: Spacing and alignment work at all breakpoints46- **Grid adherence**: Elements snap to baseline grid4748Check: Enable grid overlay, check spacing with browser inspector, test at multiple viewport sizes, look for elements that feel off.4950### Typography Refinement5152- **Hierarchy consistency**: Same elements use same sizes/weights throughout53- **Line length**: 45-75 characters for body text54- **Line height**: Appropriate for font size and context55- **Widows and orphans**: No single words on last line56- **Hyphenation**: Appropriate for language and column width57- **Kerning**: Adjust letter spacing where needed (especially headlines)58- **Font loading**: No FOUT/FOIT flashes5960### Color and Contrast6162- **Contrast ratios**: All text meets WCAG standards63- **Consistent token usage**: No hard-coded colors, all use design tokens64- **Theme consistency**: Works in all theme variants65- **Color meaning**: Same colors mean same things throughout66- **Accessible focus**: Focus indicators visible with sufficient contrast67- **Tinted neutrals**: No pure gray or pure black — add subtle color tint (0.01 chroma)68- **Gray on color**: Never put gray text on colored backgrounds — use a shade of that color or transparency6970### Interaction States7172Every interactive element needs all states:7374- **Default**: Resting state75- **Hover**: Subtle feedback (color, scale, shadow)76- **Focus**: Keyboard focus indicator (never remove without replacement)77- **Active**: Click/tap feedback78- **Disabled**: Clearly non-interactive79- **Loading**: Async action feedback80- **Error**: Validation or error state81- **Success**: Successful completion8283Missing states create confusion and broken experiences.8485### Micro-interactions and Transitions8687- **Smooth transitions**: All state changes animated appropriately (150-300ms)88- **Consistent easing**: Use ease-out-quart/quint/expo for natural deceleration. Never bounce or elastic.89- **No jank**: 60fps animations, only animate transform and opacity90- **Appropriate motion**: Motion serves purpose, not decoration91- **Reduced motion**: Respects `prefers-reduced-motion`9293### Content and Copy9495- **Consistent terminology**: Same things called same names throughout96- **Consistent capitalization**: Title Case vs Sentence case applied consistently97- **Grammar and spelling**: No typos98- **Appropriate length**: Not too wordy, not too terse99- **Punctuation consistency**: Periods on sentences, not on labels100101### Icons and Images102103- **Consistent style**: All icons from same family or matching style104- **Appropriate sizing**: Icons sized consistently for context105- **Proper alignment**: Icons align with adjacent text optically106- **Alt text**: All images have descriptive alt text107- **Loading states**: Images do not cause layout shift, proper aspect ratios108- **Retina support**: 2x assets for high-DPI screens109110### Forms and Inputs111112- **Label consistency**: All inputs properly labeled113- **Required indicators**: Clear and consistent114- **Error messages**: Helpful and consistent115- **Tab order**: Logical keyboard navigation116- **Auto-focus**: Appropriate (do not overuse)117- **Validation timing**: Consistent (on blur vs on submit)118119### Edge Cases and Error States120121- **Loading states**: All async actions have loading feedback122- **Empty states**: Helpful empty states, not just blank space123- **Error states**: Clear error messages with recovery paths124- **Success states**: Confirmation of successful actions125- **Long content**: Handles very long names, descriptions, etc.126- **No content**: Handles missing data gracefully127128### Responsiveness129130- **All breakpoints**: Test mobile, tablet, desktop131- **Touch targets**: 44x44px minimum on touch devices132- **Readable text**: No text smaller than 14px on mobile133- **No horizontal scroll**: Content fits viewport134- **Appropriate reflow**: Content adapts logically135136### Performance137138- **Fast initial load**: Optimize critical path139- **No layout shift**: Elements do not jump after load (CLS)140- **Smooth interactions**: No lag or jank141- **Optimized images**: Appropriate formats and sizes142- **Lazy loading**: Off-screen content loads lazily143144### Code Quality145146- **Remove console logs**: No debug logging in production147- **Remove commented code**: Clean up dead code148- **Remove unused imports**: Clean up unused dependencies149- **Consistent naming**: Variables and functions follow conventions150- **Type safety**: No TypeScript `any` or ignored errors151- **Accessibility**: Proper ARIA labels and semantic HTML152153## Polish Checklist154155- [ ] Visual alignment perfect at all breakpoints156- [ ] Spacing uses design tokens consistently157- [ ] Typography hierarchy consistent158- [ ] All interactive states implemented159- [ ] All transitions smooth (60fps)160- [ ] Copy is consistent and polished161- [ ] Icons are consistent and properly sized162- [ ] All forms properly labeled and validated163- [ ] Error states are helpful164- [ ] Loading states are clear165- [ ] Empty states are welcoming166- [ ] Touch targets are 44x44px minimum167- [ ] Contrast ratios meet WCAG AA168- [ ] Keyboard navigation works169- [ ] Focus indicators visible170- [ ] No console errors or warnings171- [ ] No layout shift on load172- [ ] Works in all supported browsers173- [ ] Respects reduced motion preference174- [ ] Code is clean (no TODOs, console.logs, commented code)175176**NEVER**:177178- Polish before it is functionally complete179- Spend hours on polish if it ships in 30 minutes (triage)180- Introduce bugs while polishing (test thoroughly)181- Ignore systematic issues (if spacing is off everywhere, fix the system)182- Perfect one thing while leaving others rough (consistent quality level)183184## Final Verification185186- **Use it yourself**: Actually interact with the feature187- **Test on real devices**: Not just browser DevTools188- **Ask someone else to review**: Fresh eyes catch things189- **Compare to design**: Match intended design190- **Check all states**: Do not just test happy path