Communitygithub.com

flcker/figma-ui-desktop

Use Figma design specs to develop desktop UIs (Qt Widget / QML / WinUI / Flutter, etc.) by translating canvas data into target framework semantics, ensuring high fidelity.

O que é figma-ui-desktop?

This skill solves the common problem of low fidelity when using Figma designs for **desktop UI development** (non-Web frameworks like Qt Widget, QML, WinUI 3, Flutter). The root cause is treating Figma's canvas data (absolute coordinates, inline colors, pixel layers) as implementation data and copying it directly, leading to broken layouts and inaccurate colors and typography. The skill introduces a **framework-agnostic translation methodology**: it uses two parallel reading channels—`get_figma_data` (for precise coordinates, color values, font sizes, and spacing) and `download_figma_images` (for visual screenshots)—and forbids coding with only one channel. After structural analysis, it translates canvas concepts into the target framework using a mapping table (covering layout, colors, spacing, rounded corners, shadows, etc.). Finally, it requires a validation loop where actual running program screenshots are compared against the design specs, followed by manual review and iterative fixes. It is designed for the Framelink `figma-developer-mcp` environment and is ideal for developers building cross-desktop applications.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flcker/agents-skills/tree/HEAD/skills/dev/figma-ui-desktop

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Normas de Desenvolvimento de UI Desktop com Figma (Versão Framelink MCP)

Resolve o problema de baixa fidelidade ao desenvolver UIs desktop a partir de designs Figma. A causa raiz: tratar os "dados do canvas" do Figma (coordenadas absolutas, cores inline, empilhamento de camadas de pixel) como "dados de implementação" e copiá-los diretamente, resultando em layouts quebrados, cores e fontes imprecisas e recursos faltantes.

Por que usar Framelink em vez do Figma MCP Server oficial para desktop? A ferramenta principal do MCP oficial, get_design_context, gera apenas código Web por padrão (React/Tailwind, com opção para Vue/HTML/iOS) e não suporta Qt Widget / QML / WinUI / Flutter, além de ser paga. O Framelink é focado em "fornecer apenas dados Figma independentes de framework, deixando a tradução para o modelo" — essa "desvantagem" torna-se uma vantagem no cenário de múltiplos frameworks desktop: o modelo, ao receber os dados do canvas, pode traduzí-los para qualquer framework alvo, sem ficar preso ao Web.

Esta skill é direcionada às duas ferramentas do Framelink figma-developer-mcp:

FerramentaCanalFunção
get_figma_dataCanal de precisãoBusca dados do canvas por fileKey + nodeId: informações de layout, conteúdo, visuais e componentes
download_figma_imagesCanal visualExporta SVG/PNG/GIF para um diretório local com base no ID do nó

Se o alvo for front-end Web (React/Vue/HTML), use figma-ui-web em vez desta skill.

Princípios Fundamentais

  1. Canais duplos em paralelo, proibido codificar com apenas um canal. O canal de precisão fornece valores exatos; o canal visual fornece layout geral e texto. Usar apenas um deles certamente resultará em distorção.
  2. Use valores exatos, sem estimativas visuais. Cores, tamanhos de fonte, pesos de fonte, espaçamento, cantos arredondados, bordas e sombras devem ser sempre os valores exatos do design.
  3. Peça o design primeiro, não escreva UI por conta própria.
  4. Após a implementação, a validação deve ser um ciclo fechado: compare screenshots do programa em execução com o design → corrija defeitos automaticamente → faça revisão manual e itere.

Fluxo de Trabalho

Fase 1: Leitura Rápida (Entender Requisitos e Estrutura)

Quando o design for muito grande, faça uma leitura rápida primeiro para evitar sobrecarga de contexto ao buscar tudo de uma vez:

  1. Use get_figma_data para buscar a estrutura de alto nível (controle a profundidade da travessia com o parâmetro depth, começando superficialmente) para entender quais páginas, seções e controles existem.
  2. Use download_figma_images para exportar a imagem geral da interface, compreendendo layout e texto.

Fase 2: Leitura Detalhada (Obter Dados Precisos Antes da Implementação)

Para a seção ou controle específico a ser implementado, chame simultaneamente:

  • get_figma_data (com nodeId, lendo coordenadas, valores de cor, tamanhos de fonte, espaçamento, cantos arredondados e bordas nó por nó)
  • download_figma_images (exportar a imagem daquela seção para confirmar as posições relativas dos controles)

Após obter os dados, faça uma análise estrutural antes de codificar:

  • Quais nós são padrões repetidos (itens de lista, cards, botões) → Extraia para componentes/controles personalizados do framework alvo
  • Quais posicionamentos absolutos são na verdade layouts (disposição horizontal, centralizada, alinhada às extremidades, grade) → Converta usando a tabela de mapeamento abaixo para o layout do framework correspondente
  • Quais são papéis semânticos (navegação, formulários, listas) → Mapeie para a biblioteca de controles existente do framework alvo
  • Nós de imagem/ícone → Baixe o arquivo original usando download_figma_images para o diretório de recursos; não desenhe manualmente

Fase 3: Implementação (Tradução Independente de Framework)

Use os valores exatos do design para cores, tamanhos de fonte e espaçamento. Ao traduzir, consulte a tabela de mapeamento "Conceito do Canvas → Framework Alvo" abaixo. Não invente controles — se o framework alvo possui layouts/controles padrão, use-os. Coordenadas absolutas só devem ser mantidas quando "realmente for necessário posicionamento preciso em pixels".

Fase 4: Ciclo de Validação

Ambientes desktop não possuem automação de navegador como Playwright. A validação deve ser: compile e execute o programa, tire screenshots e compare lado a lado com os screenshots do design. Corrija defeitos óbvios automaticamente; a revisão manual identifica problemas mais sutis (espaçamento, peso da fonte, pequenas diferenças de cor) — exponha-os ativamente ao AI para reparos precisos e entre na próxima iteração.

Tabela de Mapeamento: Conceito do Canvas → Framework Alvo

O canvas do Figma usa coordenadas absolutas + camadas de pixel. A implementação deve traduzir isso para os conceitos de layout de cada framework. Consulte esta tabela durante a tradução:

Conceito do Canvas/DesignQt WidgetQML (Qt Quick)WinUI 3 (XAML)Flutter
Disposição horizontalQHBoxLayoutRowStackPanel (Orientation=Horizontal)Row
Disposição verticalQVBoxLayoutColumnStackPanel (Orientation=Vertical)Column
Layout em gradeQGridLayoutGrid / GridLayoutGridGridView / Table
Posicionamento absolutosetGeometry / moveItem + x/yCanvas + Canvas.Left/TopStack + Positioned
Empilhamento/sobreposiçãoSobreposição de widgets filhos / raise()Propriedade z / StackCanvas.ZIndexStack
CentralizaçãoaddStretch / setAlignmentanchors.centerInHorizontalAlignment/VerticalAlignment=CenterCenter / Align
Alinhamento às extremidadesaddStretch em ambos os ladosanchors.left/right + margensDistribuição de margensMainAxisAlignment.spaceBetween
EspaçamentoQSpacerItem / spacing do layoutPropriedade spacingMargin / PaddingSizedBox / Padding / Spacer
CorQPalette / stylesheetTheme / bindings de propriedadesDicionário de recursos ResourceDictionaryThemeData / ColorScheme
Tamanho/fonte da letraQFontfont.pixelSizeFontSizeTextStyle.fontSize
Cantos arredondadosstylesheet border-radiusRectangle radiusCornerRadiusBorderRadius
SombraQGraphicsDropShadowEffectDropShadowThemeShadow / DropShadowBoxShadow
ÍconeQIcon / recursosImage / fonte de íconesFontIcon / SymbolIconIcon
Reutilização de componentesSubclasse customizada de QWidgetComponent QML customizadoUserControl / controle customizadoWidget
Estado/variaçõesEnum + update()State / dirigido por propriedadesVisualStateManagersetState / AnimatedWidget

Regras de Ferro Contra Preguiça

A IA tende a usar apenas um canal para codificar. Exigir explicitamente:

  • "Chame get_figma_data e download_figma_images simultaneamente para ler o design"
  • "Não é permitido usar apenas imagens/screenshots do design para escrever código"
  • "Leia linha por linha os valores exatos de get_figma_data, comparando cores, tamanhos de fonte e espaçamento; não faça estimativas visuais"
  • "Traduza para os layouts/controles padrão do framework alvo de acordo com a tabela de mapeamento; não invente"

Lista de Verificação de Fidelidade

Após a geração, verifique item por item (mais confiável do que "parece no geral"):

  • Cores (foram usados valores exatos, não aproximados)
  • Tamanho/peso da fonte
  • Espaçamento / margens / preenchimento
  • Cantos arredondados / bordas / sombras
  • Layout (foi traduzido para layouts padrão do framework alvo, não copiando coordenadas absolutas)
  • Hierarquia / ordem de empilhamento
  • Ícones/imagens usando arquivos originais, não desenhados manualmente
  • Padrões repetidos foram extraídos para componentes/controles personalizados

Fontes de Referência

A metodologia é inspirada no fluxo oficial de desenvolvimento UI com Figma MCP + Playwright (veja "Usando Figma MCP e Playwright MCP para Melhorar a Eficiência no Desenvolvimento e Depuração de UI"). As ideias centrais de "canais duplos + ciclo de validação + exigências explícitas contra preguiça" são mantidas, com as ferramentas adaptadas para o Framelink figma-developer-mcp e a tabela de mapeamento expandida para cobrir múltiplos frameworks desktop.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas