Como eu estruturo um Design System.
Uma documentação real do meu método, construída do zero: tokens com tema, componentes documentados com código e o handoff para engenharia. Sem nenhum dado de cliente, é o processo, não o projeto. Troque o tema no menu: só a camada semântica dos tokens muda, os componentes não sabem que existe dark mode.
Princípios · o que guia cada decisão.
Antes de tokens e componentes, as regras que não se negociam. Elas resolvem discussão de gosto e mantêm o sistema coerente quando muita gente contribui.
Acessível por padrão
Contraste, foco e área de toque nascem no componente. Ninguém precisa "lembrar" de ser acessível.Consistência > criatividade individual
O sistema serve ao produto, não ao ego. Divergir tem que ter motivo, não estilo.Token antes de valor
Nada de cor ou espaçamento hardcoded. Se não é token, não escala nem vira tema.Adoção é a métrica
Um DS existe para ser usado. Se não é adotado, é custo. Governança serve à adoção.Arquitetura & stack · como o sistema é montado.
Um DS maduro tem metodologia e stack, não é um arquivo de Figma solto. Método claro pra escalar, e a ferramenta certa em cada camada, do visual ao código.
Metodologia · Atomic Design
Pipeline de tokens · do Figma ao código
Uma mudança no Figma propaga pro CSS, iOS e Android sem retrabalho manual. É o que dá consistência multiplataforma de verdade.
Stack por camada
Cor · tokens em 3 camadas.
O valor bruto nunca toca a tela. Ele passa pelo semântico, que é o que troca no dark mode. O componente só enxerga a camada de componente. É essa cadeia que dá theming e escala sem redesenhar nada.
Tipografia · uma escala, não fontes soltas.
Geist para interface, escala definida por token. Cada estilo tem um propósito. Hierarquia é decisão, não acaso.
Espaçamento & raio · ritmo previsível.
Base 4px. Todo padding, gap e margem sai dessa escala, nunca de um número mágico. Raio idem. É o que faz telas de squads diferentes parecerem o mesmo produto.
Espaçamento (px)
Raio (px)
Input · o mesmo rigor, outro componente.
Prova de que o sistema escala: mesmos tokens de cor, foco, raio e espaçamento, aplicados a um segundo componente. Consistência não é sorte, é a mesma fonte.
<div class="field"> <label>E-mail</label> <input class="inp" placeholder="seu@email.com"> <!-- .err adiciona borda + hint de erro --> </div>
Card · onde os átomos viram sistema.
Button e Input são átomos. O Card os combina em algo maior, sem nenhum valor novo: reusa os mesmos tokens de surface, borda, espaçamento e os componentes Badge e Button. É isso que separa uma biblioteca de peças de um sistema de verdade.
<!-- só composição: nenhum token ou cor novo --> <div class="ds-card"> <div class="top"> <span class="title">Transferência</span> <span class="badge badge-success">Concluída</span> </div> <div class="amount">R$ 1.240,00</div> <div class="foot"> <button class="btn btn-primary btn-sm">Repetir</button> <button class="btn btn-ghost btn-sm">Ver detalhes</button> </div> </div>
Reusa: surface-raised, border-default, escala de espaçamento, Badge e Button. Troque o tema no menu: o Card acompanha, porque nada nele é fixo.
Governança & operação · o que mantém o sistema vivo.
Componente bonito qualquer um faz. DS maduro é o processo: quem decide, como um componente entra, como versiona e como se mede adoção. É aqui que ele deixa de ser biblioteca e vira sistema.
Modelo · híbrido
Intake · o filtro que vem antes de tudo
Como um componente entra · contribuição
Critérios de entrada: é reutilizável? já existe algo parecido? atende acessibilidade? Sem esse filtro, o DS vira cemitério de componentes.
Versionamento
| Semver | major.minor.patch. Major é breaking change. |
| Deprecation | marca antes de remover, com caminho de migração. Nunca some do nada. |
| Changelog | o que mudou a cada versão, pro time atualizar com segurança. |
Adoção · a métrica que importa
| Coverage | % do produto usando o DS vs. elementos soltos. |
| Detach rate | quanto foi descolado do componente. Detach alto = evoluir o componente. |
DS sem adoção é custo, não ativo. É onde eu mais agrego: fazer o sistema ser usado.
Changelog · exemplo
- v2.1.0addedComponente Card com variantes de status (concluída, agendada).
- v2.0.0changedButton migrado para tokens semânticos e dark mode. Breaking.
- v1.4.0deprecatedbutton-legacy · migrar para button-primary até a v3.
- v1.3.2addedEstado de loading no Button, bloqueando re-clique.
Handoff · do token à variável de código.
Single source of truth: o token do Figma é o mesmo que chega no código, sem tradução manual. E um checklist do que entra, pro dev implementar sem adivinhar.
// gerado e auditado por agente { "button-primary-bg": "{action.primary}", "button-primary-hover": "{action.primary.hover}", "button-radius": "10px", "button-height-md": "44px" }
/* build automático · code parity */
:root {
--button-primary-bg: #6B5BFF;
--button-primary-hover: #574AE0;
--button-radius: 10px;
--button-height-md: 44px;
}Checklist de handoff · Button
- 4 variantes: primary, secondary, ghost, danger
- 6 estados: default, hover, active, focus, loading, disabled
- 3 tamanhos com altura fixa (34/44/52)
- Tokens mapeados para variáveis CSS
- Raio, padding e gap por token
- Loading bloqueia re-clique
- Contraste AA nos dois temas
- Foco visível obrigatório
- Toque 44px mínimo no mobile
- Fora do escopo: ícone animado, botão full-width (pattern à parte)
Estrutura do repositório
Cada componente carrega seu .html, .css e .stories.js (Storybook), versionado no Git. O designer entende o repositório; o dev entende o design. Sem tradução perdida no meio.
IA · não é acabamento, é o que muda a escala.
Design System sempre foi caro em tempo: auditar tokens, documentar componente a componente, checar acessibilidade tela a tela. A IA não faz "o mesmo, mais rápido". Ela faz o que antes não cabia no orçamento de tempo do time. É aqui que eu opero diferente da maioria.
| Etapa do DS | Como era, na mão | Com IA e agentes · o que muda |
|---|---|---|
| Tokens | auditar e versionar centenas de tokens à mão, horas de trabalho repetitivo | agente gera, audita e versiona o JSON. Minutos, sem inconsistência. |
| Documentação | escrever anatomia, do/don't e props de cada componente, dias | skill gera e mantém a doc no padrão. A doc para de ficar desatualizada. |
| Acessibilidade | checar contraste e foco tela a tela, sempre por amostra | agente varre o sistema inteiro contra WCAG. Cobertura total, não amostra. |
| Código | traduzir token em variável na mão, com divergência entre design e dev | build automático (Style Dictionary) + IA. Code parity garantido. |
| Governança | revisar cada contribuição manualmente | agente pré-valida contra os critérios antes do humano. Core team foca no que importa. |
Design Ops assistido por IA.
Setup e manutenção de um DS deixam de exigir um time grande. Um designer operando com IA entrega a operação de Design System que antes precisava de vários. Resultado pro negócio: mais consistência, cobertura de acessibilidade total e o time de produto escalando sem o DS virar gargalo. Conecto o Figma ao contexto via MCP, encapsulo cada rotina numa skill reutilizável e opero tudo com Claude Code e agentes. IA como multiplicador da operação, não como enfeite de rodapé.
Por que documentei isto · o processo, não a promessa.
Não é um projeto de cliente, é o método que eu uso no dia a dia, do token ao handoff. Mostro o processo aberto porque é assim que eu estruturo um Design System em qualquer time. Prefiro mostrar o processo a prometer o resultado.