Touch Grass: design system brutalista open source
- Categoria:
- Design de produto
- Papel:
- Autor do projeto (design e implementação)
- Período:
- 2026
No Touch Grass, parti de uma direção visual para construir componentes e tokens que pudesse implementar e verificar. O sistema conecta CSS, Tailwind, Figma e JavaScript/TypeScript, com testes e documentação pública.
Fonte: repositório, pacotes publicados no npm e auditoria automatizada de 14/04/2026. Repositório (github.com) Abre em nova abaPacote React (npmjs.com) Abre em nova abaPacote de tokens (npmjs.com) Abre em nova aba

Desafio
Construir um design system com identidade visual própria, tokens compartilhados entre CSS, Tailwind, Figma e JS/TS, testes e documentação pública. A direção visual adotou cantos retos, tipografia em duas famílias (Geist Sans e Geist Mono) e restrições explícitas para guiar a implementação.
Solução
Decisões de design: cantos retos em todos os componentes, duas famílias tipográficas, Geist Sans para texto e Geist Mono para números, rótulos e dados, e carregamento com bloco de caractere em vez de spinner. Os tokens saem de uma fonte única em JSON, e o Style Dictionary gera variáveis CSS, tema Tailwind, JSON para o Figma e constantes JS/TS. A governança fica no código, com um teste de contrato de contraste e um plugin de ESLint próprio. Na execução, usei Claude Code com especificação curta, plano em etapas, testes escritos antes dos componentes e revisão por um agente separado. As decisões de design acima foram minhas.
Resultados
10 componentes básicos e 9 padrões compostos, 23 arquivos de teste e dois fluxos de CI. Na auditoria automática de 14/04/2026 com axe-core, as 27 páginas de documentação tiveram 0 violações e 687 verificações aprovadas; o resultado vale para aquela execução, feita em ambiente local. Os pacotes @touch-grass-ds/react e @touch-grass-ds/tokens estão publicados no npm com licença MIT. Limite: é um projeto autoral, sem equipes usando o sistema nem métrica de adoção.
Galeria
Recortes da documentação pública, capturados em outubro de 2026.
Principais aprendizados
O agente seguiu o que estava escrito na especificação, como o carregamento com bloco de caractere. O que eu não escrevi apareceu na revisão: o agente revisor notou que o Button não definia type="button" por padrão, e um clique dentro de um formulário acabava enviando o formulário.
Precisa transformar um problema de produto em uma experiência implementável?
Posso ajudar a conectar estratégia, interface e engenharia em uma entrega que continua legível depois do handoff.


