Início/Trilha 1 · Fundamentos/Módulo 1.5
MÓDULO 1.5

🎨 Design Systems (DESIGN.md) — o vocabulário visual

9 seções, OKLch, 72 sistemas curados. Como o agente lê e como você cria.

7
Tópicos
~50 min
Duração
Básico
Nível
72
Catálogo

🏁 Resultado: Você escreve um DESIGN.md válido para uma marca real, em OKLch, e sabe escolher quando usar um sistema do catálogo vs. criar um novo.

1

📐 O schema de 9 seções

Color, typography, spacing, layout, components, motion, voice, brand, anti-patterns.

O que é

Um DESIGN.md válido é Markdown com 9 seções obrigatórias (na ordem):

1. color
2. typography
3. spacing
4. layout
5. components
6. motion
7. voice
8. brand
9. anti-patterns

Cada uma usa formato consistente (tabela ou lista) que o parser do daemon entende.

Por que aprender

9 seções é uma ABI estável: o agente sempre encontra cor em "color", motion em "motion". Skip de seção (cair direto em components) = output incoerente. A ordem importa porque cor → tipografia → spacing → layout = árvore de decisão visual.

Conceitos-chave

  • color: tokens em OKLch + role (bg, surface, fg, accent, border)
  • typography: display + body + mono em font-stack
  • spacing: escala (4-8-12-16-24-32-48-64)
  • anti-patterns: 3-5 coisas proibidas nesse sistema (cruciais)
  • brand: 1 frase de "personality" — Editorial Monocle? Brutalist? Soft Warm?
2

🌈 Por que OKLch e não HSL/HEX

Uniformidade perceptual, Display P3, predictabilidade WCAG.

O que é

OKLch é um espaço de cor onde L (lightness) é perceptual — duas cores com mesmo L parecem ter o mesmo brilho, independente do hue. Em HSL/HEX, isso não é verdade: hsl(60 100% 50%) (amarelo) parece mais claro que hsl(240 100% 50%) (azul) — apesar de ambos terem L=50%.

/* HEX/HSL — inconsistente */
--bg: #1a1a1a;
--accent: #ff6b35;     /* parece muito mais claro que bg, embora L baixo */

/* OKLch — uniforme */
--bg: oklch(15% 0 0);
--accent: oklch(58% 0.15 35);   /* L=58 é previsível em qualquer hue */

Por que aprender

Três razões. 1) Verifica contraste WCAG mecanicamente — se Lbg − Lfg ≥ 50, contraste é seguro. 2) Display P3 (gama wide de iPhone/Pro Display) sem fallback estranho. 3) Manipulação programática: "azul mais escuro" = baixar L sem cair em cinza. É o motivo de o OD ter saltado HEX/HSL na primeira versão.

Conceitos-chave

  • L (lightness): 0-100%, perceptualmente uniforme
  • C (chroma): 0-0.4, "saturação" perceptual
  • h (hue): 0-360°, ângulo
  • Suporte de browsers: Chrome 111+, Safari 15.4+, Firefox 113+ (universal hoje)
  • Conversor: oklch.com — paste HEX → OKLch
3

📚 Os 72 sistemas de produto

Taxonomia: AI/LLM, dev tools, productivity, fintech, e-commerce, media, automotive.

O que é

O OD vem com 72 DESIGN.md curados de produtos reais — em design-systems/, organizados em 7 categorias:

AI/LLM Anthropic, OpenAI, Mistral...
Dev Tools Linear, Vercel, GitHub...
Productivity Notion, Asana, Figma...
Fintech Stripe, Mercury, Brex...
E-commerce Shopify, Stripe Checkout...
Media The New York Times, Monocle, FT...

Por que aprender

Antes de criar um sistema novo, cheque o catálogo. Linear-app já tem o "minimal dev tool" feito. Stripe já tem "fintech polished". Você não precisa redescobrir paleta — você customiza um existente. Default sane > tela em branco.

Conceitos-chave

  • design-systems/<name>/DESIGN.md: path padrão
  • README por categoria: índice e quando usar cada
  • Linear-app é canônico: ler primeiro pra entender o formato
  • Editorial Monocle: alternativa quando você quer "magazine-style"
  • Não é Theme: é vocabulário; mais do que cores e fontes
4

🎯 Tokens compartilhados

--bg, --surface, --fg, --muted, --border, --accent.

O que é

Todo DESIGN.md mapeia para um conjunto canônico de tokens CSS injetados no :root:

:root {
  --bg:      oklch(98% 0.01 90);   /* fundo da página */
  --surface: oklch(96% 0.01 90);   /* card, modal */
  --fg:      oklch(15% 0.02 90);   /* texto principal */
  --muted:   oklch(45% 0.02 90);   /* texto secundário */
  --border:  oklch(85% 0.01 90);   /* divisórias */
  --accent:  oklch(58% 0.15 35);   /* cor de marca */
}

Por que aprender

Esses 6 tokens são o contrato entre DESIGN e SKILL. SKILLs (templates) usam var(--bg) sem saber qual sistema está ativo. Trocar de Linear pra Stripe muda os 6 valores; templates funcionam idênticos. Você nunca acopla skill a sistema visual.

Conceitos-chave

  • --bg: fundo de página (o "papel")
  • --surface: elementos elevados (card, panel)
  • --fg / --muted: texto principal e secundário
  • --border: divisórias finas
  • --accent: uma cor de marca, sempre uma só
  • Dark mode: mesmo nome, outros valores em [data-theme="dark"]
5

🤖 Como o agente lê DESIGN.md

Pruning de seções via design_system.sections.

O que é

DESIGN.md inteiro pode ter 600 linhas. O agente não precisa de todas. O daemon faz pruning: na hora de gerar uma landing, injeta só "color, typography, components". Pra um deck, injeta "color, typography, motion, voice". A skill ativa declara em od: qual subset precisa.

od:
  design_system: linear-app
  design_system_sections: [color, typography, components]

Por que aprender

Sem pruning, você queima 6k tokens com seções irrelevantes (ex: "anti-patterns" pra cada gerada). Pruning = mais espaço pro brief do usuário e pra qualidade do output. É a diferença entre "ler um livro" e "consultar uma página".

Conceitos-chave

  • design_system_sections: array de strings (nomes das seções)
  • Default: color + typography + components (mais usado)
  • Override: SKILL pode forçar inclusão de "voice" se for um chatbot
  • Token budget: ~3k tokens é o máximo confortável de DESIGN injetado
6

🔄 Importar do upstream

scripts/sync-design-systems.ts + awesome-design-md.

O que é

A coleção de 72 sistemas é puxada de um repo upstream (awesome-design-md) via script automatizado. pnpm sync-design-systems faz pull, valida o schema das 9 seções, e atualiza os arquivos locais. Você pode contribuir com PR no upstream e ver seu sistema aparecer no OD oficial.

Por que aprender

Coleção viva = você não fica preso a 72 sistemas estáticos. Se Vercel atualiza brand, alguém faz PR no upstream, você roda sync e tem a versão nova. É o GitHub do design system, não uma biblioteca enlatada.

Conceitos-chave

  • Upstream: github.com/<org>/awesome-design-md (curated)
  • Sync script: valida schema, gera local copy
  • Frequência: rodar 1x por mês ou após PR aceito
  • PR pattern: add directory + DESIGN.md + README.md
  • Local override: coloque em ./design-systems/local/ sem upstream
7

🧭 Quando criar um sistema novo

vs. estender um existente.

O que é

Heurística: se o seu cliente é "outro Linear" (dev tool minimal), use linear-app + customize accent. Se é "outro Stripe" (fintech polished), use stripe + customize. Se é genuinamente diferente (cliente brasileiro, sustentabilidade, identidade tropical com Caparaó tipográfico), aí faz DESIGN.md novo. Default: estende. Exception: cria.

Por que aprender

Designers gostam de criar sistema do zero — é tentador. Mas consome tempo: refletir sobre cor, tipografia, spacing, anti-patterns leva ~4 horas pra fazer bem. Estender leva 30 minutos. Reserve criação pra quando estender de verdade não cabe.

Conceitos-chave

  • Estender: copia DESIGN.md, edita 6 tokens + voice
  • Criar: 9 seções do zero, anti-patterns próprios
  • Brand-spec extraction (M 3.3): caminho intermediário — extrai do site do cliente
  • Versionamento: Git nas branches do sistema (refresh anual normal)

🛠️ Hands-on

Escreva um DESIGN.md mínimo válido para uma marca real:

  1. Escolha: uma marca que você usa (Notion, Spotify, Stripe…) — não invente.
  2. Extraia: abra o site, pegue HEX da cor de marca; converta para OKLch em oklch.com.
  3. Escreva 9 seções: use o template abaixo; mínimo 3-5 linhas por seção.
  4. Compare: abra design-systems/linear-app/DESIGN.md do repo OD e veja se seu DESIGN.md tem o mesmo nível de detalhe.

Skeleton mínimo

# DESIGN: notion-fork

## color
- --bg: oklch(99% 0 0)
- --fg: oklch(15% 0 0)
- --accent: oklch(60% 0.15 250)
...

## typography
- display: "Söhne", system-ui
- body: system-ui, -apple-system
...

## anti-patterns
- ❌ gradient backgrounds
- ❌ rounded buttons > 8px

📚 Fontes

No repositório

  • design-systems/README.md
  • design-systems/linear-app/DESIGN.md (canônico)
  • scripts/sync-design-systems.ts

Externas

📌 Resumo do Módulo

1. DESIGN.md tem 9 seções obrigatórias na ordem — ABI estável para o agente.

2. OKLch > HSL/HEX por uniformidade perceptual, P3 e WCAG mecanico.

3. 72 sistemas curados em 7 categorias — antes de criar, cheque.

4. 6 tokens canônicos (--bg, --surface, --fg, --muted, --border, --accent) são o contrato com SKILL.

5. Daemon faz pruning de seções via design_system_sections — economiza tokens.

6. Sync com awesome-design-md mantém coleção viva.

7. Default é estender; criar do zero só quando estender não cabe.

← Módulo 1.4 Módulo 1.6 →