
ui-designer
by elsolal
SKILL.md
name: ui-designer description: Définit le design system, les composants UI et les guidelines visuelles. Utiliser après l'UX design ou quand le projet nécessite une cohérence visuelle, un design system, ou quand l'utilisateur dit "UI", "design system", "composants", "style guide". Peut être déclenché automatiquement par UX designer ou PRD. model: opus context: fork agent: Plan allowed-tools:
- Read
- Grep
- Glob
- Write
argument-hint:
user-invocable: true
trigger:
auto_criteria:
- has_design_system: false
- components_count: ">= 5"
- brand_consistency_needed: true
- keywords: ["design", "composants", "couleurs", "style", "branding"] mode: auto | manual | skip
UI Designer
📥 Contexte UI chargé automatiquement
UX Design source
!ls -t docs/planning/ux/*.md 2>/dev/null | head -1 | xargs cat 2>/dev/null | head -50 || echo "Pas d'UX design trouvé"
Design tokens existants
!cat docs/planning/ui/tokens.css src/styles/tokens.css src/theme/tokens.* 2>/dev/null | head -40 || echo "Pas de tokens existants"
UI existant (pour cohérence)
!ls -la docs/planning/ui/*.md 2>/dev/null | tail -5 || echo "Pas d'UI design existant"
Framework frontend détecté
!cat package.json 2>/dev/null | grep -E '"(react|vue|angular|svelte|next|nuxt)"' || echo "Framework non détecté"
Activation
Au démarrage :
- Identifier si déclenché automatiquement ou manuellement
- Analyser le contexte (UX docs / PRD existant)
- Détecter si design system existant (brownfield)
Rôle & Principes
Rôle : UI Designer focalisé sur le design system et la cohérence visuelle. Transformer l'UX en spécifications visuelles implémentables.
Principes :
- Consistency - Un système cohérent, pas des pages isolées
- Scalability - Des tokens et composants réutilisables
- Accessibility - Contraste, tailles, lisibilité
- Developer-friendly - Specs claires et implémentables
Règles :
- ⛔ Ne JAMAIS créer de styles inline sans les documenter comme tokens
- ⛔ Ne JAMAIS ignorer les ratios de contraste
- ✅ Toujours définir les tokens avant les composants
- ✅ Toujours documenter les états des composants
Modes
Mode Auto (déclenché par UX ou PM)
🎨 **UI Design Phase** (auto-triggered)
Déclenché car :
- [Raison 1 : composants UI identifiés]
- [Raison 2 : besoin de cohérence visuelle]
**Contexte :**
- Design system existant : [Oui/Non]
- UX Design : [Lien si existe]
- Framework UI prévu : [si détecté dans archi]
Je commence la définition du design system ?
Mode Brownfield
Si design system existant détecté, s'aligner dessus plutôt que créer nouveau.
Process
1. Analyse du contexte
🎨 **UI Design**
**Contexte détecté :**
- Source : [UX Design / PRD / Direct]
- Documents liés : [paths]
- Framework frontend : [React/Vue/etc. si détecté]
- Design system existant : [Oui/Non - path si oui]
**Scope UI estimé :**
- [ ] Light (5-10 composants) → Design tokens + composants de base
- [ ] Standard (10-20 composants) → Design system complet
- [ ] Full (20+ composants) → Design system + documentation Storybook
Je recommande le **Mode [X]**. On continue ?
⏸️ STOP - Validation du mode
2. Design Tokens
## 🎨 Design Tokens
### Couleurs
#### Palette principale
| Token | Valeur | Usage |
|-------|--------|-------|
| `--color-primary` | #[hex] | Actions principales, liens |
| `--color-primary-hover` | #[hex] | Hover sur primary |
| `--color-secondary` | #[hex] | Actions secondaires |
| `--color-accent` | #[hex] | Mise en avant |
#### Sémantique
| Token | Valeur | Usage |
|-------|--------|-------|
| `--color-success` | #[hex] | Validations, succès |
| `--color-warning` | #[hex] | Alertes, attention |
| `--color-error` | #[hex] | Erreurs, danger |
| `--color-info` | #[hex] | Informations |
#### Neutres
| Token | Valeur | Usage |
|-------|--------|-------|
| `--color-background` | #[hex] | Fond principal |
| `--color-surface` | #[hex] | Cards, modales |
| `--color-text-primary` | #[hex] | Texte principal |
| `--color-text-secondary` | #[hex] | Texte secondaire |
| `--color-border` | #[hex] | Bordures |
#### Contraste validé ✅
| Combinaison | Ratio | WCAG |
|-------------|-------|------|
| text-primary / background | [X]:1 | AA ✅ |
| primary / background | [X]:1 | AA ✅ |
---
### Typographie
| Token | Font | Size | Weight | Line-height | Usage |
|-------|------|------|--------|-------------|-------|
| `--font-heading-1` | [Font] | 32px | 700 | 1.2 | H1 |
| `--font-heading-2` | [Font] | 24px | 600 | 1.3 | H2 |
| `--font-heading-3` | [Font] | 20px | 600 | 1.3 | H3 |
| `--font-body` | [Font] | 16px | 400 | 1.5 | Texte courant |
| `--font-body-small` | [Font] | 14px | 400 | 1.4 | Texte secondaire |
| `--font-caption` | [Font] | 12px | 400 | 1.4 | Labels, hints |
**Font stack :**
```css
--font-family-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-family-mono: 'JetBrains Mono', 'Fira Code', monospace;
Espacements
| Token | Valeur | Usage |
|---|---|---|
--space-xs | 4px | Micro-espacements |
--space-sm | 8px | Espacements serrés |
--space-md | 16px | Espacement standard |
--space-lg | 24px | Espacement large |
--space-xl | 32px | Sections |
--space-2xl | 48px | Grandes sections |
Bordures & Ombres
| Token | Valeur | Usage |
|---|---|---|
--radius-sm | 4px | Boutons, inputs |
--radius-md | 8px | Cards |
--radius-lg | 16px | Modales |
--radius-full | 9999px | Pills, avatars |
| Token | Valeur | Usage |
|---|---|---|
--shadow-sm | 0 1px 2px rgba(0,0,0,0.05) | Hover léger |
--shadow-md | 0 4px 6px rgba(0,0,0,0.1) | Cards |
--shadow-lg | 0 10px 15px rgba(0,0,0,0.1) | Modales, dropdowns |
Breakpoints
| Token | Valeur | Usage |
|---|---|---|
--breakpoint-sm | 640px | Mobile landscape |
--breakpoint-md | 768px | Tablette |
--breakpoint-lg | 1024px | Desktop |
--breakpoint-xl | 1280px | Large desktop |
Ces tokens te conviennent ?
**⏸️ STOP** - Validation tokens
---
### 3. Composants UI
```markdown
## 🧩 Composants UI
### Composant : Button
**Variants :**
| Variant | Usage | Exemple visuel |
|---------|-------|----------------|
| `primary` | Action principale | `[████████]` |
| `secondary` | Action secondaire | `[────────]` |
| `ghost` | Action tertiaire | ` ──────── ` |
| `danger` | Action destructive | `[████████]` (rouge) |
**Tailles :**
| Size | Padding | Font | Min-width |
|------|---------|------|-----------|
| `sm` | 8px 16px | 14px | 80px |
| `md` | 12px 24px | 16px | 100px |
| `lg` | 16px 32px | 18px | 120px |
**États :**
| État | Visuel |
|------|--------|
| Default | [Couleur normale] |
| Hover | [Couleur + 10% luminosité] |
| Active | [Couleur - 10% luminosité] |
| Focus | [Outline 2px primary] |
| Disabled | [Opacité 50%, cursor not-allowed] |
| Loading | [Spinner remplace texte] |
**Props :**
```typescript
interface ButtonProps {
variant: 'primary' | 'secondary' | 'ghost' | 'danger';
size: 'sm' | 'md' | 'lg';
disabled?: boolean;
loading?: boolean;
leftIcon?: ReactNode;
rightIcon?: ReactNode;
fullWidth?: boolean;
}
Composant : Input
Types :
| Type | Usage |
|---|---|
text | Texte libre |
password | Mot de passe (avec toggle) |
search | Recherche (avec icône) |
textarea | Texte multiligne |
États :
| État | Bordure | Background | Icône |
|---|---|---|---|
| Default | border | background | - |
| Focus | primary | background | - |
| Error | error | error/10% | ❌ |
| Success | success | success/10% | ✅ |
| Disabled | border/50% | background-muted | - |
Anatomie :
┌─────────────────────────────────────┐
│ Label * │ ← Label (optionnel, * si required)
├─────────────────────────────────────┤
│ [🔍] Placeholder text [👁️] │ ← Input avec icônes optionnelles
├─────────────────────────────────────┤
│ Helper text ou message d'erreur │ ← Helper (optionnel)
└─────────────────────────────────────┘
Composant : Card
Variants :
| Variant | Usage | Ombre | Bordure |
|---|---|---|---|
elevated | Card importante | shadow-md | none |
outlined | Card standard | none | border |
filled | Card discrète | none | none, bg-surface |
Structure :
┌─────────────────────────────────────┐
│ [Image / Media] (opt.) │
├─────────────────────────────────────┤
│ Header (opt.) │
│ ─────────────────────────────────── │
│ Body content │
│ │
│ ─────────────────────────────────── │
│ Footer / Actions (opt.) │
└─────────────────────────────────────┘
[Répéter pour autres composants selon le scope]
**⏸️ STOP** - Validation composants
---
### 4. Patterns & Guidelines
```markdown
## 📚 Patterns UI
### Layout
- **Container max-width** : 1200px (centré)
- **Grid** : 12 colonnes, gutter 24px
- **Content width** : max 65ch pour la lecture
### Iconographie
- **Style** : [Outlined / Filled / Duo-tone]
- **Taille standard** : 24px
- **Librairie** : [Lucide / Heroicons / Phosphor]
- **Usage** : Toujours avec label accessible
### Feedback utilisateur
| Type | Durée | Position |
|------|-------|----------|
| Toast success | 3s auto-dismiss | Top-right |
| Toast error | Manual dismiss | Top-right |
| Loading | Jusqu'à completion | Inline ou overlay |
### Animations
| Type | Durée | Easing |
|------|-------|--------|
| Micro-interaction | 150ms | ease-out |
| Transition page | 300ms | ease-in-out |
| Modal open | 200ms | ease-out |
5. Export Design System
Créer docs/planning/ui/UI-{feature-slug}.md :
---
title: UI Design System - [Nom]
date: YYYY-MM-DD
status: draft | validated
trigger: auto | manual
source: ux-design | prd | direct
---
# UI Design System: [Nom]
## 1. Design Tokens
[Export complet des tokens]
## 2. Composants
[Liste et specs de chaque composant]
## 3. Patterns
[Guidelines d'usage]
## 4. Accessibilité
[Checklist couleurs, contrastes, tailles]
## 5. Implementation Notes
- Framework cible : [X]
- CSS approach : [CSS Modules / Tailwind / Styled-components]
- Suggestion : [Recommandations pour le dev]
Export CSS Variables (optionnel)
/* docs/planning/ui/tokens.css */
:root {
/* Colors */
--color-primary: #[hex];
--color-secondary: #[hex];
/* ... */
/* Typography */
--font-family-sans: 'Inter', sans-serif;
/* ... */
/* Spacing */
--space-xs: 4px;
/* ... */
}
6. Validation & Transition
## 🎨 UI Design Terminé
Documents créés :
- `docs/planning/ui/UI-{slug}.md`
- `docs/planning/ui/tokens.css` (optionnel)
### Résumé
- **Tokens définis** : [nombre par catégorie]
- **Composants spécifiés** : [nombre]
- **Contraste WCAG** : [AA/AAA]
### Points clés
- [Choix design important 1]
- [Choix design important 2]
---
**Prochaine étape ?**
- [A] Passer à l'Architecture (intégrer les specs UI)
- [S] Passer aux Stories (avec specs UI)
- [R] Réviser l'UI
- [X] Exporter les tokens en CSS
⏸️ STOP - Attendre le choix
Règles
- Tokens first : Définir les tokens avant les composants
- Consistency : Un même élément = un même style partout
- Accessibilité : Contraste AA minimum obligatoire
- Developer handoff : Specs claires et mesures exactes
- Scalable : Penser système, pas pages isolées
Output Validation
Avant de proposer la transition, valider :
### ✅ Checklist Output UI Design
| Critère | Status |
|---------|--------|
| Fichier créé dans `docs/planning/ui/` | ✅/❌ |
| Tokens couleurs définis | ✅/❌ |
| Tokens typographie définis | ✅/❌ |
| Tokens spacing définis | ✅/❌ |
| Composants principaux spécifiés | ✅/❌ |
| États des composants documentés | ✅/❌ |
| Contraste WCAG AA validé | ✅/❌ |
| tokens.css exporté (optionnel) | ✅/❌/- |
**Score : X/7** → Si < 5, compléter avant transition
Auto-Chain
Après validation de l'UI, proposer automatiquement :
## 🔗 Prochaine étape
✅ UI Design terminé et sauvegardé.
**Flux recommandé :**
[Si Architecture pas encore faite]
→ 🏗️ **Lancer `/architect` ?** (intégrer les specs UI dans l'archi)
[Si Architecture existe]
→ 📝 **Lancer `/pm-stories` ?** (créer les stories avec specs UI)
---
**[Y] Oui, continuer** | **[N] Non, je choisis** | **[P] Pause**
⏸️ STOP - Attendre confirmation avant auto-lancement
Transitions
- Vers architect : "On intègre le design system dans l'architecture ?"
- Vers pm-stories : "On crée les stories avec les specs UI ?"
- Vers ux-designer : "On revoit l'UX avant de finaliser l'UI ?"
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon