home / skills / mosif16 / codex-skills / design-guide

design-guide skill

/skills/design-guide

This skill enforces a modern, consistent UI design across platforms, guiding color, spacing, typography, and interactive states for polished interfaces.

npx playbooks add skill mosif16/codex-skills --skill design-guide

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
10.1 KB
---
name: design-guide
description: Ensures modern, professional UI design across SwiftUI, Android, and web platforms. Use when building ANY user interface components including buttons, forms, cards, layouts, navigation, or complete screens. Enforces clean minimal design, neutral color palettes with one accent color, 8px grid spacing system, proper typography hierarchy, and clear interactive states. Always reference before creating or modifying UI elements.
---

# Design Guide

Comprehensive design system ensuring every UI you build looks modern, professional, and consistent across all platforms (SwiftUI, Android Studio, web applications).

## Bundled Resources

This skill includes additional reference materials:

- **references/color-palettes.md** - Detailed color schemes, accent color options, and platform-specific color implementation examples. Reference when choosing or implementing colors.
- **references/component-templates.md** - Ready-to-use code templates for buttons, cards, forms, and navigation across SwiftUI, Android Compose, and React. Reference when implementing specific components.

## Core Design Principles

### 1. Clean and Minimal
- Embrace white space generously
- Avoid cluttered interfaces
- One primary action per screen/section
- Remove unnecessary decorative elements
- Let content breathe

### 2. Color Palette

**Neutral Base:**
- Use grays and off-whites as foundation
- White: #FFFFFF
- Light gray: #F5F5F5, #EEEEEE
- Medium gray: #9E9E9E, #757575
- Dark gray: #424242, #212121
- True black sparingly: #000000

**Accent Color:**
- Choose ONE accent color for your app
- Use sparingly for CTAs, important actions, and key information
- Good accent options: Emerald (#10B981), Indigo (#6366F1), Rose (#F43F5E), Amber (#F59E0B)
- **NEVER use generic purple/blue gradients**

**Color Usage Rules:**
- 80% neutral, 15% secondary neutral, 5% accent
- Backgrounds: light grays or white
- Text: dark grays on light backgrounds
- Interactive elements: accent color
- Borders/dividers: very light gray (#E5E5E5)

### 3. Spacing System (8px Grid)

**Always use multiples of 8:**
- 8px: Tight spacing (icon padding, inline elements)
- 16px: Standard spacing (button padding, form field gaps)
- 24px: Section spacing (card internal padding)
- 32px: Component spacing (between cards, sections)
- 48px: Major section breaks
- 64px: Screen-level spacing (margins)

**Application:**
- Padding: 16px or 24px for most containers
- Margins: 32px between major sections
- Gap between elements: 16px standard, 8px for tight groups
- Never use arbitrary values like 13px or 27px

### 4. Typography

**Hierarchy:**
- H1: 32px - 40px, bold, rare (page titles only)
- H2: 24px - 28px, semibold (section headers)
- H3: 20px - 24px, semibold (subsections)
- Body: 16px - 18px, regular (MINIMUM 16px for readability)
- Small: 14px, regular (captions, metadata)
- Tiny: 12px, regular (legal text only, use rarely)

**Font Rules:**
- Maximum 2 font families per project
- One for headings (can be display font)
- One for body text (must be highly readable)
- Recommended pairings:
  - Inter + Inter (single family, different weights)
  - SF Pro Display + SF Pro Text (Apple platforms)
  - Roboto + Roboto (Android)
  - System fonts always acceptable

**Line Height:**
- Headings: 1.2 - 1.3
- Body: 1.5 - 1.6
- Small text: 1.4

### 5. Shadows

**Subtle, not heavy:**
- Small shadow: `0 1px 3px rgba(0,0,0,0.12)`
- Medium shadow: `0 4px 6px rgba(0,0,0,0.1)`
- Large shadow: `0 10px 15px rgba(0,0,0,0.1)`
- Floating shadow: `0 20px 25px rgba(0,0,0,0.1)`

**When to use:**
- Cards: subtle shadow or border, not both
- Buttons: very subtle shadow on hover
- Modals/dialogs: medium shadow
- Dropdowns: medium shadow
- **Avoid:** heavy drop shadows, inner shadows, multiple shadows

### 6. Rounded Corners

**Border Radius Guidelines:**
- Small elements (buttons, inputs): 6px - 8px
- Cards, containers: 8px - 12px
- Large panels: 12px - 16px
- Circular (avatars, icon buttons): 50% or 9999px

**Don't overdo it:**
- Not everything needs rounded corners
- Sharp corners acceptable for:
  - Screen edges
  - Full-width sections
  - Data tables
  - Navigation bars

### 7. Interactive States

**Every interactive element MUST have:**

**Buttons:**
- Default: base color, subtle shadow
- Hover: slightly darker (10%), lift shadow
- Active: pressed appearance, darker (20%)
- Disabled: 40% opacity, no hover, no pointer cursor
- Focus: visible outline (2px accent color, 2px offset)

**Form Fields:**
- Default: light gray border (#E5E5E5)
- Focus: accent color border (2px), remove shadow
- Error: red border, error text below
- Disabled: gray background, no interaction
- Valid: subtle green checkmark (optional)

**Links:**
- Default: accent color, underline on hover
- Visited: slightly muted accent
- Never: blue #0000FF (unless that's your accent)

**Cards:**
- Default: subtle shadow or border
- Hover: lift effect, slightly stronger shadow
- Active: immediate feedback

### 8. Mobile-First Thinking

**Always design for mobile first, then scale up:**
- Touch targets minimum 44x44px (iOS), 48x48px (Android)
- Adequate spacing between tappable elements (min 8px)
- Thumb-friendly navigation (bottom of screen)
- Single column layouts on mobile
- Responsive breakpoints:
  - Mobile: < 640px
  - Tablet: 640px - 1024px
  - Desktop: > 1024px

## Component Patterns

### Buttons

**Primary Button (main action):**
```
Background: Accent color
Text: White
Padding: 12px 24px (vertical, horizontal)
Border radius: 8px
Shadow: 0 1px 3px rgba(0,0,0,0.12)
Font: 16px, semibold
Hover: Darken 10%, lift shadow
```

**Secondary Button (alternative action):**
```
Background: White
Text: Accent color
Border: 1px solid accent color
Padding: 12px 24px
Border radius: 8px
Hover: Light accent background (10% opacity)
```

**Ghost Button (tertiary action):**
```
Background: Transparent
Text: Dark gray
No border
Padding: 12px 24px
Hover: Light gray background
```

**Bad Button Examples:**
- ❌ Gradient backgrounds
- ❌ Multiple colors in one button
- ❌ Tiny padding (looks cramped)
- ❌ No hover state
- ❌ Text too small (< 14px)

### Cards

**Standard Card:**
```
Background: White
Border: 1px solid #E5E5E5 OR subtle shadow (not both)
Border radius: 12px
Padding: 24px
Margin bottom: 16px

OR

Background: White
Shadow: 0 4px 6px rgba(0,0,0,0.1)
Border radius: 12px
Padding: 24px
Margin bottom: 16px
```

**Card Content Spacing:**
- Title to subtitle: 8px
- Subtitle to content: 16px
- Content sections: 24px
- Content to actions: 24px

**Bad Card Examples:**
- ❌ Both border AND shadow
- ❌ Heavy shadows
- ❌ Inconsistent padding
- ❌ Too many colors

### Forms

**Form Field:**
```
Label: 14px, semibold, dark gray, margin bottom 8px
Input: 
  - Height: 44px minimum
  - Padding: 12px 16px
  - Border: 1px solid #E5E5E5
  - Border radius: 8px
  - Background: White
  - Font: 16px
  - Focus: Accent border, no shadow
  
Error state:
  - Border: Red
  - Helper text: Red, 14px, margin top 4px
  
Field spacing: 24px between fields
```

**Form Layout:**
- Labels above inputs (not beside)
- Clear required indicators
- Group related fields
- Adequate spacing (24px minimum)
- Submit button: full width on mobile, auto on desktop

**Bad Form Examples:**
- ❌ Labels inside inputs (placeholder text is not a label)
- ❌ Tiny text (< 16px)
- ❌ Cramped spacing
- ❌ No error states
- ❌ Unclear required fields

### Navigation

**Top Navigation:**
```
Height: 64px
Background: White
Border bottom: 1px solid #E5E5E5
Padding: 0 32px (desktop), 0 16px (mobile)
Logo: 32px height
Links: 16px, medium weight, dark gray
Active link: Accent color
```

**Bottom Navigation (Mobile):**
```
Height: 56px
Background: White
Shadow: 0 -4px 6px rgba(0,0,0,0.1)
Icons: 24px, centered
Labels: 12px (optional)
Active: Accent color
```

## Design Quality Checklist

Before considering any UI complete, verify:

**Layout:**
- [ ] Adequate white space throughout
- [ ] Consistent spacing using 8px grid
- [ ] Not cluttered or cramped
- [ ] Clear visual hierarchy

**Colors:**
- [ ] Neutral base colors (grays/whites)
- [ ] Only ONE accent color
- [ ] NO gradients (unless specifically requested)
- [ ] Sufficient contrast (WCAG AA minimum)

**Typography:**
- [ ] Clear hierarchy (size + weight)
- [ ] Body text minimum 16px
- [ ] Maximum 2 font families
- [ ] Readable line heights

**Interactive Elements:**
- [ ] Clear hover states
- [ ] Clear active states
- [ ] Clear disabled states
- [ ] Clear focus states (keyboard navigation)

**Components:**
- [ ] Buttons have proper padding
- [ ] Forms have clear labels and spacing
- [ ] Cards use border OR shadow, not both
- [ ] Shadows are subtle

**Mobile:**
- [ ] Touch targets minimum 44x44px
- [ ] Works on small screens
- [ ] Adequate spacing for touch

## Platform-Specific Notes

### SwiftUI
- Use `.padding()` with explicit values from 8px grid
- Use `Color` with hex initializers for consistent colors
- Leverage `@Environment(\.colorScheme)` for dark mode
- Use SF Symbols for icons (always consistent)

### Android Studio
- Use `dp` units (1dp ≈ 1px on mdpi)
- Material Design 3 components acceptable but customize colors
- Use `dimens.xml` for spacing constants
- Leverage Compose for modern UI

### Web (HTML/CSS/React)
- Use CSS variables for colors and spacing
- Mobile-first media queries
- Use semantic HTML
- Leverage Tailwind CSS classes following this guide

## Anti-Patterns to Avoid

**NEVER do these:**
- ❌ Rainbow gradients everywhere
- ❌ Different colors on every element
- ❌ Purple/blue gradients by default
- ❌ Tiny unreadable text (< 16px body)
- ❌ Inconsistent spacing (random values)
- ❌ Heavy drop shadows
- ❌ Overly rounded everything
- ❌ Missing interactive states
- ❌ Both borders AND shadows on same element
- ❌ Cluttered layouts with no white space
- ❌ More than 2 font families
- ❌ Touch targets smaller than 44px

## Quick Reference

**Spacing:** 8, 16, 24, 32, 48, 64px
**Typography:** 16px minimum body, max 2 fonts
**Colors:** Neutral base + ONE accent
**Shadows:** Subtle only
**Border radius:** 6-12px most elements
**Interactive states:** Always include hover, active, disabled, focus

Always reference this guide before creating any UI component. Consistency is key to professional design.

Overview

This skill ensures modern, professional, and consistent UI design across SwiftUI, Android, and web platforms. It enforces a clean, minimal aesthetic with a neutral color base plus one accent color, an 8px grid spacing system, clear typography hierarchy, and defined interactive states. Always consult this guide before creating or modifying any UI component.

How this skill works

The skill inspects component and screen designs for adherence to core rules: spacing multiples of 8px, neutral-first color distribution with a single accent, minimum typography sizes and line heights, subtle shadows, and required interactive states. It flags violations (random spacing, multiple accent uses, missing hover/focus/disabled states, improper shadows, etc.) and provides actionable corrections and platform-specific implementation tips for SwiftUI, Android, and web.

When to use it

  • When designing or updating buttons, forms, cards, navigation, or full screens
  • When establishing or auditing a cross-platform design system
  • Before approving UI implementations for mobile or web releases
  • When converting visual mockups into production code
  • When verifying accessibility and touch targets on mobile

Best practices

  • Follow the 8px grid exclusively: use 8, 16, 24, 32, 48, 64px values only
  • Use a neutral palette for 95% of the UI and one accent color for CTAs and highlights
  • Keep body text ≥16px and limit projects to two font families
  • Prefer subtle shadows and avoid combining border + shadow on the same component
  • Always include hover, active, disabled, and focus states for interactive elements
  • Design mobile-first and ensure touch targets meet platform minimums

Example use cases

  • Create a primary and secondary button pair that matches padding, radius, and interactive states
  • Design a card component with either a light border or a subtle shadow, consistent padding, and spacing
  • Audit a form layout to ensure labels above inputs, 24px field spacing, and proper error states
  • Implement responsive navigation with a 64px top bar on desktop and a 56px bottom bar on mobile
  • Convert a visual design to SwiftUI/Compose/React using spacing constants, CSS variables, or dimens

FAQ

What if my brand requires multiple accent colors?

Stick to one primary accent for UI actions and reserve additional brand colors for marketing or illustrations only. Multiple accents in UI elements create visual noise and should be avoided.

Can I use custom shadows or heavy effects for emphasis?

No. Use only subtle shadows defined in the guide. Heavy or multiple shadows reduce clarity and contrast; prefer slight lift or border alternatives.