💻 Développement

dev-ui-design-system-builder

Création de design systems cohérents avec tokens, composants et guidelines.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dev-ui-design-system-builder --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dev-ui-design-system-builder -Launch"

🚀 Déjà installé ?

claude "/dev-ui-design-system-builder"

Ou tapez /dev-ui-design-system-builder dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

design systemcomposants UItokensstyle guideatomic designFigma componentsUI librarythèmedesign tokens

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/dev-ui-design-system-builder ~/.claude/skills/

Payload du plugin : skills/dev-ui-design-system-builder · source éditable : dev-skills/ui-design-system-builder

📖 Manuel

UI Design System Builder

Étapes du workflow

1. Audit de l'existant

Avant de créer quoi que ce soit, inventorier :

- Compter les valeurs de couleur uniques dans le CSS (grep -r "color:" src/ | sort -u)
- Lister les font-size utilisées
- Identifier les composants Button/Card/Modal dupliqués entre équipes
- Mesurer l'écart design (Figma) ↔ implémentation (DOM)

Critère de go/no-go : si > 5 composants identiques avec des styles différents coexistent → design system prioritaire. Sinon, un simple tokens file suffit peut-être.


2. Design Tokens — single source of truth

Définir les tokens en JSON (style-dictionary) ou en CSS custom properties.

Structure recommandée (style-dictionary 4.x) :

{
  "color": {
    "brand": { "primary": { "value": "#1A73E8" } },
    "neutral": {
      "100": { "value": "#F5F5F5" },
      "900": { "value": "#1A1A1A" }
    },
    "semantic": {
      "success": { "value": "{color.green.500}" },
      "error":   { "value": "{color.red.600}" }
    }
  },
  "spacing": {
    "xs":  { "value": "4px"  },
    "sm":  { "value": "8px"  },
    "md":  { "value": "16px" },
    "lg":  { "value": "24px" },
    "xl":  { "value": "32px" }
  },
  "typography": {
    "scale": {
      "h1": { "value": "2.25rem" },
      "body": { "value": "1rem" }
    },
    "weight": {
      "regular": { "value": 400 },
      "semibold": { "value": 600 }
    }
  },
  "radius": {
    "sm": { "value": "4px" },
    "md": { "value": "8px" },
    "full": { "value": "9999px" }
  }
}

Build via style-dictionary pour générer CSS, JS, iOS Swift, Android XML en parallèle :

npx style-dictionary build --config sd.config.json

3. Palette de couleurs

Checklist WCAG 2.1 :

# Vérification rapide
npx @adobe/leonardo-contrast-colors --bg "#FFFFFF" --fg "#1A73E8"

Structure de palette :


4. Système typographique

Type scale modulaire (ratio 1.25 — Major Third) :

Tokenrempx
text-xs0.64~10
text-sm0.8~13
text-base1.016
text-lg1.2520
text-xl1.56325
text-2xl1.95331
text-3xl2.44139

Règles :


5. Composants atomiques

Pour chaque composant, livrer : props API + variants + états + accessibilité.

Exemple : Button

// Variants: primary | secondary | ghost | destructive
// Sizes: sm | md | lg
// States: default | hover | active | disabled | loading

interface ButtonProps {
  variant?: 'primary' | 'secondary' | 'ghost' | 'destructive';
  size?: 'sm' | 'md' | 'lg';
  loading?: boolean;
  disabled?: boolean;
  leftIcon?: React.ReactNode;
  onClick?: () => void;
  children: React.ReactNode;
}

Composants atomiques prioritaires : Button, Input, Checkbox, Radio, Badge, Avatar, Icon, Divider, Spinner, Tag


6. Composants moléculaires

Assembler les atomiques. Critère : un composant moléculaire contient ≥ 2 atomiques et a sa propre logique d'état.

Priorité par fréquence d'usage :

  1. Card (header + body + footer)
  2. Modal / Dialog (focus trap + aria-modal)
  3. Toast / Snackbar (auto-dismiss, variants success/error)
  4. Dropdown / Select (virtualisé si > 100 options)
  5. DataTable (sort, filter, pagination)
  6. Form (validation, error states, accessible labels)

7. Documentation — Storybook

npx storybook@latest init
# stories colocalisées : Button.stories.tsx à côté de Button.tsx

Structure d'une story minimale :

export default {
  title: 'Atoms/Button',
  component: Button,
  argTypes: { variant: { control: 'select' } },
};

export const AllVariants = () => (
  <div style={{ display: 'flex', gap: '8px' }}>
    {['primary','secondary','ghost','destructive'].map(v => (
      <Button key={v} variant={v as any}>{v}</Button>
    ))}
  </div>
);

Activer @storybook/addon-a11y pour les audits d'accessibilité inline.


8. Intégration Tailwind / CSS Variables

Option A — Tailwind config depuis tokens :

// tailwind.config.js
module.exports = {
  theme: {
    colors: require('./tokens/colors.json'),
    spacing: require('./tokens/spacing.json'),
    borderRadius: require('./tokens/radius.json'),
  },
};

Option B — CSS custom properties (framework-agnostic) :

:root {
  --color-primary:   #1A73E8;
  --spacing-md:      16px;
  --radius-md:       8px;
  --font-size-base:  1rem;
}

9. Versioning et gouvernance

# Semantic versioning : MAJOR.MINOR.PATCH
# MAJOR = breaking change (renommage token, suppression composant)
# MINOR = nouveau composant ou token
# PATCH = bug visuel, ajustement d'état

npm version minor -m "feat(button): add loading state"

Garde-fous — Anti-patterns

Anti-patternConséquenceCorrectif
Valeurs en dur (color: #1A73E8 dans un composant)Impossible de themingToujours passer par un token
Trop de variants dès le débutComplexity overheadCommencer avec 3 variants max, ajouter sur usage réel
Composants trop couplés (Card qui contient une Table)Impossible à réutiliserComposer via props/slots
Aucun test d'accessibilitéNon-conformité WCAGAjouter axe-core dans les tests CI
Design tokens sans ownerDérive silencieuseDésigner un DX/Design Lead responsable
Dark mode ajouté après coupRefactoring massifPlanifier les alias sémantiques dès le départ
Storybook non maintenuDécalage doc ↔ réalitéPR bloquante si story manquante

Références 2025-2026