Figma to code: por que o resultado é visualmente correto e estruturalmente errado

Cada geração de ferramentas de design-to-code chega mais perto da precisão de pixel e não chega mais perto da usabilidade; o motivo é estrutural, e não uma questão de qualidade do modelo. Um frame codifica a aparência. O código precisa de intenção, e a intenção nunca esteve no arquivo.

Atualizado 2026-07-27

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 arquivoDeve ser inferido
EstruturaUm grupo de retângulos e texto nestas coordenadasQue este grupo é um Card, e que é o mesmo Card usado em outras nove telas
CorO preenchimento é #6b7280Se isso é um texto suavizado, uma borda, um estado desativado ou um placeholder
Espaçamento32px entre estes dois elementosSe 32 é um passo de escala, um valor único ou o resultado de um ajuste manual
ResponsividadeConstraints e quaisquer frames de breakpoint existentesO que acontece em cada largura entre eles
SemânticaTexto com tamanho maior e peso mais pesadoSe é um h1, um h2 ou apenas um texto estilizado que não é um cabeçalho
O que um conversor consegue ler e o que ele precisa adivinhar.

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. 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. 2

    Valores literais em todo lugar

    Os conversores emitem #6b7280 porque é 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. 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. 4

    Ausência de semântica

    Textos grandes e pesados tornam-se div estilizadas. 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.

GerarMapear
ProduzNova marcação que aproxima o frameUma referência ao componente que você já mantém
ReusoNenhum — cada conversão é do zeroTotal, por construção
TokensIgnorados; literais emitidosPreservados; o componente já os utiliza
AcessibilidadeO que quer que o conversor tenha inferidoO que quer que seu componente já faça
Custo de configuraçãoNenhumUm mapeamento por componente, mantido conforme os componentes mudam
Falha quandoSempre, lentamenteUm design utiliza algo que ainda não existe no código
Duas formas de ir de um arquivo de design para o 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:

Preview unavailable here. Browse complete kits in the kit gallery.

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.

DivergenteCorrespondente
HandoffUma etapa de tradução por propriedadeCopiar o nome
Revisar"Este é o cinza certo?" exige a abertura de ambas as ferramentasO nome está certo ou não está
Um agente lendo ambosDois vocabulários, sem relação declarada, suposições silenciosasUm único vocabulário
Onde a divergência de nomenclatura custa caro.

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. 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. 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. 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. 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 mockupBom. Dívida estrutural não importa em código que será deletado
Extração de medidas e valoresBom, e subestimado. A inspeção do Dev Mode é a vitória simples e confiável
Uma nova tela usando componentes existentesBom com mapeamento configurado. Ruim sem ele
Markup de produção a partir de um frame complexoRuim. Visualmente próximo, estruturalmente errado, e a limpeza geralmente excede o tempo de escrevê-lo do zero
Convertendo um design system completoNão é um problema de conversão. Em vez disso, extraia as decisões como texto
Onde as ferramentas de design-to-code provam seu valor.

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.