Catalogo de erros visuais, estruturais e de codigo que NAO devem ser repetidos nos projetos bilhon.space. Cada entrada tem o problema, a solucao correta, e evidencia visual quando disponivel.
| App | Prefixo | Refs --bl-* | Violacoes | Status |
|---|---|---|---|---|
| RH.BOS | --bl-* | 100% | 0 | COMPLIANT |
| REPORTS.BOS | --bl-* | 336 refs | 0 (zero rs-*) | COMPLIANT |
| COMERCIAL.BOS | --bl-* | Parcial | AP-018 (inline styles) | REMEDIACAO |
| Bilhon Canvas | --bl-* | Parcial | AP-016, AP-017 | REMEDIACAO |
| HybridOps | ho-* (alinhado) | Proprio NS | 0 | ALIGNED |
Auditoria automatica — 2026-04-02
Secret hardcoded com fallback silencioso. Se env var falha, app roda com credencial previsivel. Atacante pode assinar cookies ou bypassar autenticacao.
Session hijack, webhook bypass, acesso nao autorizado a dados de 76k deals.
Query sem limit busca todos os registros. Com 76k deals, o browser recebe megabytes de JSON, processa no JS, e pode crashar em mobile.
TODA query client-side DEVE ter .limit(). Para agregacoes (sum, count, avg), usar Supabase RPC.
Se Supabase/API nao responde (network hang), o catch nao e acionado. O usuario ve "Carregando..." pra sempre. Pensa que a app quebrou.
Todo loading DEVE ter timeout de 10s. Apos timeout, mostrar estado de erro com opcao de retry.
Preto puro (#000) e agressivo demais. O off-black #09090c tem um toque quente que reduz eye strain em uso prolongado.
NUNCA usar #000000 como fundo. Sempre --bl-bg-primary (#09090c).
Labels de UI (botoes, badges, headers de secao, KPIs) usando Inter em vez de IBM Plex Mono. Quebra a identidade visual de "dashboard operacional".
Todo label, badge, botao, tag, header de secao = IBM Plex Mono + 10px + uppercase + tracking 0.08em. Inter so para corpo de texto.
Topbar com fundo solido parece pesada. O efeito glass (85% opacity + blur) cria profundidade e deixa o conteudo rolar "por baixo" com elegancia.
Topbar: bg rgba(9,9,12,0.85) + backdrop-blur-xl. NUNCA fundo 100% opaco.
Catch vazio esconde erros. Bugs viram fantasmas — o sistema falha mas ninguem ve. Debugging vira impossivel.
Todo catch DEVE ter console.error com [modulo] prefix. Catch {} vazio e proibido.
Excluir rotas do middleware permite acesso nao autenticado. Se alguem criar /legacy/admin, fica exposto.
Middleware matcher so exclui assets estaticos (_next, images, css, js). NUNCA excluir rotas de pagina.
Usar a mesma cor accent em todos os produtos confunde o usuario. Na aba do browser, todos os favicons ficam iguais. Nao da pra saber qual e qual.
RH = verde #6bc950 | Comercial = azul #3b82f6 | Reports = roxo #a855f7 | Forms = amber #f59e0b. NUNCA repetir.
Modais sem role/aria sao invisiveis para screen readers. O botao de fechar sem aria-label e inacessivel.
Todo modal: role="dialog" + aria-modal="true" + aria-label. Todo botao interativo: aria-label descritivo.
Emojis nos nomes de stage vem do Clint CRM. Em dashboards com IBM Plex Mono, emojis quebram o alinhamento e parecem amadores.
Sempre aplicar stripEmoji() antes de exibir stage names. Funcao ja existe no war-room.
Dropdowns com fundo transparente deixam o conteudo de baixo vazar. Fica ilegivel, especialmente sobre cards com dados.
Dropdowns e menus flutuantes: fundo --bl-bg-elevated (#0f0f14) ou #141418. NUNCA transparente.
Divisao por zero produz NaN. NaN se propaga por todo o calculo. KPIs, graficos e leaderboards mostram "NaN" pro usuario.
Toda divisao: checar divisor > 0. Toda conversao Number(): usar safeNum() com fallback 0.
Sem favicon customizado, todas as abas parecem iguais. O usuario com 5+ abas abertas nao sabe qual e qual.
Cada app: favicon.svg no /public/ com fundo #09090c + accent do produto. Layout deve ter icons: { icon: '/favicon.svg' }.
"as any" remove toda seguranca de tipo. Erros de acesso a campo errado so aparecem em runtime, nunca no build.
Zero "as any". Criar interface para cada query Supabase. Build deve ter 0 erros TypeScript.
Cores hardcoded no layout root ignoram o token system. Se o DS mudar um valor, o layout nao acompanha. Quebra consistencia cross-app.
NUNCA usar hex literal em className ou style quando existe token --bl-* equivalente. Todos os backgrounds e textos devem referenciar tokens.
Scan automatico 2026-04-02
Topbar usa 5+ cores hardcoded (#0e0e12, #fbbf24, #09090c) em vez de tokens. Qualquer mudanca no DS nao propaga para a topbar.
Topbar DEVE usar exclusivamente tokens --bl-*. Para cores de status (warning, danger), usar tokens semanticos (--bl-yellow, --bl-red).
Scan automatico 2026-04-02
Inline styles para cores dinamicas impedem inspecao via DevTools, nao participam de cascata CSS, e misturam logica de apresentacao no JSX.
Cores dinamicas via CSS custom property no style + consumo via Tailwind arbitrary value. maxHeight e similares: SEMPRE Tailwind (max-h-[Npx]).
Scan automatico 2026-04-02