Design com IA — do prompt ao produto — 4. Do design ao código

18 min read min de lecture
Capítulo 04

Do design ao código

Capítulo 4 de 10 · 40%

Objetivos deste capítulo

  • Gerar um componente reutilizável limpo
  • Gerir os estados (hover, focus, disabled)
  • Transformar uma imagem ou um esboço numa interface

Da maquete ao componente: mudar de estado de espírito

Até aqui, produzias páginas: resultados para mostrar, discutir, validar. O programador do cliente, esse, não integra páginas — integra componentes: blocos autónomos e reutilizáveis (um botão, um cartão, um campo de formulário) que monta na sua aplicação. A passagem do design ao código é antes de mais essa mudança de unidade de pensamento: já não entregas um ecrã, entregas um vocabulário de blocos.

Porque é que isso conta tanto? Porque um botão codificado como componente existe em um único exemplar no código, declinado por parâmetros (a sua variante, o seu tamanho, o seu estado). Corrigir um defeito corrige-o em todo o lado. Pelo contrário, uma página monolítica onde o mesmo botão é copiado-colado doze vezes torna-se ingerível à primeira evolução. É a mesma lógica que os design tokens, um nível acima: o sistema antes da página.

flowchart LR
  D["Design validado no artifact"] --> T["Tokens: variáveis CSS"]
  T --> C["Componentes: props + estados + acessibilidade"]
  C --> I["Integração pelo programador"]
  I --> V["Verificação: estados, teclado, contrastes"]
A cadeia de entrega: do design validado aos componentes verificados, ligados aos tokens.

Anatomia de um bom componente

Um componente bem concebido descreve-se pelas suas props (os seus parâmetros de entrada): para um botão, tipicamente variant (primary, secondary, ghost), size (sm, md, lg) e disabled. Esta interface não é um detalhe técnico: é a tradução em código das decisões do teu design system. Três variantes de botão na maquete = uma prop variant com três valores no código. Se deres por ti a pedir uma quarta variante «só para esta página», é o sinal de que uma decisão de design está a fugir do sistema.

Pede sempre à IA o componente mais um exemplo de uso: ver <Button variant="primary" size="lg">Experimentar gratuitamente</Button> permite avaliar imediatamente se a interface é intuitiva. E precisa o formato de saída desde o início — HTML/CSS puro, React, com ou sem Tailwind — porque converter depois faz perder tempo e introduz desvios.

HTML + CSS puroUniversal, zero dependências, legível por qualquer programador. Ideal para uma entrega agnóstica ou um site simples. Menos prático para gerir variantes numerosas.
React (CSS modules ou vanilla)Componentes com props tipadas, perfeitos para as apps modernas. É o formato mais natural para traduzir um design system em blocos parametrizáveis.
React + TailwindMuito rápido para iterar, popular entre os programadores. Atenção: exige que as classes Tailwind sejam mapeadas nos teus tokens (config theme), senão o teu sistema dissolve-se nos valores utilitários.

Os estados interativos: hover, focus, disabled

Eis a diferença mais visível entre um resultado de demonstração e um componente profissional: os estados. Um verdadeiro botão vive quatro vidas no mínimo: repouso, hover (sobrevoo — feedback de que o elemento é clicável), focus (seleção pelo teclado — indispensável, voltaremos a isso), active (o instante do clique) e disabled (ação indisponível). Um componente sem estados não está acabado: é uma imagem que se parece com um botão.

Cada estado deve ser percetível mas coerente: no hover, escurece-se ligeiramente a cor (daí o token --color-primary-hover) e pode elevar-se subtilmente a sombra; no estado disabled, reduz-se a opacidade e muda-se o cursor. As transições devem ser suaves — 150 a 200 ms — para o ambiente tranquilizante da Sereno. E pensa nos componentes para além do botão: um campo de formulário também tem os seus estados (focus, erro, preenchido), um cartão clicável tem o seu hover.

PROMPT
Transforma o botão da landing Sereno num componente React reutilizável:
- props: variant (primary | secondary | ghost), size (sm | md | lg), disabled
- estados visuais: hover (escurece para --color-primary-hover, transição 180ms), focus-visible (anel de 2px em --color-accent, afastado 2px), active (ligeira redução de escala), disabled (opacidade 0.5, cursor not-allowed)
- usa exclusivamente as variáveis CSS do design system fornecido — nenhum valor fixo
- acessibilidade: elemento <button> nativo, focus visível pelo teclado, tamanho mínimo de 44px de altura em md
Entrega o código completo + 3 exemplos de uso (um por variant) + a lista dos tokens usados.
Pede sempre os estados interativos (hover/focus/disabled). Um componente sem estados não está acabado — e é precisamente o que as gerações por defeito da IA mais esquecem.

A acessibilidade no código: para além dos contrastes

No capítulo 2, a acessibilidade dizia respeito aos contrastes. No código, ela ganha duas dimensões suplementares. Primeiro a navegação pelo teclado: uma parte dos teus utilizadores não usa rato (deficiência motora, leitores de ecrã, ou simples preferência). Cada elemento interativo deve ser alcançável com Tab e mostrar claramente que está selecionado — é o papel do estado focus-visible, esse anel à volta do botão que certos designers eliminam «porque é feio». Nunca o elimines: estiliza-o para que fique bonito.

Depois a semântica HTML: um botão deve ser um <button>, não um <div> estilizado com um handler de clique. O elemento nativo traz gratuitamente o focus pelo teclado, a ativação com Enter e Espaço, e o anúncio correto aos leitores de ecrã. Mesma lógica para os títulos (<h1><h2> por ordem, sem saltar níveis), as listas e os links. A IA produz HTML semântico correto… se o pedires. Acrescenta sistematicamente «HTML semântico e acessível» nos teus prompts de código, e pede uma auditoria: «verifica este componente do ponto de vista da acessibilidade e lista os problemas».

Imagem → interface: partir de uma captura ou de um esboço

Capacidade espetacular e realmente útil: dar uma imagem à IA — captura de ecrã, maquete exportada, ou foto de um esboço a marcador num canto da mesa — e pedir-lhe que reproduza a estrutura em código. Os modelos atuais analisam a disposição, identificam os componentes (navegação, hero, cartões, formulários) e produzem uma interface funcional próxima do original.

Os usos concretos em estúdio: digitalizar um workshop (o cliente desenhou a sua visão no quadro branco — fotografa e codifica em cinco minutos, o efeito é garantido), partir de uma referência («retoma a estrutura desta captura, mas aplica inteiramente o meu design system» — estrutura emprestada, pele personalizada), ou reconstruir o existente (captura do antigo site do cliente como ponto de partida do redesign).

PROMPT
Eis a foto do esboço feito pelo cliente no workshop [imagem anexa].
Reproduz a estrutura desta disposição em HTML/CSS:
- identifica cada zona (navegação, hero, colunas, footer) e nomeia-as em comentários
- aplica o meu design system fornecido abaixo — a estrutura vem do esboço, o estilo vem dos tokens
- onde o esboço for ambíguo, escolhe a interpretação mais simples e assinala-a em comentário
[cola aqui o teu bloco :root]
Numa imagem, a IA reproduz a estrutura melhor do que os valores exatos: verifica sempre espaçamentos e tamanhos em relação à tua escala de tokens após a geração. E para um esboço ambíguo, pede-lhe que assinale as suas interpretações em vez de as adivinhar em silêncio.

Manter o código limpo e ligado aos tokens

Último elo: a qualidade do código entregue. Três exigências a formular explicitamente. Um: o código reutiliza os tokens — todo o valor fixo é um bug de coerência (podes pedir uma auditoria: «lista todos os valores fixos restantes neste código e substitui-os pelos tokens apropriados»). Dois: os comentários explicam as escolhas não evidentes, não cada linha — «porquê este z-index» merece um comentário, «isto é um botão» não. Três: os nomes (classes, props, ficheiros) seguem uma convenção coerente que o programador do cliente poderá prolongar.

Ganha também o hábito da releitura crítica: o código gerado é geralmente correto, mas nem sempre ótimo. Regras CSS duplicadas, um seletor demasiado específico, um estado esquecido — pede à IA que releia o seu próprio código («relê este componente como um programador sénior exigente: qualidade, acessibilidade, coerência com os tokens») antes de entregar. Um componente limpo mantém-se; um componente remendado torna-se rapidamente ingerível, e é a reputação do estúdio que está em jogo a cada entrega.

🛠️ É a tua vez

Contexto

O cliente validou a maquete da landing Sereno. O seu programador espera agora um sistema de botões pronto a integrar na sua app React — variantes, tamanhos, estados e acessibilidade incluídos. É a primeira entrega de código do Studio Mango a este cliente: tem de ser irrepreensível, porque a fase 2 (a app completa) decide-se nesta impressão.

Instruções

  1. Pede um componente botão React com props (variant, size, disabled), reutilizando exclusivamente os teus tokens CSS.
  2. Exige os quatro estados: hover, focus-visible, active e disabled — com transições suaves (150-200 ms).
  3. Verifica cada estado no resultado: passa o rato, navega com Tab no teclado, testa o disabled.
  4. Pede uma auditoria de acessibilidade do componente: semântica, focus pelo teclado, tamanho de alvo mínimo (44 px).
  5. Pede a lista dos valores fixos restantes e manda substituí-los por tokens.
  6. Teste imagem → código: pega numa captura de um componente existente (ou num esboço rápido) e manda codificá-lo com o teu design system.
  7. Pede uma releitura final «programador sénior exigente» e aplica as correções antes de considerar a entrega terminada.
Dica — Precisa o framework (HTML/CSS ou React) desde o início — converter depois faz perder tempo. E o focus-visible não é opcional: estiliza-o em vez de o eliminar.

Em resumo

  • Não se entregam páginas mas componentes: blocos parametrizáveis (props) que existem num único exemplar no código.
  • As props traduzem as decisões do design system: três variantes de botão = uma prop variant com três valores.
  • Um componente deve gerir os seus estados: hover, focus-visible, active, disabled — sem eles, não é mais do que uma imagem de botão.
  • A acessibilidade no código = contrastes + navegação pelo teclado (focus visível estilizado, nunca eliminado) + HTML semântico (button nativo, títulos ordenados).
  • Pode partir-se de uma imagem ou de um esboço: a IA reproduz a estrutura, o teu design system fornece a pele.
  • Precisa o formato de saída desde o início (HTML/CSS, React, Tailwind mapeado nos tokens) consoante a stack do destinatário.
  • Código limpo = zero valores fixos, comentários nas escolhas não evidentes, convenções de nomeação coerentes.
  • Antes de entregar: auditoria de acessibilidade + releitura crítica pedida à própria IA.

Quiz — verifica a tua compreensão

1. O que distingue um componente acabado?

Sem estados interativos, um componente não é realmente utilizável: é uma imagem que se parece com um botão. É também o que as gerações por defeito mais esquecem.

2. Pode partir-se de um esboço em papel?

Uma foto do esboço chega: a IA identifica as zonas e produz a estrutura. Aplica-se depois o design system para o estilo — e verificam-se os valores em relação aos tokens.

3. Porquê usar um

Auteur(s)

R

REHOUMA Haythem

Haythem Rehouma est un ingénieur et architecte IA et cloud, formateur et enseignant technique, avec un profil orienté IA médicale, AWS, MLOps, LLM/RAG et vision par ordinateur.