01 / 07 · Estudo de casoSaaS

Um design system compartilhado por três produtos.

Ano
2025–2026
Função
Único designer
Time
Produto, Engenharia
Setor
SaaS corporativo
Contribuição
Tokens, biblioteca de componentes, padrões de acessibilidade, documentação, revisão da implementação

Um sistema para três produtos

Construí o design system do Companion, a plataforma da Sciene: os tokens, a biblioteca de componentes, os padrões de acessibilidade e a documentação. O time de engenharia implementou tudo em React e Tailwind. Não escrevi o código de produção, mas revisei a implementação junto com eles até o design e o código baterem.

  • 3× mais rápido para lançar uma funcionalidade, comparando o tempo de entrega antes e depois do sistema
  • 100% de paridade de tokens entre o Figma e o código
  • 50+ componentes compartilhados entre três produtos
  • 0 telas redesenhadas para lançar o Director Dashboard da v2
O design system no Figma: especificações e variantes de botão, calendário, avatar, badges, abas, banners, grupo de botões e botões de ícone
Tokens e componentes compartilhados pelos três módulos do Companion.

Três produtos, três versões de tudo

O Account Flagging, o Email Hub e o Meeting Hub resolviam por conta própria o mesmo botão, o mesmo status e o mesmo layout. Somado ao código legado, isso gerava entregas mais lentas, telas inconsistentes e bugs aparecendo o tempo todo.

Meeting Hub da Sciene antes do design system, com os dados de cliente desfocados
  1. Dois estilos de botão na mesma barra. Uma ação outline ao lado de uma preenchida, e nenhuma é claramente a principal.
  2. O item ativo da navegação é uma barra azul sólida, enquanto nas outras linhas o hover só muda a cor do texto.
  3. Um terceiro azul, em um terceiro formato, para o badge da empresa.
  4. Cada card de métrica tem a própria borda e o próprio padding, definidos tela a tela em vez de virem de um card compartilhado.
Uma tela do Meeting Hub, com marcações em cada padrão resolvido duas vezes.

Construído junto com a v1, não antes dela

A engenharia já estava entregando, e o sistema não podia travar o produto. Por isso construí tudo junto com a v1 e fui ajustando os componentes a cada entrega.

  1. FundaçõesEscala de cores, escala tipográfica, passos de espaçamento, raios. Decididos uma vez, discutidos uma vez.
  2. Tokens semânticosPapéis em vez de valores. btn-primary-bg, btn-secondary-bg, bg-secondary e os papéis de severidade por trás de crítico, atenção e saudável.
  3. PrimitivosBotão, input, select, checkbox, badge. Não sabem nada sobre o produto.
  4. ComponentesA linha de alerta, a barra de filtros, o card de métrica. Primitivos combinados em peças que já sabem um pouco sobre o domínio.
  5. PadrõesLista de triagem, fluxo de reconhecimento, estados vazio e de carregamento. As regras de como os componentes se encaixam.
  6. ProdutoAccount Flagging, o AI Email Hub, o Meeting Hub. Montados com as camadas acima. Cada um guarda só o que é realmente seu.
  1. Valor bruto#f2f4f7
  2. Papel semânticobtn-secondary-bg
  3. PrimitivoBotão secundário
  4. ProdutoAdiar, em um alerta na triagem de um CSM
Um valor muda uma vez e chega a todas as telas.

Fundamentos que todo componente herda

Os componentes nunca escolhem um valor solto. Cor, tipografia, raio e elevação são tokens: primeiro os primitivos, depois os nomes semânticos por cima, e mudar um deles atualiza os três produtos.

Marca

  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900
  11. 950

Neutro

  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900
  11. 950

Severidade, em tokens semânticos

  • Críticofg-errorbg-error-primary
  • Atençãofg-warningbg-warning-primary
  • Saudávelfg-successbg-success-primary
Um recorte de cada conjunto de tokens. Os primitivos ficam por baixo; os componentes só usam os nomes semânticos.

A severidade se decide uma vez, nos tokens

Os estados crítico, atenção e saudável aparecem nos três módulos. Descartei a ideia de uma paleta por produto, porque o mesmo vermelho precisa significar a mesma coisa no Email Hub e no Account Flagging. Cada severidade virou um token com cor, ícone e peso fixos. A severidade nunca depende só da cor.

Total de curto prazo caiu 40% em relação à semana anteriorCríticoHarbor & Pine Home · há 20 horas
Token
severity.critical
Cor
error
Ícone
octagon-alert
Peso
500

Crítico. Cor error, ícone octagon-alert, peso 500

Uma linha de alerta. Cada severidade é um token com cor, ícone e peso fixos.

Botões secundários são preenchidos, e o hover também

Botões outline sumiam ao lado de tabelas densas e pareciam decoração. Troquei por botões secundários preenchidos. Todo hover também passou a preencher o fundo, porque uma simples mudança de cor passa despercebida quando você está correndo o olho por quarenta contas.

ContaAlertas abertosÚltimo contatoAção
2HojeVer conta
3OntemVer conta
1Há 3 diasVer conta
0Semana passadaVer conta
Antes: botões outline e hover só na cor do texto. Depois: botões preenchidos e hover com preenchimento.

Documentação escrita para engenheiros e seus assistentes de IA

Com as anotações só no Figma, os engenheiros ficavam adivinhando. Escrevi a documentação como regras de uso, com nomes semânticos de token, para que uma pessoa ou um assistente que peça uma linha de alerta escolha o componente certo. Fazer a IA responder de forma consistente exigiu várias rodadas de ajuste: criei skills com essas regras e fui refinando até o resultado ficar estável.

severity.critical

Significado
Uma conta precisa de ação hoje
Use para
Alertas que travam receita ou renovação
Não use para
Erros de formulário; use o estado de erro do campo
Combina com
Ícone de alerta, rótulo em texto

Resultado

Crítico
Vendas caíram 32%Harbor & Pine Home · há 2 horas
A regra diz o que o token significa, não só qual é a cor. É isso que faz um assistente acertar o componente.

O Director Dashboard saiu de peças que já tínhamos

Na v2, alguém já conseguia montar uma tela que eu nunca tinha desenhado, e ela continuava com cara de Companion. O Director Dashboard foi lançado sem nenhuma tela nova desenhada do zero.

A validação aparece enquanto você digitaUse pelo menos 3 caracteres
Severidade
Qualquer severidade
Crítico
Atenção
Saudável
Setas e Esc também funcionam
Botões
Experimente
Os primitivos funcionando. Navegue com Tab para ver os estados de foco, digite para acionar a validação e abra o select pelo teclado.

O que eu faria diferente

Componentizei cedo demais. O que parecia padrão depois de dois usos acabou sendo coincidência, e devolvi vários componentes às telas de onde tinham saído. Hoje espero o terceiro uso antes de levar qualquer coisa para o sistema.