Componentes de UI reutilizáveis: nomeação, variantes e regras de layout
Defina regras claras de nomeação, variantes e layout para componentes UI reutilizáveis, para que equipes construam telas consistentes rapidamente em qualquer construtor visual.

Por que a consistência das telas se perde em construtores visuais
Construtores visuais tornam fácil publicar telas rápido. Essa velocidade também pode esconder uma deriva lenta em como a UI parece e se comporta. Quando várias pessoas constroem ao mesmo tempo, pequenas escolhas se acumulam: alguém aplica 12px de padding, outro usa 16px, e um terceiro copia um botão antigo de outra tela.
Normalmente você nota os sintomas cedo: componentes quase duplicados, espaçamentos que mudam entre telas e palavras ligeiramente diferentes para a mesma ação (Salvar, Enviar, Confirmar). Estados também costumam divergir. Um formulário mostra um estado de loading claro, outro não. Mensagens de erro variam, e “atalhos rápidos” aparecem em uma página mas nunca voltam para o padrão compartilhado.
É assim que começa a dívida de UI. Cada inconsistência parece pequena, mas com o tempo faz o produto parecer menos confiável. E também atrasa as equipes porque as pessoas gastam mais tempo procurando a versão “certa”, comparando telas e corrigindo pequenas diferenças nas revisões finais.
Uma biblioteca de componentes em um construtor visual é um conjunto compartilhado de blocos (botões, campos, cards, cabeçalhos, estados vazios) que todo mundo puxa em vez de recriar. Em uma plataforma como AppMaster, isso normalmente significa criar peças de UI reutilizáveis dentro dos construtores visuais, e então concordar em como elas são nomeadas, configuradas e posicionadas para que as telas permaneçam consistentes mesmo com diferentes builders.
O objetivo não é tirar criatividade. É tornar as partes do dia a dia previsíveis para que as escolhas sejam intencionais. As quatro alavancas que impedem a deriva são: nomenclatura clara, variantes sensatas, regras básicas de layout (espaçamento, alinhamento, grids) e hábitos de equipe que mantêm a biblioteca saudável conforme o app cresce.
O que deve virar um componente reutilizável (e o que não deve)
Nem todo elemento bonito merece virar componente. Se você transformar tudo em componente, as pessoas perdem tempo garimpando uma biblioteca e ajustando opções que nem deveriam existir.
Um bom componente reutilizável é algo que você espera ver em muitas telas ou algo que precisa ter aparência e comportamento iguais sempre. Pense em padrões que os usuários reconhecem na hora: um botão primário, um campo de texto com texto de ajuda, um card que pré-visualiza um registro.
Um conjunto inicial pequeno normalmente cobre a maior parte das telas: botões, inputs, cards, cabeçalhos de página e alguns tipos de modal (confirm e form).
Uma regra prática de extração mantém decisões simples: se você usa a mesma UI 2 a 3 vezes, ou ela é crítica para sua marca e precisa ser idêntica, extraia. Se aparece só uma vez, mantenha local.
O que deve ficar único? Layouts altamente específicos presos a uma tela só, seções experimentais que você está mudando diariamente e qualquer coisa que seja basicamente conteúdo. Por exemplo, um banner de onboarding usado uma vez com texto e ilustração personalizados raramente vale a pena componentizar.
Mantenha cada componente focado. Um componente deve fazer um trabalho só. Um “User Card” que também controla permissões, status de cobrança e ações de admin fica difícil de reutilizar. Uma abordagem mais limpa é um “User Card” focado em exibição mais botões de ação e chips de status separados.
Convenções de nomeação que permanecem legíveis sob pressão
Quando uma equipe entrega rápido, nomes são a primeira coisa a quebrar. Alguém duplica “Button2”, outro cria “CTA Button” e um terceiro usa “BlueButton”. Uma semana depois, ninguém sabe qual usar, então criam outro. Assim a biblioteca vira um amontoado de quase-duplicatas.
Um padrão simples ajuda a manter a consistência mesmo quando você está cansado: Component - Parte - Estado. A maioria dos componentes não precisa dos três, mas a ordem permanece a mesma.
Use palavras que as pessoas realmente falam. Se sua equipe chama de “Cartão de cliente”, não nomeie como “CRM Tile”. Se no produto se chama “Plano”, não chame de “SubscriptionBox”. Linguagem direta vence porque é pesquisável.
Uma regra evita muita confusão: não misture “como parece” e “para que serve” na mesma camada. Escolha uma abordagem. Se você nomeia por propósito, evite palavras de cor. Se nomeia por visual, evite significado de negócio. Nomear por propósito geralmente escala melhor.
Exemplos que são fáceis de escanear em uma lista de componentes:
- Button - Primary
- Button - Secondary - Disabled
- Input - WithLabel
- Card - Compact
- Modal - ConfirmDelete
Decida a formatação uma vez e registre: Title Case ou sentence case, espaços ao redor de hífens e sem abreviações a menos que sejam universais (como “URL”). Em construtores visuais onde muitas pessoas contribuem, essas pequenas escolhas mantêm a biblioteca legível conforme a lista cresce.
Variantes: como oferecer escolha sem criar caos
Variantes permitem que a equipe reutilize um componente em muitos lugares sem fazer cópias novas. O truque é decidir desde o início quais diferenças importam e bloquear todo o resto.
Comece com algumas dimensões de variante que cubram necessidades reais. Para muitos componentes três são suficientes: tamanho (S/M/L), intenção (primary/secondary/danger) e estado (default/hover/active). Se uma nova opção não se encaixa nessas dimensões, trate-a como um componente novo, não como “mais uma variante”.
Padrões (defaults) importam mais do que as pessoas pensam. Novas telas devem ficar corretas mesmo quando alguém arrasta um componente e não muda nada. Defina defaults seguros (por exemplo tamanho=M, intenção=primary, estado=default) para que velocidade não vire estilo aleatório.
Para cada componente com variantes, documente e aplique:
- Dimensões suportadas e valores permitidos (mantenha curto)
- Valores padrões
- O que nunca muda entre variantes (padding, fonte, raio das bordas, espaçamento de ícone)
- Estados obrigatórios como disabled e loading, além de erro quando falha for possível
- Quando criar um componente novo em vez de adicionar uma variante
Exemplo: você tem um botão “Submit” no portal do cliente. Se uma pessoa cria um “Wide Submit Button” e outra um “Rounded Submit Button”, a deriva aparece rápido. Com regras, você mantém um só componente Button. Permite size e intent, proíbe padding e raio personalizados e define “Loading” uma vez (mostra um spinner, bloqueia cliques) para que se comporte igual em todo lugar.
Quando alguém pede “só mais um estilo”, pergunte qual problema do usuário isso resolve. Se a resposta não for clara, provavelmente é caos disfarçado.
Regras de layout: espaçamento, alinhamento e grids que todos seguem
Se regras de layout forem vagas, toda tela vira um caso único. A maneira mais rápida de manter componentes consistentes é tornar espaçamento e alinhamento monótonos: poucas opções permitidas, usadas da mesma forma sempre.
Comece com uma escala de espaçamento e proíba todo o resto. Escolha um conjunto pequeno (por exemplo 4, 8, 12, 16, 24) e trate como um teclado: você pode tocar muitas músicas, mas só com essas teclas. Se alguém precisa de “18px”, geralmente é sinal de que o componente ou grid está fora do lugar.
Seja explícito sobre o que cada espaçamento significa:
- Padding é dentro de um componente e se mantém consistente entre telas.
- Gap é entre itens dentro de um contêiner (linhas de formulário, itens de toolbar).
- Margin é fora de um componente e deve ser usada com parcimônia.
- Prefira gap a margens empilhadas para que o espaçamento não dobre por acidente.
Regras de alinhamento eliminam infinitos ajustes de “mover um pouco”. Um padrão simples funciona bem: alinhar texto à esquerda, alinhar labels e inputs na mesma linha vertical e manter ações primárias consistentes (por exemplo, canto inferior direito em um modal e alinhadas à direita no rodapé de formulário). Use alinhamento por baseline para linhas com muito texto. Reserve centralizado para linhas só de ícones.
Grids não precisam ser complexos, mas precisam existir. Decida colunas e gutters e defina o que acontece em telas menores (mesmo um básico “12 colunas no desktop, coluna única no mobile” já ajuda). Defina larguras de container e breakpoints uma vez e construa telas dentro dessas rails.
Armadilhas comuns: contêineres aninhados que somam padding, margens de página inconsistentes, misturar larguras fixas com colunas responsivas e “números mágicos” que só consertam uma tela.
Tokens de estilo: fontes, cores e noções básicas de acessibilidade
Tokens de estilo são as escolhas compartilhadas que todos usam. Quando os tokens estão claros, componentes reutilizáveis permanecem consistentes mesmo com construtores diferentes.
Comece pela tipografia como fonte única de verdade. Escolha uma escala pequena para tamanho de fonte, peso e altura de linha e pare. A maioria das equipes precisa de poucos passos (por exemplo: body, small, caption, title e page heading). Coloque essas escolhas em um só lugar para que novo texto comece com os mesmos defaults.
Cores funcionam melhor quando nomeadas por significado, não por códigos. “Primary” sinaliza uma ação principal. “Success” significa “deu certo” e “warning” quer dizer “verifique isso”. Evite nomes como “blue-500” a menos que sua equipe já pense em paletas dessa forma.
Noções básicas de acessibilidade que evitam problemas depois:
- Garanta contraste suficiente entre texto e fundo.
- Torne alvos de toque grandes o bastante para polegares, não para ponteiros de mouse.
- Escreva mensagens de erro que digam o que aconteceu e o que fazer em seguida.
- Não confie apenas na cor para comunicar status.
Tokens devem se conectar diretamente às variantes de componentes. Uma variante de Button como Primary, Secondary ou Danger deve trocar tokens aprovados (cor, borda, estilo do texto), não introduzir estilos pontuais.
Mantenha a lista de tokens curta o suficiente para que as pessoas realmente usem. Um bom teste: alguém consegue escolher o token certo em 5 segundos? Se não, junte ou delete.
Um conjunto inicial simples pode incluir tipografia (text.body, text.small, text.title), cor (color.primary, color.success, color.warning, color.danger), espaçamento (space.8, space.16, space.24), raio (radius.sm, radius.md) e foco (focus.ring).
Passo a passo: montar uma biblioteca de componentes em um construtor visual
Uma biblioteca de componentes é menos sobre “perfeição de design” e mais sobre remover micro-decisões diárias. Quando todo mundo usa os mesmos blocos, telas ficam consistentes mesmo com builders diferentes.
Um rollout prático em 5 passos
-
Audite o que você já tem. Pegue 5 a 10 telas reais e anote duplicatas que aparecem repetidamente: botões, inputs de texto, cabeçalhos de seção, cards e estados vazios.
-
Escolha uma primeira onda pequena para padronizar. Mire nas 10 peças principais que aparecem em todo lugar e causam mais desfase. Para muitas equipes isso significa botões, inputs, dropdowns, diálogos modais, cabeçalhos de tabela e cards.
-
Escreva as regras antes de construir. Mantenha curto: nome do componente, quando usar, variantes permitidas e regras de layout ao redor (espaçamento, alinhamento, largura).
-
Refaça uma vez, depois substitua gradualmente. Crie os novos componentes no seu construtor visual e trave as variantes acordadas. Substitua cópias antigas tela a tela. Não tente refatorar tudo em uma sprint.
-
Adicione um gate de revisão leve. Uma pessoa (rotativa semanalmente) checa novos componentes e variantes. O objetivo não é policiar, e sim evitar forks acidentais.
Como é “bom o suficiente"
Você vai saber que está funcionando quando um designer ou PM puder dizer: “Use o card padrão com cabeçalho compacto” e dois builders produzirem o mesmo resultado. Esse é o ganho: menos escolhas pontuais, menos inconsistências sutis e construção de telas mais rápida.
Mantenha sua biblioteca pequena de propósito. Se alguém pedir uma nova variante, faça primeiro uma pergunta: isso é uma necessidade real ou um caso que um variante existente já cobre com conteúdo diferente?
Erros comuns que causam UI lenta e inconsistente
A maior parte da inconsistência não vem de mau gosto. Acontece porque copiar é fácil, ajustes são rápidos e ninguém volta para arrumar. O resultado é um conjunto de telas quase-iguais difíceis de atualizar.
Uma armadilha comum é criar quase-duplicatas em vez de adicionar uma variante. Alguém precisa de “botão primário, mas um pouco mais alto” e duplica o componente. Uma semana depois, outro duplica isso. Agora há três botões que parecem próximos mas se comportam diferente e toda mudança vira caça.
Outro freio é o componente over-configurável: um mega componente com dezenas de toggles. Parece flexível, depois vira imprevisível. As pessoas param de confiar e criam versões “só para este caso”, o que anula o propósito.
Erros de layout causam tanto dano quanto estilo. O maior é misturar responsabilidades: um componente controla suas próprias margins externas enquanto a tela também adiciona espaçamento. Você obtém gaps aleatórios que variam por página. Uma regra simples ajuda: componentes definem padding interno, telas controlam espaçamento entre componentes.
Problemas que aparecem primeiro: regras de nomenclatura quebram quando há pressa, estados são adicionados tarde (loading, empty, error), ajustes pontuais viram permanentes e diferentes pessoas resolvem o mesmo layout de maneiras distintas.
Checklist rápido de consistência para toda nova tela
Antes de adicionar algo novo, pare por 60 segundos e cheque o básico. Uma tela pode parecer ok enquanto quebra o sistema silenciosamente; essas pequenas quebras se somam rápido quando várias pessoas constroem em paralelo.
- Nomenclatura: Todo componente segue o padrão acordado (por exemplo,
Form/Input,Form/Input.HelperText,Table/RowActions). Se o nome não ajudar alguém a achar e colocar rapidamente, renomeie agora. - Dono + propósito: Cada componente compartilhado tem um dono (pessoa ou time) e uma descrição de uma frase sobre quando usar.
- Apenas escala de espaçamento: Todos padding, gaps e margins usam passos aprovados. Se você está digitando um número novo “porque parece certo”, pare e escolha o passo mais próximo.
- Estados inclusos: Peças interativas chave incluem loading e estado de erro, não só o caminho feliz. Pense em botão desabilitado, erro de input, lista vazia, retry.
- Sem novos estilos inventados: Construa a tela usando tokens e componentes existentes. Se quiser nova cor, tamanho de fonte, raio ou sombra, trate como um pedido de sistema, não um conserto na tela.
Exemplo: duas pessoas constroem o mesmo recurso, com e sem regras
Maya e Leon trabalham no time de suporte ao cliente. Precisam de duas telas: uma lista de tickets (para varredura rápida) e uma tela de detalhes do ticket (para agir em um ticket). Dividem o trabalho e constroem em um construtor visual.
Sem regras, cada um faz “um card” diferente. Maya usa card branco com borda fina e sombra. Leon usa card cinza sem borda mas com padding extra. Uma tela tem botão primário arredondado, a outra usa botão quadrado e link de texto. Status aparece como ponto colorido em uma tela e como um pill na outra. Na tela de detalhes, campos não alinham porque labels têm larguras diferentes, então o formulário inteiro fica instável.
A reunião de revisão vira um debate de estilo, e uma atualização simples (como incluir “Prioridade”) significa mexer em múltiplos layouts únicos.
Com regras, eles começam a partir de componentes reutilizáveis compartilhados em uma biblioteca pequena: um TicketCard para estrutura e espaçamento, um StatusBadge para estilos e contraste do status e uma ActionBar para ações primárias consistentes.
Agora a lista usa uma variante compacta de TicketCard para campos-chave e uma linha de preview. A tela de detalhes usa uma variante detalhada para descrição completa, timeline e campos extras. A estrutura se mantém; a variante controla o que aparece.
O melhor é o que você não vê: menos comentários na revisão, menos perguntas de “por que isso é diferente?” e atualizações mais rápidas depois. Quando a equipe renomeia “Fechado” para “Resolvido” e ajusta a cor, eles mudam StatusBadge uma vez e ambas as telas atualizam juntas.
Manter a consistência ao longo do tempo (e próximos passos)
Consistência não é um setup único. Assim que mais pessoas constroem telas, pequenas escolhas “só para esta página” se multiplicam e a biblioteca começa a derivar.
Um processo simples de mudança mantém a equipe em movimento sem transformar cada ajuste de botão em debate:
- Propor: o que muda e por quê (novo componente, nova variante, renomear, descontinuar)
- Revisar: um designer ou dono de UI checa nomenclatura, regras de espaçamento e noções de acessibilidade
- Aprovar: sim/não claro, com uma nota curta se for limitado a um fluxo
- Liberar: atualizar a biblioteca compartilhada e anunciar a mudança em um lugar só
Decisões precisam ter um lar. Um doc curto de “regras de UI” já basta se incluir convenções de nomeação, lista oficial de variantes (o que existe e o que não existe) e um “não faça” (por exemplo: “Não crie um segundo ‘Primary Button’ com padding diferente”).
Agende um slot mensal de limpeza. Use para fundir duplicatas, remover peças não usadas e marcar componentes antigos como deprecated para que as pessoas parem de pegar o errado.
Refatore quando ver o mesmo padrão duas vezes (por exemplo, dois times criam estados vazios ligeiramente diferentes). Aceite um one-off quando for realmente único, com prazo curto e improvável de repetir.
Se você está construindo no AppMaster, um próximo passo prático é padronizar um único fluxo primeiro (como “Criar ticket” ou “Checkout”), então expandir. Os construtores de UI facilitam compartilhar os mesmos componentes entre telas, e appmaster.io é um ponto de referência útil se sua equipe quer uma abordagem no-code que ainda suporte aplicações completas, não só layouts de página.
FAQ
Comece padronizando as peças que você usa quase em todas as telas: botões, campos, cards, cabeçalhos e um ou dois tipos de modal. Construa esses como componentes reutilizáveis primeiro, defina padrões sensatos e depois substitua as cópias antigas tela por tela em vez de tentar refatorar tudo de uma vez.
Uma boa regra padrão é extrair quando você usou a mesma interface 2 ou 3 vezes, ou quando precisa que ela tenha aparência e comportamento idênticos sempre (como ações principais ou campos de formulário). Se for realmente pontual, ligado a uma tela só ou mudando diariamente, mantenha local para que a biblioteca continue fácil de usar.
Use um padrão de nome simples e mantenha coerência, por exemplo: "Componente - Parte - Estado". Prefira palavras que sua equipe realmente usa nas conversas e evite nomes baseados em cores, como "BotãoAzul", porque ficam enganadores quando os estilos mudam.
Limite variantes a diferenças que importam repetidamente, como tamanho, finalidade (primary/secondary/danger) e estado. O resto deve ficar bloqueado para que as pessoas não "afinarem" componentes por tela e causem deriva. Se um novo pedido não se encaixa nas dimensões de variante existentes, provavelmente é um novo componente, não "mais uma opção".
Escolha uma escala pequena de espaçamento e use apenas esses valores no app; qualquer outro número é sinal de que o grid ou o componente está desalinhado. Prefira espaçamento controlado por contêineres (gap) em vez de margens empilhadas para evitar espaçamentos duplicados quando componentes são aninhados.
Use tokens nomeados por significado, não por códigos de cor, para que as equipes escolham "primary" ou "danger" em vez de inventar tons novos. Depois garanta que variantes de componentes troquem esses tokens aprovados (cor, tipografia), em vez de introduzir estilos pontuais.
Todo componente interativo compartilhado deve ter pelo menos os estados disabled e loading, e adicionar estados de erro quando falhas forem possíveis (como formulários e ações de rede). Sem estados padronizados, telas que parecem semelhantes acabam funcionando de modo diferente, o que prejudica confiança e aumenta revisões.
Componentes super configuráveis parecem flexíveis, mas viram caixas pretas imprevisíveis. Pessoas param de confiar neles e criam versões "só para este caso", o que anula o benefício. Mantenha componentes focados em uma tarefa e componha interfaces maiores a partir de peças menores.
Use um portão leve: um responsável rotativo verifica novos componentes e variantes quanto a nomenclatura, regras de espaçamento e estados obrigatórios. O objetivo não é burocracia, e sim evitar forks acidentais cedo, porque mesclar quase-duplicatas depois é lento e costuma quebrar telas.
No AppMaster, crie peças de UI reutilizáveis dentro dos construtores web e mobile, padronize como são nomeadas, configuradas e colocadas para que outros possam reutilizá-las com confiança. Uma abordagem prática é padronizar primeiro um fluxo (por exemplo, "Criar ticket"), acertar componentes e variantes ali e então expandir a biblioteca conforme mais telas adotem os padrões.


