Skip to content
Back to skills

Design System

ASecurity

Build, maintain, and audit design systems — tokens, component libraries, style guides, and cross-project consistency. Use when asked to create a design system, define tokens, audit component consistency, generate a style guide, or sync design tokens with code.

  • 119 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
designjavascriptgojavadocumentation

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add espennilsen/pi --skill design-system --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Design System?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Design System
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/espennilsen-design-system/badge)](https://www.skillsdirectory.com/skills/espennilsen-design-system)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: design-system
description: >
  Build, maintain, and audit design systems — tokens, component libraries, style guides, and
  cross-project consistency. Use when asked to create a design system, define tokens, audit
  component consistency, generate a style guide, or sync design tokens with code.
---

# Design System Management

Structured workflows for building and maintaining design systems across Espen's projects.

## Design Token Architecture

Design tokens are the single source of truth — they flow from Penpot → JSON → Tailwind config → components.

### Token Categories

#### 1. Color Tokens
```
primitive/          — raw color values (gray-50 through gray-950, blue-500, etc.)
semantic/           — meaning-based aliases
  ├── background    — page, card, surface, overlay
  ├── foreground    — text-primary, text-secondary, text-muted, text-inverse
  ├── border        — default, muted, focus, error
  ├── accent        — primary, secondary
  └── status        — success, warning, error, info
interactive/        — state-based
  ├── hover         — bg-hover, text-hover
  ├── active        — bg-active
  ├── focus         — ring-color, ring-offset
  └── disabled      — bg-disabled, text-disabled
```

#### 2. Typography Tokens
```
font-family/        — sans, mono, serif (if used)
font-size/          — xs (12px), sm (14px), base (16px), lg (18px), xl (20px), 2xl-5xl
font-weight/        — normal (400), medium (500), semibold (600), bold (700)
line-height/        — tight (1.2), normal (1.5), relaxed (1.75)
letter-spacing/     — tight (-0.025em), normal (0), wide (0.025em)
```

#### 3. Spacing Tokens
Aligned with Tailwind's 4px base:
```
0: 0px, 0.5: 2px, 1: 4px, 1.5: 6px, 2: 8px, 2.5: 10px, 3: 12px, 4: 16px,
5: 20px, 6: 24px, 8: 32px, 10: 40px, 12: 48px, 16: 64px, 20: 80px, 24: 96px
```

#### 4. Layout Tokens
```
radius/             — none (0), sm (4px), md (8px), lg (12px), xl (16px), full (9999px)
shadow/             — none, sm, md, lg, xl, 2xl, inner
border-width/       — 0, 1px, 2px, 4px
z-index/            — dropdown (50), sticky (100), modal (200), popover (300), toast (400)
breakpoint/         — sm (640px), md (768px), lg (1024px), xl (1280px), 2xl (1536px)
```

#### 5. Motion Tokens
```
duration/           — fast (100ms), normal (200ms), slow (300ms), slower (500ms)
easing/             — ease-in, ease-out, ease-in-out, cubic-bezier(0.4, 0, 0.2, 1)
```

### Token Format (JSON)

Store tokens in a structured JSON file that can be consumed by both Penpot and Tailwind:

```json
{
  "$schema": "design-tokens",
  "version": "1.0.0",
  "colors": {
    "primitive": { "gray": { "50": "#fafafa", "900": "#171717" } },
    "semantic": {
      "background": { "page": "{colors.primitive.gray.50}", "card": "#ffffff" },
      "foreground": { "text-primary": "{colors.primitive.gray.900}", "text-secondary": "#737373", "text-muted": "#a3a3a3" },
      "accent": { "primary": "#7c6ff0", "primary-foreground": "#ffffff", "secondary": "#6b7280" }
    }
  },
  "typography": { ... },
  "spacing": { ... }
}
```

## Component Library Structure

### Component Documentation Template

For each component in the design system, maintain:

```markdown
## Component: [Name]

**Category:** atoms | molecules | organisms
**Shadcn equivalent:** [shadcn-svelte component name, if applicable]

### Variants
- [List all visual variants]

### States
- Default, Hover, Active, Focus, Disabled, Loading, Error

### Props / Slots
- [What's configurable — size, color, icon, label, etc.]

### Accessibility
- Role: [ARIA role]
- Keyboard: [Tab, Enter, Escape, Arrow keys behavior]
- Screen reader: [What gets announced]

### Usage Guidelines
- When to use vs. alternatives
- Do's and don'ts

### Token Dependencies
- Colors: [which tokens]
- Typography: [which tokens]
- Spacing: [which tokens]
```

## Design System Audit

Run periodically to catch drift between design and code:

### Audit Checklist

1. **Token sync** — do Penpot colors/typography match the exported token JSON?
2. **Component coverage** — are all coded components represented in Penpot?
3. **Orphan styles** — any one-off colors, fonts, or spacing in Penpot that aren't in the token set?
4. **Naming consistency** — do component names match between Penpot and code?
5. **State completeness** — does every interactive component have all required states?
6. **Accessibility** — do all color combinations pass WCAG AA contrast ratios?
7. **Dark mode** — if supported, are all semantic tokens mapped for both themes?
8. **Documentation** — is the component documentation up to date?

### Audit Output Format

```markdown
## Design System Audit — [Date]

### Summary
- Components: X in Penpot, Y in code, Z fully synced
- Token drift: [list mismatches]
- Missing states: [list components with incomplete states]

### 🔴 Critical
- [Issues that break consistency or accessibility]

### 🟡 Important
- [Issues that should be fixed soon]

### 🔵 Minor
- [Nice-to-haves, polish items]

### ✅ Healthy
- [What's in good shape]
```

## Cross-Project Consistency

When multiple projects share a design system:

1. **Shared token package** — publish tokens as a versioned JSON/NPM package
2. **Penpot shared library** — use Penpot's shared library feature for cross-project components
3. **Version the system** — use semver for breaking changes (color removal, spacing scale changes)
4. **Changelog** — track every design system change with rationale

## Tailwind Integration

Map design tokens to Tailwind config:

```javascript
// tailwind.config.js (generated from tokens)
export default {
  theme: {
    extend: {
      colors: {
        // From semantic tokens
        background: 'var(--color-background)',
        foreground: 'var(--color-foreground)',
        primary: { DEFAULT: 'var(--color-accent-primary)', foreground: 'var(--color-accent-primary-foreground)' },
      },
      borderRadius: {
        // From radius tokens
        sm: 'var(--radius-sm)',
        md: 'var(--radius-md)',
        lg: 'var(--radius-lg)',
      }
    }
  }
}
```

This ensures design tokens are the single source of truth — change them in Penpot, export, and the Tailwind config updates automatically.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…