6.4 KiB
| target | total_score | p0_count | p1_count | p2_count | timestamp | slug |
|---|---|---|---|---|---|---|
| /campanha dashboard | 27 | 0 | 2 | 3 | 2026-07-19T23-22-03Z | src-app-campaign-campanha-app-page-tsx |
Method: dual-agent (A: design review · B: detector + Playwright screenshots)
Design Health Score
| # | Heuristic | Score | Key Issue |
|---|---|---|---|
| 1 | Visibility of System Status | 3 | KPIs têm CampaignDataFreshness; filas não mostram idade dos itens |
| 2 | Match System / Real World | 3 | Linguagem de núcleo/fila encaixa; "Lideranças" sem contexto |
| 3 | User Control and Freedom | 3 | "Limpar" em Visitados é ghost sem ícone nem aria-label claro |
| 4 | Consistency and Standards | 2 | Lista de núcleos usa lg:grid-cols-2; dashboard geral não |
| 5 | Error Prevention | 3 | Dashboard read-only; sem riscos destrutivos aqui |
| 6 | Recognition Rather Than Recall | 3 | Visitados ajuda recall; cores do mapa não são decodificáveis |
| 7 | Flexibility and Efficiency | 2 | Coluna única + max-w-screen-2xl desperdiça desktop largo |
| 8 | Aesthetic and Minimalist Design | 2 | Três subseções vazias nas filas; cards com muito respiro interno |
| 9 | Error Recovery | 3 | N/A nesta tela |
| 10 | Help and Documentation | 2 | Status de apoio e escala do mapa sem glossário/legenda visual |
| Total | 27/40 | Acceptable — melhorias significativas antes de sentir "pronto" |
Anti-Patterns Verdict
LLM assessment: Não é slop genérico de SaaS (sem hero-metric grid, copy em português de campo, mapa da Bahia). Mas o layout do dashboard geral parece uma versão anterior do produto: pilha vertical única enquanto outras telas geral já usam grid de duas colunas. Padrão "card stack" com muito espaço morto dentro das seções.
Deterministic scan: 0 findings em CampaignDashboard.tsx, RecentlyVisited.tsx, ChoroplethMapPanel.tsx, CampaignPageShell.tsx. Nenhum side-stripe, gradient text, ou eyebrow detectado.
Browser evidence (Playwright, 1440px e 1920px): Shell limitado a 1536px com mr-auto — em ultra-wide sobra faixa vazia à direita. Filas vazias mostram três blocos com badge "0" e texto de confirmação. Legenda do mapa é só texto "Escala: 0 → N". Overlay do detector não renderizou (live-server); inspeção visual manual.
Overall Impression
O dashboard tem ingredientes certos para o Field Desk (fila prioritária, faixa de KPIs, mapa territorial), mas a arquitetura de layout desktop não acompanha a densidade que coordenadores precisam. A maior oportunidade é reorganizar em grid responsivo e tratar estados "tudo em dia" como celebração compacta, não como três parágrafos repetidos.
What's Working
- Fila prioritária —
campaignPrioritySurfaceClassName+ prefixo "Prioridade ·" sinaliza corretamente por onde começar. CampaignMetricStrip— KPIs escaneáveis com barras de progresso sem cair no grid de cards idênticos.- Mapa com defaults sensatos — território + estimativa confirmada; ancorado na geografia da Bahia.
Priority Issues
[P1] Desktop não aproveita largura; ultra-wide deixa vazio à direita
- Why:
CampaignPageShellusaflex-col gap-8sem breakpoint grid;mr-auto max-w-screen-2xlprende conteúdo à esquerda em monitores largos. - Fix: Reflow
GeneralDashboardemlg:grid(ex.: filas + KPIs à esquerda, mapa sticky + eventos à direita), espelhandoNucleusListOverview. Considerarmx-autoou remover cap emxl:quando houver grid de 2 colunas. - Suggested command:
/impeccable layout
[P1] Filas de ação vazias ocupam espaço sem valor
- Why:
QueueSectionsempre renderiza; com tudo zerado o usuário lê três mensagens + três badges "0". - Fix: Se todas as filas vazias, um único estado positivo ("Nada pendente — filas em dia"); renderizar subseções só quando
items.length > 0. - Suggested command:
/impeccable quieter
[P2] Escala do mapa sem cores
- Why:
choroplethFillColorimplementa gradiente rose→vermelho; UI só mostra números emChoroplethMapControls. - Fix: Barra de legenda com swatches usando o mesmo ramp; rótulos 0 e máximo.
- Suggested command:
/impeccable clarify
[P2] "Lideranças" sem framing
- Why: Linha solta com badges de status + contagem; não fica claro que são contatos de liderança em todos os núcleos por status de apoio.
- Fix: Card com título + descrição; link para lista filtrada; tooltip/glossário nos status.
- Suggested command:
/impeccable clarify
[P2] Visitados recentemente — bullets e botão Limpar
- Why:
<ul>semlist-none(padrão do projeto em outras listas); "Limpar" ghost compete com o título sem affordance de ação destrutiva/secundária. - Fix:
list-none m-0 p-0; botão outline ou ícone +aria-label="Limpar histórico de visitas". - Suggested command:
/impeccable polish
Persona Red Flags
Alex (power user / geral): Scroll longo para ver filas + mapa + eventos; não vê triagem territorial de relance; três zeros nas filas são ruído.
Jordan (first-timer): "Lideranças" e badges coloridos sem explicação; cores do mapa opacas; "Limpar" ambíguo.
Marcos (coordenador de campo): Dashboard de coordenador já usa lg:grid-cols-2 nos cards; visão geral parece produto diferente, menos maduro.
Minor Observations
- Mapa fora de
Cardenquanto vizinhos estão em Card — quebra de registro visual. - Dois
CampaignMetricStripempilhados poderiam ser um grid 2×3 emlg:. QueueSection<ul>também semlist-none.- Heading outline:
h2Indicadores depois deh3nas filas.
Questions to Consider
- Se
NucleusListOverviewjá tem o layout "adulto", por que o home ainda é pilha vertical? - Quando tudo está em dia, o dashboard deve celebrar ou manter tom de "quadro de pendências"?
- O mapa é ferramenta de triagem (legenda P1) ou decoração (considere snapshot estático)?