O que um frame realmente contém
Um frame do Figma é uma árvore de formas com posições, preenchimentos, traços, sequências de texto e restrições de layout. Isso é uma descrição completa de como algo se parece em um determinado tamanho. Não é uma descrição do que aquilo é.
| No arquivo | Deve ser inferido | |
|---|---|---|
| Estrutura | Um grupo de retângulos e texto nestas coordenadas | Que este grupo é um Card, e que é o mesmo Card usado em outras nove telas |
| Cor | O preenchimento é #6b7280 | Se isso é um texto suavizado, uma borda, um estado desativado ou um placeholder |
| Espaçamento | 32px entre estes dois elementos | Se 32 é um passo de escala, um valor único ou o resultado de um ajuste manual |
| Responsividade | Constraints e quaisquer frames de breakpoint existentes | O que acontece em cada largura entre eles |
| Semântica | Texto com tamanho maior e peso mais pesado | Se é um h1, um h2 ou apenas um texto estilizado que não é um cabeçalho |
Cada linha na coluna da direita é uma decisão que o conversor precisa tomar sem ter informações. Ele tomará cada decisão de forma plausível e independente, e é por isso que o resultado é, simultaneamente, convincente à primeira vista e impossível de manter.
Um frame codifica a aparência. O código precisa de identidade e intenção. O conversor não está falhando — a informação nunca esteve no arquivo.
O custo do código gerado
Aceitar o resultado como ele é traz quatro problemas específicos, todos os quais surgem após o merge do código, e não durante a revisão.
- 1
Ausência de reuso de componentes
O mesmo card convertido em cinco telas torna-se cinco implementações independentes. Nada as vincula, portanto, uma alteração no card exige cinco alterações, e alguém acabará encontrando apenas quatro.
- 2
Valores literais em todo lugar
Os conversores emitem
#6b7280porque é isso que o preenchimento indica. Sua camada de tokens é totalmente ignorada, o que significa que o design system que você construiu torna-se meramente decorativo nessas telas. - 3
Layout absoluto ou frágil
Dados de posição são convertidos em posicionamento. O resultado corresponde ao frame exatamente na largura do frame e degrada em qualquer outra, sendo a degradação pior nos dispositivos que você menos testou.
- 4
Ausência de semântica
Textos grandes e pesados tornam-se
divestilizadas. Leitores de tela encontram uma página sem estrutura de cabeçalhos, usuários de teclado não encontram marcos de navegação, e ninguém percebe até que ocorra uma auditoria.
O segundo ponto é o mais consequente e o menos visível na revisão. Quando telas geradas carregam valores de cores literais, sua base de código passa a ter dois sistemas de cores: os tokens e o que quer que o arquivo de design dizia naquele dia. Um check de CI que falha ao encontrar hexadecimais fora do arquivo de tokens barra isso logo na entrada.
Mapeamento vence a geração
A mudança de perspectiva produtiva é parar de pedir para a ferramenta escrever código e começar a dizer a ela qual código já existe. O Code Connect do Figma faz exatamente isso: ele vincula um componente de design ao seu componente de código real, para que o Dev Mode exiba o componente real e suas props, em vez de CSS gerado.
Isso muda o problema de geração para busca, e a busca é um problema que pode ser resolvido corretamente.
| Gerar | Mapear | |
|---|---|---|
| Produz | Nova marcação que aproxima o frame | Uma referência ao componente que você já mantém |
| Reuso | Nenhum — cada conversão é do zero | Total, por construção |
| Tokens | Ignorados; literais emitidos | Preservados; o componente já os utiliza |
| Acessibilidade | O que quer que o conversor tenha inferido | O que quer que seu componente já faça |
| Custo de configuração | Nenhum | Um mapeamento por componente, mantido conforme os componentes mudam |
| Falha quando | Sempre, lentamente | Um design utiliza algo que ainda não existe no código |
Essa última linha é o custo real, e ele existe: o mapeamento só funciona para componentes que já existem. Um design genuinamente novo ainda precisa ser construído. Mas essa é a divisão correta de trabalho — um humano ou um agente constrói o novo componente uma vez, e cada uso subsequente é uma referência, não uma regeneração.
Vale a pena ser concreto sobre o alvo do mapeamento. Um handoff está concluído quando o lado do código se parece com isto — papéis nomeados com valores reais — em vez de uma lista de hexadecimais recuperados de um frame:
A estratégia de paridade de nomenclatura
Abaixo do mapeamento de componentes, existe uma mudança mais simples que elimina uma quantidade surpreendente de lacunas, e que não exige ferramenta alguma: use os mesmos nomes em ambos os lugares.
O SLDS 2 da Salesforce é o exemplo publicado mais claro. Sua biblioteca do Figma utiliza os mesmos nomes de hooks de estilização semântica que o CSS — os próprios exemplos da equipe são radius-border-4 e font-scale-4 — portanto, os designs mapeiam um para um com o código real. O objetivo declarado deles é um vocabulário compartilhado que une design e desenvolvimento.
O efeito é que toda uma categoria de bugs de handoff deixa de existir. Quando um designer diz font-scale-4 e um desenvolvedor digita font-scale-4, não há etapa de tradução, logo não há espaço para perda de significado. Compare isso com um estilo do Figma chamado "Heading / Large" mapeado para uma variável CSS chamada --text-2xl: cada handoff é uma consulta, e cada consulta pode dar errado.
| Divergente | Correspondente | |
|---|---|---|
| Handoff | Uma etapa de tradução por propriedade | Copiar o nome |
| Revisar | "Este é o cinza certo?" exige a abertura de ambas as ferramentas | O nome está certo ou não está |
| Um agente lendo ambos | Dois vocabulários, sem relação declarada, suposições silenciosas | Um único vocabulário |
Se você for fazer apenas uma coisa deste artigo, renomeie suas variáveis do Figma para corresponderem exatamente às suas propriedades customizadas do CSS. Isso custa uma tarde, não precisa de plugin e remove um custo permanente de cada handoff. Nomes simples, em letras minúsculas e com hifens sobrevivem a ambas as ferramentas — saiba mais sobre nomenclatura para portabilidade.
Quando o design system vive no Figma
Muitas equipes possuem uma biblioteca do Figma completa e uma base de código que a reflete apenas parcialmente. O instinto é procurar uma ferramenta que feche essa lacuna automaticamente. Existe uma alternativa mais barata que funciona melhor.
Uma biblioteca do Figma contém as decisões — a escala, as funções, o conjunto de componentes, o ritmo de espaçamento. Essas decisões são transferidas perfeitamente como texto, e o texto é o formato com o qual tanto um desenvolvedor quanto um agente de código podem trabalhar. Extraí-las para um arquivo de tokens e um brief escrito leva um dia de trabalho e torna qualquer conversão subsequente desnecessária, pois o lado do código agora possui a mesma informação que o lado do design.
Analisamos 299 arquivos DESIGN.md escritos para levar exatamente essas informações a agentes de IA, e a maioria não o faz: 86% especificam cores como hex raw sem função semântica, 76% não declaram proibições, 69% não definem modo escuro e 44% não declaram nenhum valor de tamanho concreto em lugar nenhum. Um brief extraído de uma biblioteca real do Figma, feito corretamente, supera quase todos eles — você já tem os números.
- 1
Exporte as variáveis como tokens, com funções
Não a paleta bruta. As funções: qual cor é texto suavizado, qual é borda, qual é um estado desativado. Se suas variáveis do Figma são nomeadas por matiz, este é o momento de renomeá-las por função em ambos os lugares simultaneamente.
- 2
Anote as escalas como números
Tamanhos de fonte, etapas de espaçamento, raios. A biblioteca já contém isso; o lado do código geralmente tem um subconjunto somado a improvisações.
- 3
Anote o que a biblioteca se recusa a fazer
As proibições estão na biblioteca implicitamente — sem sombras em lugar nenhum, sem peso acima de 600 — e são a coisa de maior valor para se tornar explícita, pois são invisíveis para qualquer extração automatizada.
- 4
Mapeie os componentes que já existem no código
Só agora vale a pena introduzir ferramentas, e apenas para componentes presentes em ambos os lados. Tudo o que não estiver mapeado é uma construção nova, e saber quem é quem já é útil por si só.
Os kits da Identity Forge são esse artefato em forma pré-construída: 28 funções de cores semânticas para modo claro e escuro, escalas de tipografia e espaçamento, motivos e diretrizes explícitas de "faça" e "não faça", exportáveis como variáveis CSS, @theme do Tailwind, um item de registro do shadcn ou JSON DTCG/W3C. Navegue pelos kits ou leia como escrever o brief.
O que esperar das ferramentas atuais
Expectativas calibradas, por tarefa:
| Resultado realista | |
|---|---|
| Um protótipo descartável a partir de um mockup | Bom. Dívida estrutural não importa em código que será deletado |
| Extração de medidas e valores | Bom, e subestimado. A inspeção do Dev Mode é a vitória simples e confiável |
| Uma nova tela usando componentes existentes | Bom com mapeamento configurado. Ruim sem ele |
| Markup de produção a partir de um frame complexo | Ruim. Visualmente próximo, estruturalmente errado, e a limpeza geralmente excede o tempo de escrevê-lo do zero |
| Convertendo um design system completo | Não é um problema de conversão. Em vez disso, extraia as decisões como texto |
A segunda linha merece mais crédito do que recebe. Uma inspeção confiável — valores exatos, nomes reais de tokens, props reais de componentes — elimina um atrito diário genuíno e nunca promete mais do que entrega.
A IA consegue converter designs do Figma em código de produção?
Ela consegue produzir um código que se pareça com o frame. Se isso é código de produção depende da estrutura, e a estrutura é justamente o que um frame não contém — identidade de componente, funções semânticas, comportamento responsivo entre breakpoints. Espere algo visualmente próximo e estruturalmente errado, e reserve tempo para a limpeza.
O que é o Figma Code Connect?
Um recurso que vincula componentes de design aos seus componentes de código reais, para que o Dev Mode exiba o componente real e suas props em vez de CSS gerado. Isso muda o problema de gerar nova marcação para referenciar o código que você já mantém, preservando o reuso, os tokens e o trabalho de acessibilidade.
Por que o resultado de ferramentas de design-to-code usa cores hardcoded?
Porque o preenchimento no frame é um valor, e o conversor não tem como saber qual função semântica esse valor desempenha. Alinhar os nomes das variáveis do Figma aos nomes dos tokens do CSS é o que dá à ferramenta algo para referenciar em vez de um código hex.
Como levo meu design system do Figma para o código?
Não convertendo telas. Exporte as variáveis como tokens semânticos com funções atribuídas, documente as escalas como números, anote o que a biblioteca se recusa a fazer e, só então, mapeie os componentes que existem em ambos os lados. Isso leva um dia de trabalho e torna a conversão contínua desnecessária.
Designers e desenvolvedores devem usar os mesmos nomes de tokens?
Sim, e essa é a mudança de maior retorno disponível para o esforço investido. Quando um designer diz font-scale-4 e um desenvolvedor digita font-scale-4, não há etapa de tradução e, portanto, não há espaço para perda de significado. A Salesforce construiu a biblioteca do Figma do SLDS 2 exatamente com base nessa paridade.