7.1 KiB
| target | total_score | p0_count | p1_count | p2_count | p3_count | timestamp | slug |
|---|---|---|---|---|---|---|---|
| /campanha | 32 | 0 | 0 | 3 | 2 | 2026-07-20T00-01-43Z | src-app-campaign-campanha |
Method: dual-agent (A: 22ac0b39-b0f9-4111-b890-4c4125d1218b · B: bacccead-08e1-4dce-9b0d-4fe7984b1853)
Design Health Score
| # | Heuristic | Score | Key Issue |
|---|---|---|---|
| 1 | Visibility of System Status | 3 | KPIs têm CampaignDataFreshness; filas não mostram idade do item na linha |
| 2 | Match System / Real World | 4 | Linguagem de núcleo/fila encaixa; LeadershipStatusCard contextualiza status |
| 3 | User Control and Freedom | 4 | RecentlyVisitedCard com aria-label no limpar; liderança tem CTA no empty |
| 4 | Consistency and Standards | 3 | Dashboard geral alinhado ao grid coordenador; empty de eventos ainda é <p> solto |
| 5 | Error Prevention | 3 | Dashboard read-only; sem riscos destrutivos nesta tela |
| 6 | Recognition Rather Than Recall | 4 | ChoroplethLegend + visitados recentes; glossário ainda só em title |
| 7 | Flexibility and Efficiency | 2 | Fila prioritária ainda é um clique por núcleo; sem triagem em lote |
| 8 | Aesthetic and Minimalist Design | 3 | Top row 3:2:1 funciona; dois CampaignMetricStrip + mapa sem header |
| 9 | Error Recovery | 3 | Empty de liderança com CTA; coordenador sem próximo passo |
| 10 | Help and Documentation | 2 | Status de apoio e estimativa sem affordance touch (?/Popover) |
| Total | 32/40 | Good — fundação sólida; flexibilidade e ajuda ainda abaixo do ideal |
Anti-Patterns Verdict
LLM assessment: Não é slop de SaaS genérico. Field Desk se lê: stone desk, Inter, vermelho como sinal, mapa da Bahia, copy de campo em pt-BR. O ciclo pós-critique fechou os P1 visuais (grid desktop, filas vazias, legenda do mapa, card de lideranças, recentes). O que resta é produto/ops (bulk, glossário), não estética de template.
Deterministic scan: 0 findings em src/app/(campaign)/campanha + src/components/campaign (~164 arquivos). Nenhum side-stripe, gradient text, ou eyebrow detectado no estático.
Browser evidence: Dev server ativo. Playwright capturou login em 1440px e 1920px — card centrado, margens amplas esperadas. Dashboard autenticado não capturado (gate de login). Overlay Impeccable conectou no login e reportou 1× nested-cards em runtime — provável falso positivo (heurística de borda/radius em subcomponentes shadcn; HTML estático tem um único data-slot="card").
Overall Impression
O dashboard geral saiu da pilha vertical ingênua para um desk operacional: fila prioritária à esquerda, eventos e recentes no topo, KPIs + mapa abaixo. A sensação agora é de ferramenta de coordenação, não de relatório empilhado. O teto atual é eficiência (Alex ainda faz retail na fila) e onboarding (Jordan não decodifica badges sem hover). Score 27 → 32 no eixo dashboard; o próximo salto vem do backlog FD2, não de mais polish visual.
What's Working
-
GeneralDashboardTopRow3:2:1 — Filas (3) | Próximos eventos (2) | Recentes (1), com reflow 4:2 quando não há visitas. Prioridade visual correta sem monólito vertical. -
ActionQueuesCardall-clear — Um único “Tudo em dia” substitui três subseções com badge “0”. Tom positivo quando não há pendência. -
LeadershipStatusCard+ChoroplethLegend— Lideranças ganharam título, descrição, CTA e grid com ênfase em engajado; mapa decodificável com barra rose→vermelho e rótulos 0/máx.
Priority Issues
[P2] Triagem em lote ainda ausente na fila prioritária
- Why: Cada item “Sem coordenador” é um link isolado; 15 núcleos = 15 idas e voltas.
- Fix: Multi-select só em
withoutCoordinator+ barra “Atribuir coordenador (N)” reutilizando shell de designação existente. - Suggested command:
/impeccable layout
[P2] Jargão de domínio opaco no touch
- Why:
SupportStatusBadge, estimativa confirmada vs proposta, métricas do mapa dependem detitle(hover) — inútil no celular. - Fix:
CampaignGlossaryHintcom gatilho?(min-h-11) em badges e labels de KPI. - Suggested command:
/impeccable clarify
[P2] Outline de headings pula h2 em Filas
- Why:
h1→CardTitleFilas (não heading) →h3nas subfilas → depoish2Indicadores — ordem invertida para leitores de tela. - Fix: Promover “Filas de ação” a
h2semântico (id="action-queues"já existe). - Suggested command:
/impeccable audit
[P3] Empty do coordenador sem CTA
- Why: Texto explica o bloqueio mas não oferece ação (liderança já tem “Ver meu perfil”).
- Fix: Espelhar
LeadershipDashboardempty comEmptyContent+ CTA. - Suggested command:
/impeccable onboard
[P3] Recentes compactos escondem timestamp
- Why: Modo
compactpõe idade só emsr-only; Alex não distingue visita recente de antiga. - Fix: Mostrar
text-xs text-muted-foregroundtruncado no modo compacto. - Suggested command:
/impeccable polish
Persona Red Flags
Alex (power user / geral): Fila ainda retail; timestamps ocultos em Recentes compacto; max-w-screen-2xl deixa margem morta em ultra-wide (aceitável, mas não usa monitor inteiro).
Jordan (first-timer): Grid de status colorido sem glossário inline; “Nenhum evento agendado” não sugere criar plano; mapa legível mas métrica “estimativa confirmada” não explicada na UI.
Casey (mobile / campo): Alvos min-h-11 ok; fila é tocável; sem cue de offline até fallback PWA; tooltips de status inacessíveis no touch.
Marcos (coordenador): Empty sem CTA após “peça que te incluam”; dashboard dele não ganhou o top-row 3:2:1 do geral (só RecentlyVisited + cards).
Minor Observations
LeadershipDashboardempty ainda usaAlertTriangleIcon— tom alarmista para “aguardando acesso”.UpcomingActionPlansCardempty é<p>; vizinhos usamEmpty.- Mapa em
CardsemCardHeader— vizinhos têm título explícito. - Dois
CampaignMetricStrippoderiam ser um grid 2×3 emlg:. - Reflow do top row quando primeira visita é gravada (3:2:1 → 4:2).
Questions to Consider
- O mapa é instrumento de triagem (clique filtra núcleos) ou painel de contexto read-only?
- Quando tudo está “Tudo em dia”, o dashboard deveria promover mobilização (eventos) acima dos KPIs?
- Recentes em
localStorageé feature (privacidade) ou footgun (troca de dispositivo)?