The Four Phases
You MUST complete each phase before proceeding to the next.
Phase 1: The Design System (The "Palette")
BEFORE designing a single screen:
Audit the Atoms
- Do not invent new colors. Use the defined palette (Primary, Secondary, Neutral, Semantic/Error).
- Do not pick arbitrary font sizes. Use the Type Scale (H1, H2, Body, Caption).
- Rule: If you are using a hex code or font size that isn't in the library, you are creating technical debt.
Establish the Grid
- Define the underlying structure (e.g., 8pt/4pt grid).
- Spacing is not random. Margins and padding should be multiples of the base unit (8, 16, 24, 32px).
- Define breakpoints for responsiveness (Mobile, Tablet, Desktop).
Check for Existing Components
- Need a dropdown? Check the library.
- Need a card? Check the library.
- Rule: Reuse > Modify > Create. Only build a new component if the existing one fundamentally fails the use case.
Phase 2: Visual Hierarchy & Composition
Guide the user's eye:
The "Squint Test"
- Squint at your design (or blur it). What stands out?
- The most important element (Primary Action) must carry the most visual weight.
- If everything is bold, nothing is bold.
Contrast & Accessibility
- Text Contrast: Check WCAG AA compliance (4.5:1 ratio).
- Color Independence: Don't use color alone to convey meaning (e.g., Error state needs red color + icon/text).
- Focus States: Design the blue ring/outline for keyboard users.
White Space (Negative Space)
- Use space to group related items (Law of Proximity).
- Use space to separate distinct sections.
- Rule: Clutter increases cognitive load. When in doubt, add more padding.
Phase 3: Interactivity & States (The "Behavior")
The interface is not a static poster:
Define All States
- Default: How it looks initially.
- Hover: How it invites interaction (desktop).
- Pressed/Active: The tactile feedback.
- Disabled: Why is it disabled? (Tooltip?).
- Loading: Spinner or Skeleton?
- Error: How does it scream "Fix me"?
Micro-Interactions & Motion
- Animations must have purpose (guiding the eye), not just flair.
- Duration: 200ms-300ms is the sweet spot.
- Easing: Use
ease-out for entering elements, ease-in for exiting.
Responsive Adaptation
- How does this 3-column grid stack on mobile?
- Do tables turn into cards? Does the menu become a hamburger?
- Mock it up. Don't make the developer guess.
Phase 3.5: Modern CSS Capabilities (2026)
New CSS superpowers:
Container Queries (Responsive Components)
.card-container {
container-type: inline-size;
}
@container (min-width: 400px) {
.card { grid-template-columns: 1fr 2fr; }
}
- Why: Responsive based on parent, not viewport
- Use Case: Card component that adapts to sidebar vs main content
:has() Selector (Parent Selectors)
/* Style card differently if it has an image */
.card:has(img) { padding-top: 0; }
- Why: Previously impossible without JavaScript
- Support: Safari 15.4+, Chrome 105+, Firefox 121+
CSS Layers (@layer)
@layer reset, base, components, utilities;
@layer components { .button { ... } }
- Why: Control cascade order explicitly
- Use Case: Prevent utility classes from being overridden
Variable Fonts
- Single file, multiple styles: 100-900 weight, normal-italic
- Performance: One request vs 10 font files
- Animation: Smoothly animate font-weight
- Tools: Google Fonts (many now variable), v-fonts.com
Phase 4: Handoff & Visual QA (The "Polish")
Pixel perfection in code, not just Figma:
Asset Preparation
- Export SVGs for icons (scalable).
- Optimize images (WebP/PNG).
- Name your layers/assets logically (
icon/user-profile not Vector 14 copy).
Redlining / Spec-ing
- If you use Figma Dev Mode, ensure variables are mapped correctly.
- Annotate specific behaviors ("Sticky header stops here").
- Annotate responsive rules ("On mobile, hide this image").
Visual QA (VQA)
- Sit with the developer.
- Compare the build to the design.
- Check for "Layout Shift" (things jumping around).
- Rule: You own the visual quality of the final product, not the developer.
Red Flags - STOP and Follow Process
If you catch yourself thinking:
- "I'll just eyeball the padding, it looks fine."
- "This light grey text looks elegant." (It's unreadable).
- "I don't need to design the hover state, they know standard behavior."
- "I'll make this button slightly different to make it pop." (Inconsistency).
- "I'm bored of this layout, let's change the style." (Brand fragmentation).
- "I'll use Lorem Ipsum." (Real content will break your layout).
- Designing "Mobile" last.
ALL of these mean: STOP. Return to Phase 1.
Your Human Partner's Signals You're Doing It Wrong
Watch for these complaints:
- Dev: "I don't have this font weight in the system." (You broke the system).
- UX: "The user didn't see the error message." (Bad hierarchy/contrast).
- Dev: "Is this padding 15px or 16px?" (Inconsistent spacing).
- PM: "The text gets cut off in German." (You didn't test content length).
- User: "I didn't know I could click that." (Weak affordance).
When you see these: STOP. Audit your hierarchy and system usage.
Common Rationalizations
| Excuse |
Reality |
| "Strict grids stifle creativity" |
Grids enable consistency. Creativity lives within constraints. |
| "Developers should know to stack it" |
They might, but they might stack it wrong. Define it. |
| "It looks good on my retina screen" |
Most users have cheap monitors with bad contrast. |
| "I'll clean up the layer names later" |
Messy files lead to messy code and wrong assets. |
| "Accessibility ruins the aesthetic" |
Inaccessible design is broken design. |
| "Motion is just extra polish" |
Motion conveys state change. It is functional. |
Quick Reference
| Phase |
Key Activities |
Success Criteria |
| 1. System |
Tokens, Grid, Type Scale |
Consistent foundation |
| 2. Hierarchy |
Contrast, Spacing, Layout |
Clear "Squint Test" results |
| 3. States |
Hover, Error, Loading, Mobile |
Complete component lifecycle |
| 4. Handoff |
Specs, VQA, Assets |
Build matches Design |
When The "Brand" Clashes with "Usability"
When Marketing wants a "Branded Experience" that hurts UI patterns:
- Prioritize Clarity: If the brand font is illegible at small sizes, use the system font for UI/Body text and brand font for Headings only.
- Test it: Show the "on-brand" button vs the "accessible" button to users.
- Compromise: Use brand colors for delight/accents, not for core navigation if they lack contrast.
Supporting Techniques
superpowers:design-tokens - Mapping hex codes to semantic names (primary-action-bg).
superpowers:atomic-design - Building from Atoms -> Molecules -> Organisms.
superpowers:responsive-layouts - Understanding Flexbox and Grid limitations.
Real-World Impact
- "Artist" UI: Looks great on Dribbble, falls apart with real data, confuses users, expensive to build/refactor.
- "System" UI: Scales infinitely, developers build 2x faster (reusable components), users feel "at home" instantly due to consistency.
1---2name: ui-designer3description: UI Designer Skill4---5## The Four Phases67You MUST complete each phase before proceeding to the next.89### Phase 1: The Design System (The "Palette")1011**BEFORE designing a single screen:**12131. **Audit the Atoms**14 - Do not invent new colors. Use the defined palette (Primary, Secondary, Neutral, Semantic/Error).15 - Do not pick arbitrary font sizes. Use the Type Scale (H1, H2, Body, Caption).16 - **Rule:** If you are using a hex code or font size that isn't in the library, you are creating technical debt.17182. **Establish the Grid**19 - Define the underlying structure (e.g., 8pt/4pt grid).20 - **Spacing is not random.** Margins and padding should be multiples of the base unit (8, 16, 24, 32px).21 - Define breakpoints for responsiveness (Mobile, Tablet, Desktop).22233. **Check for Existing Components**24 - Need a dropdown? Check the library.25 - Need a card? Check the library.26 - **Rule:** Reuse > Modify > Create. Only build a new component if the existing one fundamentally fails the use case.2728### Phase 2: Visual Hierarchy & Composition2930**Guide the user's eye:**31321. **The "Squint Test"**33 - Squint at your design (or blur it). What stands out?34 - The most important element (Primary Action) must carry the most visual weight.35 - If everything is bold, nothing is bold.36372. **Contrast & Accessibility**38 - **Text Contrast:** Check WCAG AA compliance (4.5:1 ratio).39 - **Color Independence:** Don't use color alone to convey meaning (e.g., Error state needs red color + icon/text).40 - **Focus States:** Design the blue ring/outline for keyboard users.41423. **White Space (Negative Space)**43 - Use space to group related items (Law of Proximity).44 - Use space to separate distinct sections.45 - **Rule:** Clutter increases cognitive load. When in doubt, add more padding.4647### Phase 3: Interactivity & States (The "Behavior")4849**The interface is not a static poster:**50511. **Define All States**52 - **Default:** How it looks initially.53 - **Hover:** How it invites interaction (desktop).54 - **Pressed/Active:** The tactile feedback.55 - **Disabled:** Why is it disabled? (Tooltip?).56 - **Loading:** Spinner or Skeleton?57 - **Error:** How does it scream "Fix me"?58592. **Micro-Interactions & Motion**60 - Animations must have purpose (guiding the eye), not just flair.61 - **Duration:** 200ms-300ms is the sweet spot.62 - **Easing:** Use `ease-out` for entering elements, `ease-in` for exiting.63643. **Responsive Adaptation**65 - How does this 3-column grid stack on mobile?66 - Do tables turn into cards? Does the menu become a hamburger?67 - **Mock it up.** Don't make the developer guess.6869### Phase 3.5: Modern CSS Capabilities (2026)7071**New CSS superpowers:**72731. **Container Queries (Responsive Components)**74 ```css75 .card-container {76 container-type: inline-size;77 }78 @container (min-width: 400px) {79 .card { grid-template-columns: 1fr 2fr; }80 }81 ```82 - **Why:** Responsive based on parent, not viewport83 - **Use Case:** Card component that adapts to sidebar vs main content84852. **:has() Selector (Parent Selectors)**86 ```css87 /* Style card differently if it has an image */88 .card:has(img) { padding-top: 0; }89 ```90 - **Why:** Previously impossible without JavaScript91 - **Support:** Safari 15.4+, Chrome 105+, Firefox 121+92933. **CSS Layers (@layer)**94 ```css95 @layer reset, base, components, utilities;96 @layer components { .button { ... } }97 ```98 - **Why:** Control cascade order explicitly99 - **Use Case:** Prevent utility classes from being overridden1001014. **Variable Fonts**102 - **Single file, multiple styles:** 100-900 weight, normal-italic103 - **Performance:** One request vs 10 font files104 - **Animation:** Smoothly animate font-weight105 - **Tools:** Google Fonts (many now variable), v-fonts.com106107### Phase 4: Handoff & Visual QA (The "Polish")108109**Pixel perfection in code, not just Figma:**1101111. **Asset Preparation**112 - Export SVGs for icons (scalable).113 - Optimize images (WebP/PNG).114 - Name your layers/assets logically (`icon/user-profile` not `Vector 14 copy`).1151162. **Redlining / Spec-ing**117 - If you use Figma Dev Mode, ensure variables are mapped correctly.118 - Annotate specific behaviors ("Sticky header stops here").119 - Annotate responsive rules ("On mobile, hide this image").1201213. **Visual QA (VQA)**122 - Sit with the developer.123 - Compare the build to the design.124 - Check for "Layout Shift" (things jumping around).125 - **Rule:** You own the visual quality of the final product, not the developer.126127## Red Flags - STOP and Follow Process128129If you catch yourself thinking:130- "I'll just eyeball the padding, it looks fine."131- "This light grey text looks elegant." (It's unreadable).132- "I don't need to design the hover state, they know standard behavior."133- "I'll make this button slightly different to make it pop." (Inconsistency).134- "I'm bored of this layout, let's change the style." (Brand fragmentation).135- "I'll use Lorem Ipsum." (Real content will break your layout).136- **Designing "Mobile" last.**137138**ALL of these mean: STOP. Return to Phase 1.**139140## Your Human Partner's Signals You're Doing It Wrong141142**Watch for these complaints:**143- **Dev:** "I don't have this font weight in the system." (You broke the system).144- **UX:** "The user didn't see the error message." (Bad hierarchy/contrast).145- **Dev:** "Is this padding 15px or 16px?" (Inconsistent spacing).146- **PM:** "The text gets cut off in German." (You didn't test content length).147- **User:** "I didn't know I could click that." (Weak affordance).148149**When you see these:** STOP. Audit your hierarchy and system usage.150151## Common Rationalizations152153| Excuse | Reality |154|--------|---------|155| "Strict grids stifle creativity" | Grids enable consistency. Creativity lives within constraints. |156| "Developers should know to stack it" | They might, but they might stack it wrong. Define it. |157| "It looks good on my retina screen" | Most users have cheap monitors with bad contrast. |158| "I'll clean up the layer names later" | Messy files lead to messy code and wrong assets. |159| "Accessibility ruins the aesthetic" | Inaccessible design is broken design. |160| "Motion is just extra polish" | Motion conveys state change. It is functional. |161162## Quick Reference163164| Phase | Key Activities | Success Criteria |165|-------|---------------|------------------|166| **1. System** | Tokens, Grid, Type Scale | Consistent foundation |167| **2. Hierarchy** | Contrast, Spacing, Layout | Clear "Squint Test" results |168| **3. States** | Hover, Error, Loading, Mobile | Complete component lifecycle |169| **4. Handoff** | Specs, VQA, Assets | Build matches Design |170171## When The "Brand" Clashes with "Usability"172173When Marketing wants a "Branded Experience" that hurts UI patterns:1741751. **Prioritize Clarity:** If the brand font is illegible at small sizes, use the system font for UI/Body text and brand font for Headings only.1762. **Test it:** Show the "on-brand" button vs the "accessible" button to users.1773. **Compromise:** Use brand colors for delight/accents, not for core navigation if they lack contrast.178179## Supporting Techniques180181- **`superpowers:design-tokens`** - Mapping hex codes to semantic names (`primary-action-bg`).182- **`superpowers:atomic-design`** - Building from Atoms -> Molecules -> Organisms.183- **`superpowers:responsive-layouts`** - Understanding Flexbox and Grid limitations.184185## Real-World Impact186187- **"Artist" UI:** Looks great on Dribbble, falls apart with real data, confuses users, expensive to build/refactor.188- **"System" UI:** Scales infinitely, developers build 2x faster (reusable components), users feel "at home" instantly due to consistency.