diff --git a/.cursor/rules/projects/nucleos-eleitorais.mdc b/.cursor/rules/projects/nucleos-eleitorais.mdc index e291691d..7c7bf396 100644 --- a/.cursor/rules/projects/nucleos-eleitorais.mdc +++ b/.cursor/rules/projects/nucleos-eleitorais.mdc @@ -26,6 +26,7 @@ alwaysApply: false - Em 2026-07-17, a Refactor Phase 4A consolidou as dez migrations locais não publicadas de `20260717_*` em `20260718_010733_consolidate_campaign_schema`, mantendo intacta a história rastreada até `20260716_010420_add_campaign_user`; os bancos locais foram reconciliados sem alterar dados de aplicação. - Em 2026-07-18, o follow-up Phase 4C fixou o Playwright em dois workers por padrão, adicionou guardas automáticos de erros do navegador/console/5xx, fortaleceu privacidade HTML+Flight por papel e tornou o login por teclado uma interação real com Enter e cookie verificado. - Em 2026-07-18, a projeção do dashboard omite `supportStatus` ausente por redação de acesso e lança invariante genérico se um valor não-vazio inválido chegar à fronteira; agregação e badge são exaustivos no enum. +- Em 2026-07-18, os designs UX Pilot dos próximos ciclos foram versionados em `docs/design-refs/latest/` (11 pares `.png`+`.html`) e mapeados aos itens do roadmap — tabela "Referências de design (UX Pilot)" em `docs/roadmap.md`, com seção "Referência visual (UX Pilot)" em cada plano. Decisão: a UX/estrutura dos designs é a referência; a paleta NÃO — os arquivos vieram na paleta antiga (vermelho escuro/navy/dourado) e toda implementação usa os tokens claros do tema `data-theme='campaign'`. Sem design nesta leva: dobradinha, mapa, demandas, detalhe do plano de ação, opt-in de push e fill-ins. ## Decisões diff --git a/docs/design-refs/latest/Apoiador-Ficha.html b/docs/design-refs/latest/Apoiador-Ficha.html new file mode 100644 index 00000000..9401c3e1 --- /dev/null +++ b/docs/design-refs/latest/Apoiador-Ficha.html @@ -0,0 +1,278 @@ + + + + + + + + Ficha do Apoiador + + + + + + + + + + +
+ + Coordenação Geral + +
+ + +
+ +
+

Maria das Dores Souza

+

Cadastrada em 10/07/2025 · por João S.

+
+ Certo + intenção de voto +
+
+
+ +
+ +
+

Dados de contato

+ +
+
+ + (77) 9 9000-1111 +
+ +
+ +
+ +
+

Bom Jesus da Lapa

+

Bahia · Velho Chico

+
+
+ + +
+
+ + Quilombo Rio das Rãs +
+ +
+
+ + + + +
+
+ +
+

Consentimento LGPD

+

+ O apoiador deve ter consentido previamente o uso de seus dados para fins eleitorais. +

+
+
+ +

+ + Consentimento registrado em 10/07/2025 · Coletor: João Santos +

+
+ + +
+

Intenção de voto

+
+ + + + +
+

+ Disponível somente após confirmação do consentimento LGPD +

+
+ + +
+

+ + Kit de compartilhamento +

+

+ Mensagem pronta para Maria encaminhar nos próprios contatos. + Nunca disparada pela campanha. +

+ + +
+

+ "Oi! Tô apoiando Jorge Solla para Deputado Federal pela Bahia. Ele tem + um histórico de luta pela saúde e pelos direitos da nossa comunidade. Se você ainda não + decidiu, vale conhecer o trabalho dele! 🌟
solla.ba" +

+
+ + +
+ + +
+ +
+

+ + A mensagem é enviada pelo celular de Maria — não é disparo em massa da + campanha +

+
+
+ + +
+
+

Remover meus dados

+

Exclui todos os dados desta pessoa do sistema

+
+ +
+
+ + +
+ +
+ + + + diff --git a/docs/design-refs/latest/Apoiador-Ficha.png b/docs/design-refs/latest/Apoiador-Ficha.png new file mode 100644 index 00000000..65740543 Binary files /dev/null and b/docs/design-refs/latest/Apoiador-Ficha.png differ diff --git a/docs/design-refs/latest/Apoiadores-Lista.html b/docs/design-refs/latest/Apoiadores-Lista.html new file mode 100644 index 00000000..278ca3f5 --- /dev/null +++ b/docs/design-refs/latest/Apoiadores-Lista.html @@ -0,0 +1,312 @@ + + + + + + + + Apoiadores + + + + + + + + + + +
+ + Coordenação Geral · todos os + apoiadores + +
+ + +
+
+

1.847

+

total

+
+
+

1.104

+

Certo + Tende

+
+
+

415

+

Indecisos

+
+
+ + +
+
+ + +
+
+ + + +
+
+ + +
+ +
+
+ +
+
+

Maria das Dores Souza

+ Certo +
+

Bom Jesus da Lapa · Quilombo Rio das Rãs

+
+ (77) 9 9000-1111 +
+
+
+
+ + +
+
+ +
+
+

Antônio Carlos Leal

+ Tende a certo +
+

Brumado · Sindicato Rural Oeste

+
+ (77) 9 9111-2222 +
+
+
+
+ + +
+
+ +
+
+

Joelma Pereira

+ Indeciso +
+

Feira de Santana · sem núcleo vinculado

+
+ (75) 9 8200-3333 +
+
+
+
+ + +
+
+ +
+
+

Roberto Bispo

+ Outro +
+

+ Vitória da Conquista · Igreja Batista Central +

+
+ Sem telefone cadastrado +
+
+
+
+ + +
+
+ +
+
+

Simone Oliveira

+ Certo +
+

Caetité · Quilombo Palmares II

+
+ (77) 9 9444-5555 +
+
+
+
+ + +

+ Mostrando 5 de 1.847 · Carregar mais +

+
+ + +
+ +
+ + + + + diff --git a/docs/design-refs/latest/Apoiadores-Lista.png b/docs/design-refs/latest/Apoiadores-Lista.png new file mode 100644 index 00000000..579331aa Binary files /dev/null and b/docs/design-refs/latest/Apoiadores-Lista.png differ diff --git a/docs/design-refs/latest/Baseline-Eleitoral-2022.html b/docs/design-refs/latest/Baseline-Eleitoral-2022.html new file mode 100644 index 00000000..8e0baa12 --- /dev/null +++ b/docs/design-refs/latest/Baseline-Eleitoral-2022.html @@ -0,0 +1,422 @@ + + + + + + + + Baseline Eleitoral 2022 + + + + + + + +
+ +
+

Quilombo Rio das Rãs

+

Comunidade · Bom Jesus da Lapa

+
+ +
+ + +
+ + Visível para você · Coord. de Núcleo + +
+ + +
+ Comunidade · Bom Jesus da Lapa + ZE 12 +
+ + +
+

Estimativa de votos

+
+ 1.200 + Confirmada +
+

por João S. em 12/07

+ +
+ + +
+
+ + + + + +
+
+ + +
+ +
+

+ Pontos fortes +

+ +
+ + + + +
+ +
+

+ Baseline eleitoral 2022 +

+ Deputado Federal · Bahia +
+ + +
+ +
+
+
+
+ +
+
+

Jorge Solla

+

PT · Dep. Federal

+
+
+
+

850

+

votos · 2022

+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+

Lula

+

PT · Presidente (2º turno)

+
+
+

1.480

+
+
+ + +
+
+
+
+ +
+
+

Jerônimo Rodrigues

+

PT · Governador

+
+
+

1.310

+
+
+ + +
+

+ Eleitorado 2022 +

+
+
+ Votos válidos + 2.490 +
+
+ Brancos + 142 +
+
+ Nulos + 87 +
+
+ Abstenções + 680 +
+
+
+ + +
+
+ +
+

Mais votado aqui em 2022

+

Dep. Fulano de Tal (PP)

+
+
+

2.100

+
+
+ + +
+ +
+

Faltam 350 votos para o patamar de 2022

+

+ Estimativa atual (1.200) ainda abaixo do resultado de 2022 (850 → meta: 1.200 + confirmada, mas patamar atingido exige esforço de ativação adicional) +

+
+
+ + +
+ + + + + +
+

+ Insights do território +

+ + +
+
+ +
+
+

+ Taxa de conversão: 18% do eleitorado apto +

+

850 votos / 4.700 eleitores aptos

+
+
+ + +
+
+ +
+
+

Território de defesa

+

Base sólida — prioridade manter engajamento

+
+ Defesa +
+ + +
+
+ +
+
+

Alavancagem da chapa: 22%

+

Da base Lula/Jerônimo ainda não convertida

+
+
+ + +
+
+ +
+
+

Oportunidade de mobilização

+

+ 142 brancos/nulos + 680 abstenções = 822 votos possíveis +

+
+
+ + +
+
+ +
+
+

Mais votado aqui em 2022: Dep. Fulano (PP)

+

+ Solla ficou em 4º lugar · 2.100 votos à frente +

+
+
+
+ + + +
+

+ Status das lideranças +

+
+
+
+ Engajadas +
+ 5 +
+
+
+ A abordar +
+ 4 +
+
+
+ Em disputa +
+ 2 +
+
+
+ Negativas +
+ 1 +
+
+
+
+ + + + + diff --git a/docs/design-refs/latest/Baseline-Eleitoral-2022.png b/docs/design-refs/latest/Baseline-Eleitoral-2022.png new file mode 100644 index 00000000..e25f0d7a Binary files /dev/null and b/docs/design-refs/latest/Baseline-Eleitoral-2022.png differ diff --git a/docs/design-refs/latest/Compartilhar-Nucleo.html b/docs/design-refs/latest/Compartilhar-Nucleo.html new file mode 100644 index 00000000..56e95732 --- /dev/null +++ b/docs/design-refs/latest/Compartilhar-Nucleo.html @@ -0,0 +1,259 @@ + + + + + + + + Compartilhar Núcleo + + + + + + + +
+ +
+ +
+

Quilombo Rio das Rãs

+

Comunidade · Bom Jesus da Lapa

+
+ +
+
+ + Visível para você · Coord. de Núcleo + +
+ + +
+
+ +
+
+
+ + +
+
+

Compartilhar núcleo

+

+ Quilombo Rio das Rãs · envia apenas o link, não concede acesso +

+
+ +
+ + +
+ +
+

+ Com coordenação geral +

+
+ +
+ +
+

Carlos Mendes

+

Coord. Geral

+
+ +
+ +
+ +
+

Ana Ribeiro

+

Coord. Geral

+
+ +
+
+
+ + +
+ + +
+

+ Com coordenador +

+
+
+ +
+

João Santos

+

Coord. Núcleo

+
+ +
+
+ +
+

Patrícia Lima

+

Coord. Núcleo

+
+ +
+
+
+ + +
+ + +
+

+ Com liderança +

+
+
+ +
+

Dona Rosa Ferreira

+

Liderança · Engajada

+
+ +
+ + +
+
+ + +
+ + +
+

+ Copiar link +

+
+ +

+ solla.app/nucleos/quilombo-rio-das-ras +

+ +
+ + +
+
+ + +
+
+
+
+ + + + diff --git a/docs/design-refs/latest/Compartilhar-Nucleo.png b/docs/design-refs/latest/Compartilhar-Nucleo.png new file mode 100644 index 00000000..8757e7fe Binary files /dev/null and b/docs/design-refs/latest/Compartilhar-Nucleo.png differ diff --git a/docs/design-refs/latest/Dia-D-GOTV.html b/docs/design-refs/latest/Dia-D-GOTV.html new file mode 100644 index 00000000..aed0e723 --- /dev/null +++ b/docs/design-refs/latest/Dia-D-GOTV.html @@ -0,0 +1,343 @@ + + + + + + + + Dia D – Operação Eleitoral + + + + + + + + + + +
+
+
+

62% da base

+

1.240 de 2.000 confirmados

+
+
+

Votaram

+

830

+
+
+ +
+
+
+
+ 0 + 62% confirmados vão votar + 2.000 +
+
+ + +
+ + + +
+ + +
+ + Visão do coordenador · Quilombo Rio das + Rãs + +
+ + +
+
+
+ Não confirmado +
+
+
+ Vai votar +
+
+
+ Votou ✓ +
+
+ + +
+ +
+
+

Maria das Dores Souza

+

Seção 42 · ZE 12

+
+ +
+ + +
+
+

Antônio Carlos Leal

+

Seção 42 · ZE 12

+
+
+ + +
+
+ + +
+
+

Joelma Pereira

+

Seção 38 · ZE 12

+
+
+ +
+
+ + +
+
+

Roberto Bispo

+

Seção 38 · ZE 12

+
+
+ +
+
+ + +
+
+

Simone Oliveira

+

Seção 45 · ZE 12

+
+ +
+ + +
+
+

José Nascimento

+

Seção 40 · ZE 12

+
+
+ +
+
+ + +
+
+

Ana Paula Ferreira

+

Seção 38 · ZE 12

+
+
+ +
+
+ +

+ Mostrando 7 de 2.000 · Carregar mais +

+
+ + + + + + + + + + diff --git a/docs/design-refs/latest/Dia-D-GOTV.png b/docs/design-refs/latest/Dia-D-GOTV.png new file mode 100644 index 00000000..39662341 Binary files /dev/null and b/docs/design-refs/latest/Dia-D-GOTV.png differ diff --git a/docs/design-refs/latest/Formulario-Territorio.html b/docs/design-refs/latest/Formulario-Territorio.html new file mode 100644 index 00000000..3434a6fe --- /dev/null +++ b/docs/design-refs/latest/Formulario-Territorio.html @@ -0,0 +1,385 @@ + + + + + + + + Formulário – Território + + + + + + + + + + +
+ + Coordenação Geral + +
+ + +
+ +
+
+ + +
+
+ + +
+
+ + + + +
+

+ Território +

+ + +
+ + +
+ + Bom Jesus da Lapa + + + + Carinhanha + + +
+ +
+ + + + +
+

+ + 2 municípios selecionados +

+
+ + +
+ +
+ + Velho Chico + + + Sertão do São Francisco + +
+

+ Derivados dos municípios selecionados · não é possível editar +

+
+ + +
+ +
+ + Selecione municípios primeiro +
+

+ + Bairros exigem um único município selecionado +

+
+ + + + +
+ + + +
+ +

+ Zonas sugeridas pelo cadastro oficial do TSE — confira antes de salvar. +

+
+ + +
+ + + + + + + +
+ + + +
+
+ + + + +
+ + +
+ + +
+ + + + diff --git a/docs/design-refs/latest/Formulario-Territorio.png b/docs/design-refs/latest/Formulario-Territorio.png new file mode 100644 index 00000000..430c49b0 Binary files /dev/null and b/docs/design-refs/latest/Formulario-Territorio.png differ diff --git a/docs/design-refs/latest/Importar-CSV-Apoiadores.html b/docs/design-refs/latest/Importar-CSV-Apoiadores.html new file mode 100644 index 00000000..035511cc --- /dev/null +++ b/docs/design-refs/latest/Importar-CSV-Apoiadores.html @@ -0,0 +1,443 @@ + + + + + + + + Importar CSV – Apoiadores + + + + + + + + + + +
+
+
+ +
+

Importar apoiadores via CSV

+

+ Importe uma planilha para adicionar apoiadores em lote +

+
+
+ +
+ +
+ +
+ +
+
+ +
+ Upload do arquivo +
+
+ +
+
+ 2 +
+ Conferir prévia +
+
+ +
+
+ 3 +
+ Confirmação +
+
+ + + + + +
+ +
+
+ + 412 prontos para importar +
+
+ + 37 duplicados (pelo telefone) +
+
+ + 3 erros +
+ +
+ + +
+
+

Prévia — 452 linhas no arquivo

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ # + + Nome + + Telefone + + Município + + Intenção + + Status +
1Maria das Dores Souza(77) 9 9000-1111Bom Jesus da Lapa + Certo + + + ok + +
2Antônio Carlos Leal(77) 9 9111-2222Brumado + Tende a certo + + + ok + +
3Joelma Pereira(75) 9 8200-3333Feira de Santana + Indeciso + + + duplicado pelo telefone + +
4Roberto Bispo—Vitória da Conquista— + + telefone inválido + +
5Simone Oliveira(77) 9 9444-5555Caetité + Certo + + + ok + +
6Fernanda Costa(71) 9 7777-8888Municipio Invalido— + + município não reconhecido + +
+
+
+ Mostrando 6 de 452 linhas · + Ver todas +
+
+ + +
+ +
+

+ Serão importados 412 apoiadores · 37 duplicados + ignorados · 3 erros pulados +

+ +
+
+ + +
+
+ +
+

Importação concluída!

+

+ 412 importados · 37 duplicados ignorados · + 3 erros +

+
+ + +
+
+
+
+
+ + diff --git a/docs/design-refs/latest/Importar-CSV-Apoiadores.png b/docs/design-refs/latest/Importar-CSV-Apoiadores.png new file mode 100644 index 00000000..9f387bd0 Binary files /dev/null and b/docs/design-refs/latest/Importar-CSV-Apoiadores.png differ diff --git a/docs/design-refs/latest/Lista-Nucleos-Overview.html b/docs/design-refs/latest/Lista-Nucleos-Overview.html new file mode 100644 index 00000000..e12fde79 --- /dev/null +++ b/docs/design-refs/latest/Lista-Nucleos-Overview.html @@ -0,0 +1,450 @@ + + + + + + + + Núcleos – Visão Geral + + + + + + + + + + +
+ + Coordenação Geral · vê todos os + núcleos + +
+ + +
+
+ + +
+ +
+ + Velho Chico + + + + ZE 12 + + +
+
+ + + + +
+ +

+ + Mostrando agregados de 14 núcleos filtrados +

+ + +
+
+
+

+ Estimativa de votos +

+
+ 18.740 +
+

votos estimados nos 14 núcleos

+
+
+ +
+
+ +
+
+ Com estimativa confirmada + 71% +
+
+
+
+

10 confirmadas · 4 pendentes

+
+ + 3 sugestões pendentes + +
+ + +
+ +
+
+

Cobertura

+ +
+

86%

+
+
+
+

12 de 14 com coordenador

+
+ +
+
+

Baseline 2022

+ +
+

+2.140

+

votos acima do patamar

+
+ 8 acima + 6 abaixo +
+
+
+ + +
+
+

+ Últimas atualizações +

+ Ver todas +
+
+ +
+ +
+
+ Semanal + há 1 dia +
+

+ João S. · Quilombo Rio das Rãs +

+
+
+ +
+ +
+
+ Urgente + há 2 dias +
+

+ Maria L. · Sindicato Rural Oeste +

+
+
+ +
+ +
+
+ Nota + há 3 dias +
+

+ Pedro A. · Igreja Batista Central +

+
+
+
+
+
+ + + +
+

+ 14 núcleos filtrados +

+
+ + +
+ +
+
+
+

Quilombo Rio das Rãs

+

+ Bom Jesus da Lapa · + ZE 12 +

+
+ Confirmada +
+
+ 12 lideranças + 1.200 votos + +12% +
+
+ + +
+
+
+

Sindicato Rural Oeste

+

+ Brumado · + ZE 5 + ZE 7 +

+
+ Sugestão pend. +
+
+ 16 lideranças + 3.400 votos + −8% +
+
+ + +
+
+
+

Assentamento Vitória

+

+ Feira de Santana · + ZE 5 +

+
+ Confirmada +
+
+ 7 lideranças + 900 votos + Sem coord. +
+
+ + +
+
+
+

Igreja Batista Central

+

+ Vitória da Conquista · + ZE 8 +

+
+ Sugestão pend. +
+
+ 11 lideranças + 650 votos + −5% +
+
+ + +
+
+
+

Quilombo Palmares II

+

+ Caetité · sem ZE +

+
+ Sem estimativa +
+
+ 4 lideranças + — + Sem coord. +
+
+ +

+ Mostrando 5 de 14 · Ver mais +

+
+ + +
+ +
+ + + + + diff --git a/docs/design-refs/latest/Lista-Nucleos-Overview.png b/docs/design-refs/latest/Lista-Nucleos-Overview.png new file mode 100644 index 00000000..0712b990 Binary files /dev/null and b/docs/design-refs/latest/Lista-Nucleos-Overview.png differ diff --git a/docs/design-refs/latest/Notificacoes-PWA.html b/docs/design-refs/latest/Notificacoes-PWA.html new file mode 100644 index 00000000..163fb7f2 --- /dev/null +++ b/docs/design-refs/latest/Notificacoes-PWA.html @@ -0,0 +1,264 @@ + + + + + + + + Notificações + + + + + + + + +
+
+
+
+ +
+

Início

+
+ +
+
+ + Coordenação Geral + +
+
+
+

Núcleos ativos

+

47

+
+
+

Apoiadores

+

1.847

+
+
+
+ + + + +
+
+ +
+
+
+ + +
+
+

Notificações

+ 4 não lidas +
+
+ + +
+
+ + +
+ +
+
+ +
+
+

+ Estimativa aguardando confirmação — Núcleo Quilombo Rio das Rãs +

+

+ João Santos sugeriu 1.200 votos · confirme ou ajuste +

+

há 2 horas

+
+
+
+ + +
+
+ +
+
+

+ Novo apoiador cadastrado — Sindicato Rural Oeste +

+

Maria Lima adicionou Antônio Carlos Leal

+

há 4 horas

+
+
+
+ + +
+
+ +
+
+

+ Novo reporte de campo — Igreja Batista Central +

+

+ Pedro Alves publicou uma atualização urgente +

+

há 1 dia

+
+
+
+ + +
+
+ +
+
+

+ Plano de ação precisa de atenção — Comício (Rascunho) +

+

+ Data ainda não definida · confirme ou cancele +

+

há 2 dias

+
+
+
+ + +
+
+ +
+
+

+ Importação de CSV concluída +

+

+ 412 apoiadores importados · 37 duplicados ignorados +

+

há 3 dias

+
+
+ + +
+
+ +
+
+

+ Bem-vindo ao Solla Campanha! +

+

+ Seu acesso de Coordenação Geral foi ativado +

+

há 12 dias

+
+
+
+ + +
+
+ +
+
+

Instale o app da campanha

+

Acesse mais rápido e receba avisos

+
+ + +
+
+
+ + + + + + + + diff --git a/docs/design-refs/latest/Notificacoes-PWA.png b/docs/design-refs/latest/Notificacoes-PWA.png new file mode 100644 index 00000000..db2769ca Binary files /dev/null and b/docs/design-refs/latest/Notificacoes-PWA.png differ diff --git a/docs/design-refs/latest/Novo-Plano-de-Acao.html b/docs/design-refs/latest/Novo-Plano-de-Acao.html new file mode 100644 index 00000000..9b75b394 --- /dev/null +++ b/docs/design-refs/latest/Novo-Plano-de-Acao.html @@ -0,0 +1,283 @@ + + + + + + + + Novo Plano de Ação + + + + + + + + + + +
+ + Coordenação Geral + +
+ +
+ +
+

Informações básicas

+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+

Data e horário

+ +
+
+ + +
+
+ + +
+
+ +
+ + +

Deixe em branco se a duração for indefinida

+
+
+ + +
+

+ Território +

+ +
+ +
+ + Bom Jesus da Lapa + + +
+
+ + +
+
+ +
+ + + Velho Chico + +
+
+ + +
+

Pessoas responsáveis

+ +
+ + +
+ +
+

João Santos

+

Coord. Núcleo · Bom Jesus da Lapa

+
+ +
+ +
+ +
+ + +
+
+ + +
+ +
+ + +
+
+
+ + +
+ + +
+ + diff --git a/docs/design-refs/latest/Novo-Plano-de-Acao.png b/docs/design-refs/latest/Novo-Plano-de-Acao.png new file mode 100644 index 00000000..f3e0a7e3 Binary files /dev/null and b/docs/design-refs/latest/Novo-Plano-de-Acao.png differ diff --git a/docs/design-refs/latest/Planos-de-Acao.html b/docs/design-refs/latest/Planos-de-Acao.html new file mode 100644 index 00000000..faf2e846 --- /dev/null +++ b/docs/design-refs/latest/Planos-de-Acao.html @@ -0,0 +1,341 @@ + + + + + + + + Planos de Ação + + + + + + + + + + +
+ + Coordenação Geral + +
+ + +
+ + + + +
+ + +
+
+ + + +
+
+ + +
+ +
+ +
+ + Caminhada + + + Confirmado + +
+
+

Caminhada no Centro Histórico

+
+ Dom, 3 ago · 08h00 + Bom Jesus da Lapa +
+
+ Velho Chico + · Resp: João Santos +
+
+
+ + +
+
+ + Reunião de apoio + + + Planejado + +
+
+

Reunião com lideranças quilombolas

+
+ Ter, 5 ago · 18h30 + Brumado +
+
+ Sertão do São Francisco + · Resp: Maria Lima +
+ +
+
+
+
+ 2/5 tarefas +
+
+
+ + +
+
+ + Porta a porta + + + Confirmado + +
+
+

Porta a porta Bairro Novo

+
+ Sáb, 9 ago · 09h00 + Feira de Santana +
+
+ Bacia do Jacuípe + · Resp: Pedro Alves +
+
+
+ + +
+
+ + Comício + + + Rascunho + +
+
+

Comício de encerramento (planejado)

+
+ Data a definir + Vitória da Conquista +
+
+
+ + +
+
+ + Panfletagem + + + Realizado + +
+
+

Panfletagem no mercado municipal

+
+ 20 jul · Salvador +
+
+
+ +

+ 5 de 23 planos · Ver mais +

+
+ + +
+ +
+ + + + + diff --git a/docs/design-refs/latest/Planos-de-Acao.png b/docs/design-refs/latest/Planos-de-Acao.png new file mode 100644 index 00000000..93654c75 Binary files /dev/null and b/docs/design-refs/latest/Planos-de-Acao.png differ diff --git a/docs/plans/baseline-eleitoral-tse.md b/docs/plans/baseline-eleitoral-tse.md index 2b3a0dd7..9c2a757f 100644 --- a/docs/plans/baseline-eleitoral-tse.md +++ b/docs/plans/baseline-eleitoral-tse.md @@ -5,6 +5,19 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) · [`Baseline-Eleitoral-2022.html`](../design-refs/latest/Baseline-Eleitoral-2022.html) — a tela também contém o card "Insights do território", que pertence aos planos de insight separados (ver abaixo). + +![Baseline eleitoral 2022 no detalhe do núcleo](../design-refs/latest/Baseline-Eleitoral-2022.png) + +Como usar: + +- **Adotar a estrutura (Fases 2 e 4 deste plano):** bloco "Baseline eleitoral 2022" na aba Visão geral do núcleo com: linha destacada de Solla (votos 2022 + barra), linhas secundárias de Lula (Presidente, 2º turno) e Jerônimo (Governador); sub-bloco "Eleitorado 2022" (válidos, brancos, nulos, abstenções); linha "Mais votado aqui em 2022"; e o alerta âmbar do insight Gap vs 2022 ("Faltam 350 votos para o patamar de 2022" com a conta estimativa vs. resultado). Os quatro estados do gap descritos na Fase 4 seguem esse mesmo formato de alerta (âmbar/verde/informativo). +- **Pertence aos planos de insight separados (não implementar junto):** o card "Insights do território" (taxa de conversão, território de defesa, alavancagem da chapa, oportunidade de mobilização, mais votado/ranking) é a referência visual dos cinco planos `insight-*.md` — cada linha do card corresponde a um plano. A arquitetura do componente (`NucleusInsights.tsx`, stack de cards com ícone + veredito de uma linha + número de apoio) deve nascer extensível conforme já previsto. +- **Overview da lista:** o bloco compacto "Baseline 2022" da Fase 3 aparece no design [`Lista-Nucleos-Overview.png`](../design-refs/latest/Lista-Nucleos-Overview.png) (gap total + "8 acima · 6 abaixo"). +- **Ajustar cores:** paleta antiga no HTML/PNG (header vermelho escuro, destaque de Solla em vermelho escuro). Implementar com tokens do tema `campaign`: destaque de Solla pode usar `#C51414` sobre fundo claro; alerta do gap usa o par âmbar (`#FEF3C7`/`#92400E`) ou verde (`#DCFCE7`/`#166534`). + ## Contexto Os resultados das eleições passadas são **dados abertos públicos** do TSE (Portal de Dados Abertos, licença Creative Commons Atribuição), disponíveis por **município e zona eleitoral** (e por seção). Hoje o `/campanha` só tem a estimativa manual de votos (sugerir/confirmar); não há referência histórica. A decisão de produto (2026-07-17) é importar os resultados oficiais de 2022 (presidente, governador, dep. federal, dep. estadual) por município+zona e usá-los como **baseline histórico** em três lugares: no detalhe do núcleo, no overview da lista de núcleos (escopado pelos filtros), e em insights automáticos para coordenadores e lideranças. diff --git a/docs/plans/cadastro-nominal-apoiadores.md b/docs/plans/cadastro-nominal-apoiadores.md index dcf3dd72..37f6d0f6 100644 --- a/docs/plans/cadastro-nominal-apoiadores.md +++ b/docs/plans/cadastro-nominal-apoiadores.md @@ -5,6 +5,27 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos", linha 56) Responsável: — +## Referência visual (UX Pilot) + +Três designs cobrem este plano: + +| Tela | Arquivos | +| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Lista de apoiadores (`/campanha/apoiadores`) | [`Apoiadores-Lista.png`](../design-refs/latest/Apoiadores-Lista.png) · [`Apoiadores-Lista.html`](../design-refs/latest/Apoiadores-Lista.html) | +| Ficha do apoiador | [`Apoiador-Ficha.png`](../design-refs/latest/Apoiador-Ficha.png) · [`Apoiador-Ficha.html`](../design-refs/latest/Apoiador-Ficha.html) | +| Import CSV (desktop, wizard 3 passos) | [`Importar-CSV-Apoiadores.png`](../design-refs/latest/Importar-CSV-Apoiadores.png) · [`Importar-CSV-Apoiadores.html`](../design-refs/latest/Importar-CSV-Apoiadores.html) | + +![Lista de apoiadores](../design-refs/latest/Apoiadores-Lista.png) +![Ficha do apoiador](../design-refs/latest/Apoiador-Ficha.png) +![Import CSV de apoiadores](../design-refs/latest/Importar-CSV-Apoiadores.png) + +Como usar: + +- **Lista — adotar:** KPIs no topo (total / "Certo + Tende" / "Indecisos"), busca por nome/telefone/município, filtros "Intenção de voto" e "Território", linhas com nome + município + núcleo vinculado (ou "sem núcleo vinculado" — reflete a decisão de núcleo opcional) + badge de intenção + telefone; estado "Sem telefone cadastrado" em itálico; CTAs "Importar CSV" e "+ Novo". +- **Ficha — adotar:** é a tela que melhor materializa as decisões LGPD do plano: bloco destacado "Consentimento LGPD" com checkbox nominal, link para a Política de Privacidade e registro "Consentimento registrado em … · Coletor: …" (`consentedAt` + `createdBy`); segmented control de intenção de voto **desabilitado até o consentimento** ("Disponível somente após confirmação do consentimento LGPD" — consentimento destacado, chave `apoiador-intencao-voto`); seção "Kit de compartilhamento" com mensagem pronta, "Enviar no WhatsApp"/"Copiar texto" e a nota "A mensagem é enviada pelo celular de {nome} — não é disparo em massa da campanha" (art. 33 §2º); ação "Remover meus dados" (descadastramento art. 18). +- **Import — adotar:** wizard em 3 passos (Upload → Conferir prévia → Confirmação) com chips de contagem ("412 prontos" / "37 duplicados (pelo telefone)" / "3 erros"), tabela de prévia com status por linha (`ok`, `duplicado pelo telefone`, `telefone inválido`, `município não reconhecido`), toggle "Todos | Só erros", "Baixar relatório de erros" e resumo final. Corresponde ao `importSupporters` (dedup por telefone + preview de erros por linha). O sidebar desktop do design mostra a navegação-alvo (Início, Núcleos, Lideranças, Apoiadores, Planos de ação, Atualizações, Territórios) — usar como referência do shell desktop, mas só adicionar entradas de domínios que existirem. +- **Ajustar cores:** paleta antiga (navy/vermelho escuro) no HTML/PNG; implementar com tokens do tema `campaign` (sidebar clara `#FAFAF9`, primário `#C51414`, badges de intenção com os pares pastel claros). Avatares com foto viram iniciais; "solla.ba" no kit é placeholder — a URL real vem de `NEXT_PUBLIC_SITE_URL`. + ## Contexto Hoje a campanha só cadastra pessoas via `leadership` — a junção única `Contact`↔núcleo que carrega status de apoio, vínculo com `campaignUser` (acesso ao app) e consentimento. Não existe base nominal de apoiadores "comuns": eleitores que declaram apoio mas não são lideranças engajadas com acesso à plataforma. O roadmap pede explicitamente o cadastro nominal em massa via `Contact` + junção, **sem nunca criar uma collection "pessoa/apoiador" paralela** (decisão travada no AGENTS.md, espelhada por `Signature`/`Subscription`). diff --git a/docs/plans/compartilhar-pagina.md b/docs/plans/compartilhar-pagina.md index 20eabf30..5828273f 100644 --- a/docs/plans/compartilhar-pagina.md +++ b/docs/plans/compartilhar-pagina.md @@ -5,6 +5,19 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos", linha 51) Responsável: — +## Referência visual (UX Pilot) + +Design: [`Compartilhar-Nucleo.png`](../design-refs/latest/Compartilhar-Nucleo.png) · [`Compartilhar-Nucleo.html`](../design-refs/latest/Compartilhar-Nucleo.html) + +![Compartilhar núcleo](../design-refs/latest/Compartilhar-Nucleo.png) + +Como usar: + +- **Adotar a estrutura:** bottom sheet no mobile com título "Compartilhar núcleo", subtítulo reforçando "envia apenas o link, não concede acesso" (copy que materializa a decisão travada), três seções de destinatários ("Com coordenação geral", "Com coordenador", "Com liderança" — nome + papel + botão verde "Abrir" com ícone WhatsApp) e a seção "Copiar link" com a URL canônica truncada + botão "Copiar". +- **Ajuste em relação ao plano:** o plano especifica `Dialog` central (como `LeadershipInviteDialog`); o design mostra bottom sheet. Adotar o padrão responsivo já usado no painel de lideranças (Sheet/Drawer no mobile, Dialog no desktop) — a estrutura interna do design vale para ambos. +- **Lembrar das regras que o design não mostra:** ocultar a seção "Com liderança" para o papel `lideranca`; ocultar destinatários sem telefone; ocultar seções vazias; estado "copiado" após o clique. +- **Ajustar cores:** paleta antiga no HTML/PNG (header vermelho escuro, navy). Implementar com os tokens do tema `campaign` e componentes `src/components/ui`; avatares com foto viram iniciais. + ## Contexto Hoje o detalhe do núcleo (`/campanha/nucleos/[slug]`) só tem ações de escrita (Editar, Nova liderança, Nova atualização, Arquivar). Não existe um caminho rápido para um usuário da campanha mandar o link daquele núcleo a outra pessoa do mesmo núcleo. A decisão de produto (2026-07-17) é adicionar um botão **Compartilhar** que oferece quatro destinos: coordenação geral, coordenador, liderança ou copiar link. Para os três primeiros, abre o WhatsApp via `wa.me` com o telefone do destinatário — o mesmo padrão já usado pelos convites, **sem WhatsApp Business API**. diff --git a/docs/plans/eventos-agenda-mobilizacao.md b/docs/plans/eventos-agenda-mobilizacao.md index 74b5a75d..e76eb67a 100644 --- a/docs/plans/eventos-agenda-mobilizacao.md +++ b/docs/plans/eventos-agenda-mobilizacao.md @@ -5,6 +5,25 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos", linha 54) Responsável: — +## Referência visual (UX Pilot) + +Dois designs cobrem este plano: + +| Tela | Arquivos | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| Lista de planos (`/campanha/planos`) | [`Planos-de-Acao.png`](../design-refs/latest/Planos-de-Acao.png) · [`Planos-de-Acao.html`](../design-refs/latest/Planos-de-Acao.html) | +| Form novo plano | [`Novo-Plano-de-Acao.png`](../design-refs/latest/Novo-Plano-de-Acao.png) · [`Novo-Plano-de-Acao.html`](../design-refs/latest/Novo-Plano-de-Acao.html) | + +![Lista de planos de ação](../design-refs/latest/Planos-de-Acao.png) +![Form de novo plano de ação](../design-refs/latest/Novo-Plano-de-Acao.png) + +Como usar: + +- **Lista — adotar:** tabs de janela/status ("Próximos" default, "Todos", "Realizados", "Rascunhos"), filtros "Tipo de ação" e "Território", cards com badge de `kind` (Caminhada, Reunião de apoio, Porta a porta, Comício, Panfletagem — cada tipo com cor própria clara), badge de `status` (Confirmado verde, Planejado azul, Rascunho outline, Realizado cinza), data/hora + município, chip do Território de Identidade, "Resp: {nome}" e barra de progresso de tarefas ("2/5 tarefas"). O card de rascunho com "Data a definir" esmaecido é um bom estado para `startAt` pendente em rascunho — mas atenção: o plano define `startAt` obrigatório; se rascunho puder ficar sem data, registrar em "Questões em aberto". +- **Form — adotar:** seções "Informações básicas" (título, tipo, descrição opcional), "Data e horário" (data + início obrigatórios, término opcional com helper "Deixe em branco se a duração for indefinida"), "Território" (municípios multi-chip + território derivado automático — mesmo padrão de [`Formulario-Territorio.png`](../design-refs/latest/Formulario-Territorio.png), confirmando que o bloco nasce no modelo multi-município), "Pessoas responsáveis" (coordenadores com "+ Adicionar", responsável principal) e "Status inicial" (Planejado | Rascunho como radio cards). +- **Falta desenhar (não bloqueia):** o detalhe do plano com tabs "Visão geral / Tarefas / Atualizações" não veio nesta leva — seguir o padrão `NucleusTabNav` do detalhe do núcleo; o checklist de tarefas pode reusar o formato de linhas do design da lista. +- **Ajustar cores:** paleta antiga no HTML/PNG; implementar com tokens do tema `campaign`. A entrada "Agenda" do bottom nav só entra quando este domínio existir. + ## Contexto O roadmap lista "Eventos / presença e agenda de mobilização" como próximo ciclo da vertical `/campanha` (plano-arquitetura §4). Hoje a campanha só modela território (núcleo) e reporte (atualização); não há como planejar, escalar e acompanhar ações de campo — caminhadas, comícios, carreatas, panfletagens, reuniões de apoio, lançamentos, convenções, atos, entrevistas — nem ver o que vem a seguir. diff --git a/docs/plans/insight-alavancagem-chapa.md b/docs/plans/insight-alavancagem-chapa.md index 2f67f419..f3bb6c64 100644 --- a/docs/plans/insight-alavancagem-chapa.md +++ b/docs/plans/insight-alavancagem-chapa.md @@ -5,6 +5,10 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) — card "Insights do território", linha "Alavancagem da chapa: 22% · Da base Lula/Jerônimo ainda não convertida". Implementar como um card do stack `NucleusInsights.tsx` ([baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), com os tokens claros do tema `campaign` em vez da paleta antiga do HTML/PNG. + ## Contexto Solla apoia a chapa principal do PT (Lula para presidente, Jerônimo para governador, ambos nº 13). Os votos que Lula e Jerônimo receberam em 2022 numa geografia são o **teto natural do PT** no local — um piso de simpatia partidária que a candidatura de Solla pode capturar como dobradinha. Com o baseline TSE 2022 (ver [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), podemos medir quanto da base da chapa a estimativa do núcleo já captura e quanto ainda falta — meta implícita de alavancagem. diff --git a/docs/plans/insight-classificacao-territorial.md b/docs/plans/insight-classificacao-territorial.md index 316ffb91..1393d858 100644 --- a/docs/plans/insight-classificacao-territorial.md +++ b/docs/plans/insight-classificacao-territorial.md @@ -5,6 +5,10 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) — card "Insights do território", linha "Território de defesa · Base sólida — prioridade: manter engajamento" com chip de classificação à direita (`Defesa` em verde). Os quatro estados usam pares de badge do tema `campaign`: defesa = verde, ataque = contorno vermelho, indecisa = âmbar, perdida = cinza. Implementar como um card do stack `NucleusInsights.tsx` ([baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), ajustando a paleta antiga do HTML/PNG para os tokens claros. + ## Contexto A literatura de territorialização eleitoral (Politipédia AVM, OPUS, Seja Eleito) classifica cada território em quatro zonas operacionais — **defesa** (voto histórico favorável, meta: manter), **ataque** (desfavorável mas relevante, meta: virar/reduzir margem), **indecisa** (pulverizada, baixa rejeição, meta: consolidar) e **perdida** (desfavorável e elástica, meta: minimizar perda) — para alocar esforço de forma proporcional ao retorno. Hoje o `/campanha` não classifica núcleos; com o baseline TSE 2022 (ver [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)) podemos derivar uma primeira classificação a partir do histórico. diff --git a/docs/plans/insight-inteligencia-competitiva.md b/docs/plans/insight-inteligencia-competitiva.md index e0681a53..6c65b699 100644 --- a/docs/plans/insight-inteligencia-competitiva.md +++ b/docs/plans/insight-inteligencia-competitiva.md @@ -5,6 +5,10 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) — card "Insights do território", linha "Mais votado aqui em 2022: Dep. Fulano (PP) · Solla ficou em 4º lugar · 2.100 votos à frente"; a linha "Mais votado aqui em 2022" do bloco de baseline também alimenta este insight. Implementar como um card do stack `NucleusInsights.tsx` ([baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), com os tokens claros do tema `campaign` em vez da paleta antiga do HTML/PNG. + ## Contexto Saber onde Solla foi bem é só metade; a outra é saber **quem o superou localmente** e por quanto. O baseline TSE 2022 (ver [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)) guarda o conjunto completo de candidatos por geografia, com flag de eleito — podemos dizer, por núcleo, quem foi o mais votado para deputado federal ali em 2022, qual a margem sobre Solla, e em que colocação Solla ficou. É inteligência competitiva: onde há adversário forte a desmontar e onde Solla já é o referencial. diff --git a/docs/plans/insight-mobilizacao-brancos-nulos.md b/docs/plans/insight-mobilizacao-brancos-nulos.md index 0e012e7a..f6d9cf12 100644 --- a/docs/plans/insight-mobilizacao-brancos-nulos.md +++ b/docs/plans/insight-mobilizacao-brancos-nulos.md @@ -5,6 +5,10 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) — card "Insights do território", linha "Oportunidade de mobilização: 142 brancos/nulos + 680 abstenções = 822 votos possíveis". Implementar como um card do stack `NucleusInsights.tsx` ([baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), com os tokens claros do tema `campaign` em vez da paleta antiga do HTML/PNG. + ## Contexto Em 2022, parte significativa dos eleitores aptos de cada geografia não gerou voto útil: **abstenções** (não compareceu), **votos em branco** e **votos nulos** (compareceu mas não votou em candidato válido). Esses eleitores são potencial de mobilização — gente que, bem engajada, pode virar voto. O baseline TSE 2022 (ver [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)) traz `electionTally.abstencoes`, `votosBranco` e `votosNulo` por município+zona; hoje o `/campanha` não os usa. diff --git a/docs/plans/insight-taxa-conversao.md b/docs/plans/insight-taxa-conversao.md index 827f5b88..0072433f 100644 --- a/docs/plans/insight-taxa-conversao.md +++ b/docs/plans/insight-taxa-conversao.md @@ -5,6 +5,10 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Baseline-Eleitoral-2022.png`](../design-refs/latest/Baseline-Eleitoral-2022.png) — card "Insights do território", primeira linha: "Taxa de conversão: 18% do eleitorado apto · 850 votos / 4.700 eleitores aptos" (ícone + veredito de uma linha + números de apoio). Implementar como um card do stack `NucleusInsights.tsx` (arquitetura definida em [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), com os tokens claros do tema `campaign` em vez da paleta antiga do HTML/PNG. + ## Contexto Com o baseline TSE 2022 importado (ver [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md)), temos `electionTally.aptos` (eleitores aptos) por município+zona. A estimativa confirmada do núcleo (`confirmedVoteEstimate`) hoje só é comparada com o voto histórico de Solla (Gap vs 2022). Falta medir a estimativa contra o **tamanho do eleitorado apto** da geografia — ou seja, qual % do eleitorado potencial da zona a estimativa representa. É o indicador que separa "reduto consolidado" de "oportunidade de crescimento", segundo a literatura de estratégia eleitoral. diff --git a/docs/plans/notifications.md b/docs/plans/notifications.md index 85a1c4fd..3ad28d51 100644 --- a/docs/plans/notifications.md +++ b/docs/plans/notifications.md @@ -5,6 +5,18 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Notificacoes-PWA.png`](../design-refs/latest/Notificacoes-PWA.png) · [`Notificacoes-PWA.html`](../design-refs/latest/Notificacoes-PWA.html) — **compartilhado com [pwa-campanha.md](pwa-campanha.md)** (o banner de instalação no rodapé pertence àquele plano). + +![Central de notificações + banner de instalação PWA](../design-refs/latest/Notificacoes-PWA.png) + +Como usar (parte deste plano — o sino): + +- **Adotar a estrutura:** sino no header com contagem; bottom sheet "Notificações" com "4 não lidas", ação "Marcar todas como lidas", itens com ícone por tipo de evento, título com o núcleo/entidade ("Estimativa aguardando confirmação — Núcleo Quilombo Rio das Rãs"), linha de detalhe (autor + ação), data relativa e ponto de não lida. Os quatro tipos exemplificados (estimativa aguardando confirmação, novo apoiador, novo reporte de campo, plano de ação precisa de atenção) são um bom ponto de partida para o enum `type` da collection `Notification` — dois deles dependem dos domínios C2/C3 existirem. +- **Falta desenhar (não bloqueia):** a tela de opt-in de push com o checkbox de consentimento LGPD (`campanha-notificacoes-push`) e a nota de limitação do iOS — seguir o padrão do bloco "Consentimento LGPD" da [`Apoiador-Ficha.png`](../design-refs/latest/Apoiador-Ficha.png). +- **Ajustar cores:** paleta antiga no HTML/PNG; implementar com tokens do tema `campaign` e componentes `Sheet`/`Drawer` existentes. + ## Contexto Coordenadores e lideranças precisam ser avisados de eventos da campanha (convite aceito, novo `nucleusUpdate`, estimativa aguardando confirmação) sem depender só do canal de WhatsApp. Este plano cobre dois canais de notificação dentro da vertical `/campanha`: diff --git a/docs/plans/overview-lista-nucleos.md b/docs/plans/overview-lista-nucleos.md index 5bddb9be..7973022b 100644 --- a/docs/plans/overview-lista-nucleos.md +++ b/docs/plans/overview-lista-nucleos.md @@ -5,6 +5,18 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos", linha 50) Responsável: — +## Referência visual (UX Pilot) + +Design: [`Lista-Nucleos-Overview.png`](../design-refs/latest/Lista-Nucleos-Overview.png) · [`Lista-Nucleos-Overview.html`](../design-refs/latest/Lista-Nucleos-Overview.html) + +![Overview da lista de núcleos](../design-refs/latest/Lista-Nucleos-Overview.png) + +Como usar: + +- **Adotar a estrutura:** header → busca → chips de filtro ativos → caption "Mostrando agregados de 14 núcleos filtrados" → blocos de overview → lista. O bloco "Estimativa de votos" (total grande + barra de "% com estimativa confirmada" + badge "3 sugestões pendentes") e os blocos compactos "Cobertura" e "Últimas atualizações" (autor, badge de tipo, data relativa, núcleo, "Ver todas") correspondem exatamente aos objetivos deste plano. +- **Fora deste plano:** o bloco "Baseline 2022" que aparece no design é a Fase 3 de [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md) — só ganha UI quando aquele plano for implementado (mantém-se a decisão "sem UI órfã"). O bottom nav com "Apoiadores" e "Agenda" antecipa os domínios C2/C3; as entradas só entram quando existirem. +- **Ajustar cores e código:** o HTML/PNG usa a paleta antiga (vermelho escuro `#8E0E23`, navy `#1B2B4B`, dourado `#C8874B`) e Tailwind via CDN. Implementar com os componentes shadcn existentes (`src/components/ui`) e os tokens do tema `data-theme='campaign'` (`src/app/(frontend)/styles.css`): fundo branco, primário `#C51414`, superfícies neutras claras. O header navy do design vira o shell claro atual; avatares com foto viram avatares de iniciais (padrão do app). + ## Contexto Hoje `/campanha/nucleos` é só cabeçalho + filtros + lista paginada (25/página). Não há agregados: o usuário precisa varrer a lista (ou ir ao dashboard `/campanha`) para sentir quanto daquela seleção tem estimativa confirmada, quantos votos somam, ou quais foram os últimos reportes. O dashboard geral já calcula esses agregados, mas para **todos** os núcleos ativos — não respeita os filtros de território/cobertura/estimativa da lista. diff --git a/docs/plans/pwa-campanha.md b/docs/plans/pwa-campanha.md index c44dee8a..b93191a0 100644 --- a/docs/plans/pwa-campanha.md +++ b/docs/plans/pwa-campanha.md @@ -5,6 +5,17 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos", linha 62) Responsável: — +## Referência visual (UX Pilot) + +Design: [`Notificacoes-PWA.png`](../design-refs/latest/Notificacoes-PWA.png) · [`Notificacoes-PWA.html`](../design-refs/latest/Notificacoes-PWA.html) — **compartilhado com [notifications.md](notifications.md)** (a central de notificações pertence àquele plano). + +![Banner de instalação PWA no rodapé](../design-refs/latest/Notificacoes-PWA.png) + +Como usar (parte deste plano — o banner de instalação no rodapé): + +- **Adotar o conteúdo:** banner fixo inferior com ícone do app, título "Instale o app da campanha", subtítulo "Acesse mais rápido e receba avisos", botão "Instalar" e X de dispensa — exatamente o `InstallPwaToast` da seção "Toast de instalação" (Android chama `deferredPrompt.prompt()`; iOS abre o passo a passo no Drawer; X grava `sessionStorage`). +- **Ajuste:** o plano implementa isso via `` (sonner) já montado, não como barra fixa custom — usar o design como referência de conteúdo/hierarquia, não de posicionamento exato. Cores do design (navy) viram os tokens claros do tema `campaign`. + ## Contexto A vertical `/campanha` é a ferramenta de campo da campanha: coordenadores e lideranças acessam o app pelo celular, muitas vezes em locais com conexão instável. Transformar `/campanha` em um PWA instalável (com ícone na tela inicial, splash e capacidade offline básica) melhora a experiência de campo e desbloqueia o push web no iOS (que só recebe push com o PWA instalado — ver [plans/notifications.md](./notifications.md)). diff --git a/docs/plans/territorio-multi-municipio-bairro.md b/docs/plans/territorio-multi-municipio-bairro.md index d3dc2014..41567b65 100644 --- a/docs/plans/territorio-multi-municipio-bairro.md +++ b/docs/plans/territorio-multi-municipio-bairro.md @@ -5,6 +5,19 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Formulario-Territorio.png`](../design-refs/latest/Formulario-Territorio.png) · [`Formulario-Territorio.html`](../design-refs/latest/Formulario-Territorio.html) — **compartilhado com [zonas-por-municipio.md](zonas-por-municipio.md)** (a mesma tela cobre os dois planos). + +![Formulário de território do núcleo](../design-refs/latest/Formulario-Territorio.png) + +Como usar (parte deste plano — bloco Território): + +- **Adotar a estrutura:** "Municípios" como combobox multi-seleção com chips removíveis + contagem "2 municípios selecionados"; "Territórios de Identidade" como chips derivados somente leitura com cadeado e legenda "Derivados dos municípios selecionados · não é possível editar" (materializa a regra 3 — `regions` rederivado no servidor); "Bairros" desabilitado com placeholder "Selecione municípios primeiro" e o aviso "Bairros exigem um único município selecionado" (regra 5). +- **Divergência a resolver na implementação:** no design o campo de bairros aparece desabilitado com 2 municípios e o aviso âmbar simultaneamente; a regra é: habilitar bairros somente com exatamente 1 município e limpar bairros ao passar para >1 (mostrar o aviso como helper text, não como erro). +- **Fora deste plano:** a seção "Zonas Eleitorais (TSE)" com chips "sugerida" pertence a [zonas-por-municipio.md](zonas-por-municipio.md). +- **Ajustar cores:** paleta antiga no HTML/PNG. Implementar com `StrictCombobox`/`NucleusTerritoryFields` existentes e os tokens do tema `campaign` (chips neutros claros; chips de município selecionado não precisam ser navy). + ## Contexto Hoje o território do Núcleo Eleitoral é modelado com campos **single-valued** em `src/collections/ElectoralNucleus.ts`: diff --git a/docs/plans/zonas-por-municipio.md b/docs/plans/zonas-por-municipio.md index b0f560b2..abfeb079 100644 --- a/docs/plans/zonas-por-municipio.md +++ b/docs/plans/zonas-por-municipio.md @@ -5,6 +5,19 @@ Atualizado em: 2026-07-17 Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") Responsável: — +## Referência visual (UX Pilot) + +Design: [`Formulario-Territorio.png`](../design-refs/latest/Formulario-Territorio.png) · [`Formulario-Territorio.html`](../design-refs/latest/Formulario-Territorio.html) — **compartilhado com [territorio-multi-municipio-bairro.md](territorio-multi-municipio-bairro.md)** (a mesma tela cobre os dois planos). + +![Formulário de território do núcleo — seção Zonas TSE](../design-refs/latest/Formulario-Territorio.png) + +Como usar (parte deste plano — seção "Zonas Eleitorais (TSE)"): + +- **Adotar a estrutura:** banner informativo "Zonas sugeridas pelo cadastro oficial do TSE — confira antes de salvar", lista de zonas como linhas com checkbox + número ("ZE 12"), badge "sugerida" e o município de origem como legenda — bom formato para o modo multi-município (união das zonas, cada uma rastreável ao município). +- **Divergências a resolver na implementação:** o design mostra checkboxes editáveis e um link "Adicionar zona manualmente" para todos os casos; o plano define 4 modos — no modo 1 (municípios sem bairro) as zonas são **somente leitura** (sem checkbox, sem adicionar manual); checkbox/edição vale para os modos 2 e 3 (restrito ao conjunto permitido); entrada manual livre só no modo 4. Usar o visual das linhas do design, trocando checkbox por badge estático no modo read-only. +- **Manter do design:** a zona desmarcada "ZE 7 (zona adicional)" ilustra bem o modo 2/3 (subconjunto permitido). +- **Ajustar cores:** paleta antiga no HTML/PNG; implementar com `TseZoneInput` + tokens do tema `campaign` (chips TSE `#F1F3F5`/`#3F4854`). + ## Contexto Hoje o campo **Zonas TSE** do formulário do núcleo (`TseZoneInput` em `src/components/campaign/TseZoneInput.tsx`) é sempre de preenchimento manual livre: o usuário digita números de 1 a 999, separados por vírgula/espaço/Enter, e o servidor só valida unicidade e intervalo (`parseTseZoneNumbers` em `src/utilities/nucleusUi.ts`, `validateNucleusTerritoryAndZones` em `src/collections/ElectoralNucleus.ts`, `validateGeographyAndZones` em `src/lib/schemas/nucleus.ts`). Não há nenhuma relação entre o município selecionado e as zonas informadas — o usuário precisa saber (ou adivinhar) quais zonas cobrem aquele município. diff --git a/docs/roadmap.md b/docs/roadmap.md index 9abb2785..94db1bbe 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -48,6 +48,26 @@ O MVP de Núcleos está **entregue em código** (ondas 1–8 + refactors; commit MVP de território + reporte implementado e enviado (ondas 1–8 + refactors de composição/infra/fixtures): auth isolada `campaignUser` (`geral` / `coordenador` / `lideranca`), núcleos com slug canônico, designação de coordenador, lideranças, estimativas sugerir/confirmar com versão UUID, atualizações semanais, convites WhatsApp (`wa.me`, hash, uso único), dashboard e hardening. Território atual ainda é `region`/`city`/`neighborhood` unitários; multi-município permanece no item A1. Detalhes: [`.cursor/rules/projects/nucleos-eleitorais.mdc`](../.cursor/rules/projects/nucleos-eleitorais.mdc). +### Referências de design (UX Pilot, 2026-07-18) + +Os designs gerados pelo UX Pilot para os próximos ciclos estão em [`docs/design-refs/latest/`](design-refs/latest/) (pares `.png` + `.html` com o mesmo nome). **A UX/estrutura é a referência a seguir; a paleta não é** — os arquivos usam a paleta antiga (vermelho escuro `#8E0E23`, navy `#1B2B4B`, dourado `#C8874B`); toda implementação usa os tokens claros do tema `data-theme='campaign'` (`src/app/(frontend)/styles.css`: fundo branco, primário `#C51414`, superfícies neutras). Cada plano detalha o uso na sua seção "Referência visual (UX Pilot)". + +| Item do roadmap | Design | Plano com instruções | +| ------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B1 Overview da lista de núcleos | `Lista-Nucleos-Overview` | [overview-lista-nucleos.md](plans/overview-lista-nucleos.md) | +| C1 Compartilhar página | `Compartilhar-Nucleo` | [compartilhar-pagina.md](plans/compartilhar-pagina.md) | +| A1 Território multi-município/bairro | `Formulario-Territorio` (bloco Território) | [territorio-multi-municipio-bairro.md](plans/territorio-multi-municipio-bairro.md) | +| A2 Zonas TSE por município | `Formulario-Territorio` (seção Zonas TSE) | [zonas-por-municipio.md](plans/zonas-por-municipio.md) | +| A3/A4 Baseline TSE 2022 + Gap vs 2022 | `Baseline-Eleitoral-2022` (+ bloco "Baseline 2022" em `Lista-Nucleos-Overview`) | [baseline-eleitoral-tse.md](plans/baseline-eleitoral-tse.md) | +| A5 Insights (5 planos) | `Baseline-Eleitoral-2022` (card "Insights do território", uma linha por insight) | [conversão](plans/insight-taxa-conversao.md) · [classificação](plans/insight-classificacao-territorial.md) · [alavancagem](plans/insight-alavancagem-chapa.md) · [mobilização](plans/insight-mobilizacao-brancos-nulos.md) · [competitiva](plans/insight-inteligencia-competitiva.md) | +| C2 Cadastro nominal de apoiadores | `Apoiadores-Lista`, `Apoiador-Ficha`, `Importar-CSV-Apoiadores` | [cadastro-nominal-apoiadores.md](plans/cadastro-nominal-apoiadores.md) | +| C3 Eventos / agenda de mobilização | `Planos-de-Acao`, `Novo-Plano-de-Acao` | [eventos-agenda-mobilizacao.md](plans/eventos-agenda-mobilizacao.md) | +| D2 Notificações (sino) | `Notificacoes-PWA` (central de notificações) | [notifications.md](plans/notifications.md) | +| D1 PWA `/campanha` | `Notificacoes-PWA` (banner "Instale o app da campanha") | [pwa-campanha.md](plans/pwa-campanha.md) | +| C5 Operação dia D / GOTV | `Dia-D-GOTV` | sem plano ainda — o design é a primeira materialização do item (check-off de apoiadores por seção/zona, progresso "62% da base", filtro "Ainda não confirmados", estado "Sincronizado" offline-tolerante) | + +**Sem design nesta leva** (encomendar na próxima rodada ou desenhar na implementação): A6 dobradinha 2026, B2/B3/B4 mapa da Bahia, C4 demandas, fill-ins (visitados recentemente, listas globais, reset de senha). O detalhe do plano de ação (tabs Visão geral/Tarefas/Atualizações) e a tela de opt-in de push também não vieram — os planos correspondentes indicam o padrão a seguir. + ### Grafo de dependências Setas cheias = dependência dura; tracejadas = dependência suave (melhora, não bloqueia). @@ -149,7 +169,7 @@ Itens sem seta de entrada (**paralelizáveis a qualquer momento**): A1, A3, B1, | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | 15 | A6 Insight dobradinha 2026 | [detalhes](plans/insight-dobradinha-2026.md) | A4 + TSE publicar candidaturas 2026 (externo, após 15/08) + taxonomia de alinhamento (produto) | | 16 | B4 Camada de zonas TSE no mapa | ciclo seguinte do [plano do mapa](plans/mapa-bahia-geometrias.md) | A2 + B3 | -| 17 | C5 **Operação dia D / GOTV** _(item proposto nesta revisão — validar com produto)_: confirmação de comparecimento da base nominal em 04/10 (lista de apoiadores por núcleo/zona com marcação "confirmou que vai votar / votou", visão de cobertura para a coordenação). É o uso final da base construída em C2; a literatura de campanha trata a mobilização do dia como onde eleições apertadas se decidem. Sem plano ainda. | — | C2 | +| 17 | C5 **Operação dia D / GOTV** _(item proposto nesta revisão — validar com produto)_: confirmação de comparecimento da base nominal em 04/10 (lista de apoiadores por núcleo/zona com marcação "confirmou que vai votar / votou", visão de cobertura para a coordenação). É o uso final da base construída em C2; a literatura de campanha trata a mobilização do dia como onde eleições apertadas se decidem. Sem plano ainda. | design: [`Dia-D-GOTV`](design-refs/latest/Dia-D-GOTV.png) | C2 | | 18 | Congelamento: a partir de ~20/09, só correção de bug e dados; nada de migration arriscada perto do dia D. | — | — | **Fill-ins (qualquer janela, quando houver folga; nenhum bloqueia nada):**