Logotipo Hedhog

Receba novidades do Hedhog no seu e-mail

Novos lançamentos, receitas e breaking changes — sem spam.

Temas

O painel de administração do Hedhog é totalmente personalizável via configurações — cores, logo, favicon, nome do app e tipografia — sem necessidade de rebuild. Esta é uma das receitas mais completamente implementadas do Hedhog: toda configuração abaixo é real, ligada a apps/admin/src/components/provider/theme-provider.tsx, e tem efeito imediato.

No admin, tudo isso fica em Settings → Configurations → Appearance — não há um grupo literalmente chamado "Theme", embora toda chave de configuração abaixo tenha o prefixo theme-.

Status: ✅ Totalmente implementado — toda configuração abaixo é real e tem efeito no próximo carregamento da página.

Mockups do dashboard admin em modo claro e escuro com suas configurações de cor independentes mapeadas para variáveis CSS

Configuração Rápida

  1. Vá em Settings → Configurations → Appearance
  2. Defina theme-primary-light e theme-primary-dark (e os outros pares de cores) para as cores hexadecimais da sua marca
  3. Faça upload do seu logo/favicon via Armazenamento de Arquivos, depois cole as URLs resultantes em image-url/icon-url
  4. Faça um hard-refresh no admin e confirme que as novas cores e o logo realmente aparecem

Como Funciona

  1. As configurações de tema são armazenadas como linhas na tabela setting, sob o grupo de configuração Appearance
  2. No carregamento, o ThemeProvider do admin as lê (com cache em localStorage sob a chave settings) e injeta um bloco <style> diretamente no documento — cada configuração de cor se torna uma propriedade CSS customizada como --primary, escrita como !important para sobrescrever os padrões do Tailwind
  3. As cores são aplicadas como strings hex brutas, não convertidas para HSL — se um valor não for uma string #rrggbb válida, essa regra é silenciosamente ignorada e o padrão do Tailwind aparece no lugar
  4. O Hedhog rastreia as variantes clara e escura de toda cor de forma independente — não há uma única cor de origem que seja auto-escurecida; você define ambas explicitamente
  5. theme-mode controla claro/escuro/sistema, e uma sobreposição por usuário é armazenada no lado do cliente em localStorage sob theme — então um usuário individual pode alternar para o modo escuro sem mudar o padrão do sistema para todos os outros

Configurações de Cor

Toda cor abaixo existe duas vezes — uma com sufixo -light e outra com sufixo -dark — em Settings → Configurations → Appearance. O Hedhog não gera uma a partir da outra; se você definir apenas a variante clara, o modo escuro recorre aos padrões do Tailwind para aquele token.

Variável CSSChave de config claroChave de config escuroO que ela controla
--primarytheme-primary-lighttheme-primary-darkBotões, links, estados ativos, anéis de foco
--primary-foregroundtheme-primary-foreground-lighttheme-primary-foreground-darkTexto/ícones sobre fundos com a cor primária
--secondarytheme-secondary-lighttheme-secondary-darkBotões secundários, acentos sutis
--secondary-foregroundtheme-secondary-foreground-lighttheme-secondary-foreground-darkTexto sobre fundos secundários
--accenttheme-accent-lighttheme-accent-darkAcentos de hover/interativos
--accent-foregroundtheme-accent-foreground-lighttheme-accent-foreground-darkTexto sobre fundos de acento
--mutedtheme-muted-lighttheme-muted-darkEstados desabilitados, fundos sutis
--muted-foregroundtheme-muted-foreground-lighttheme-muted-foreground-darkTexto secundário/atenuado
--backgroundtheme-background-lighttheme-background-darkFundo da página
--background-foregroundtheme-background-foreground-lighttheme-background-foreground-darkTexto padrão do corpo
--cardtheme-card-lighttheme-card-darkSuperfícies de card/painel
--card-foregroundtheme-card-foreground-lighttheme-card-foreground-darkTexto sobre cards

Todos os valores precisam ser hex de 6 dígitos (#1e40af), sem canal alfa. --primary-light também é reutilizada para --bprogress-color (a barra de carregamento no topo da página), então a cor da sua marca aparece lá também, sem uma configuração separada.

Modo e Tipografia

Chave de configuraçãoDescrição
theme-modePadrão do sistema: light, dark ou system. Usuários individuais podem sobrescrever isto localmente sem mudar para os demais
theme-radiusRaio de borda em rem aplicado via variável CSS, afeta botões/cards/inputs globalmente
theme-fontPilha de font-family CSS (padrão ui-sans-serif, system-ui, sans-serif)
theme-text-sizeFator de escala global de texto

Marca

Chave de configuraçãoDescrição
image-urlLogo mostrado na estrutura do admin
icon-urlFavicon
system-nameNome da aplicação mostrado no título do navegador e na barra lateral
system-sloganSlogan mostrado ao lado do nome
menu-widthLargura da barra lateral em rem

Estes são consumidos diretamente pelos componentes de estrutura/layout do admin, e não pela lógica de injeção de CSS do ThemeProvider — fazer upload de novos arquivos para image-url/icon-url funciona da mesma forma que qualquer outro upload de arquivo (veja Armazenamento de Arquivos): faça o upload primeiro, depois cole a URL resultante na configuração.

Aplicando Mudanças

Salvar qualquer configuração em Settings → Configurations → Appearance tem efeito no próximo carregamento de página para aquele navegador, já que o ThemeProvider lê das configurações em cache no localStorage e as reaplica via um useEffect na montagem, não via um push ao vivo por socket. Se um colega de equipe não vê sua mudança, diga a ele para fazer um hard-refresh em vez de presumir que a configuração não foi salva.


Verifique se Funcionou

  • Faça um hard-refresh no admin após salvar uma cor e confirme que a nova cor realmente aparece — não apenas que a configuração foi salva com sucesso
  • Alterne o modo escuro e confirme que as variantes -dark também aparecem, em vez de recorrer aos padrões do Tailwind

Solução de Problemas

SintomaCausa provável
Uma configuração de cor não tem efeito visívelO valor não é uma string hex #rrggbb válida — a regra é descartada silenciosamente, sem um erro
O modo escuro parece sem marca mesmo com o modo claro estilizado corretamenteVocê definiu apenas a variante -light daquela cor — defina sua contraparte -dark explicitamente
O usuário não consegue sair de uma preferência clara/escura travadaA sobreposição local dele vive em localStorage sob theme (e theme-source) no seu próprio navegador — limpar os dados do site a redefine para o padrão do sistema
O logo/favicon não atualiza após fazer upload de um novo arquivoA configuração ainda aponta para a URL do arquivo antigo — cole novamente a nova URL enviada em image-url/icon-url