Replace the delivery diary with open items and windows, and sync AGENTS, notebook, README, and plan pointers with provisional Onda 0 Consent hold.
17 KiB
Roadmap — Teqo
Atualizado em: 2026-07-19 (janela 1 vigente; foco: Onda 0 + base operacional; último compile)
Registro canônico dos próximos planos e débitos. Histórico de entregas: resumo abaixo + planos em docs/plans/ + notebook .cursor/rules/projects/nucleos-eleitorais.mdc.
Âncoras do calendário eleitoral 2026 (Res. TSE 23.760/2026)
| Data | Marco | Consequência para o produto |
|---|---|---|
| 20/07–05/08 | Convenções partidárias | Estrutura de núcleos/coordenadores deve estar operando agora |
| 15/08 | Prazo final de registro de candidaturas | TSE publica candidaturas 2026 → destrava o insight de dobradinha (A6) |
| 16/08 | Início da propaganda eleitoral (rua e internet) | Base nominal, baseline e agenda precisam estar em produção antes desta data |
| 09–23/10 | Propaganda gratuita rádio/TV | Reta final; congelar mudanças arriscadas no app |
| 04/10 | 1º turno | Operação do dia D (GOTV) — confirmação de comparecimento da base nominal |
| 25/10 | Eventual 2º turno | Chapa majoritária (Lula/Jerônimo); Solla decidido no 1º turno |
Princípios e decisões travadas
- Ownership de audiência e portabilidade de dados; módulos reutilizáveis; default seguro com access control. (README)
- Um único app Next.js: site
(frontend), admin(payload),/campanha(campaign). Sem serviço Rust separado. (AGENTS.md) - Hospedagem Vercel; doações só CTA → QueroApoiar. (AGENTS.md)
- Pessoa =
Contact+ collections de junção. Núcleo ≠ Zona TSE. (AGENTS.md / notebook) - Sem disparo em massa por WhatsApp (Res. TSE 23.610 art. 33 + política Meta); mobilização orgânica. (cadastro-nominal)
Onda 0 — caminho crítico para dados reais
Engenharia de núcleos / C2 / C3 / baseline / Trilha E (E1–E3) / PWA já está em main. Textos provisórios de Consent + /privacidade já provisionados (onda-0.md). O que ainda falta para PII real:
- Lote jurídico final (assessoria eleitoral) — substituir provisórios:
lideranca-autopreenchimento,apoiador-cadastro,apoiador-intencao-voto,campanha-notificacoes-push+ Aviso de Privacidade + avaliação RIPD. Hold de titulares reais até lá. - Smoke pós-deploy —
NEXT_PUBLIC_SITE_URLHTTPS, login/campanha, núcleo de teste; checklist no AGENTS.md. - Ativação com dados reais assim que (1) liberar.
- Onboarding do time (
geral/coordenador, primeiros núcleos, treinamento de campo).
O0+ (escala/DRY pós-Onda 0) não bloqueia jurídico nem smoke — plano.
Já entregue (resumo)
- Núcleos MVP + Ciclo 2 — auth/
campaignUser, território A1/A2, baseline A3/A4, overview B1, share C1, PWA D1, geometrias B2. - Operação — C2 (eng. pronta; prod. ↔ Onda 0), C3 agenda, C6–C9 escala/DRY de apoiadores e planos.
- Trilha E (parcial) — E1 metas/prioridade + E3 dobradinhas/encaminhamentos manuais; E2 série TSE 2014/2018 + tendência. Faltam E4–E7.
- Fill-ins — Visitados recentemente; Reset senha + foto de perfil; Onda 0 eng. (Consent provisório +
/privacidade).
Próximos — Campanha (/campanha)
Por trilha (só abertos)
- A — A5 Insights (conversão / classificação / alavancagem+virada / mobilização / competitiva); A6 Dobradinha 2026 (após TSE candidaturas); A7 Escala/DRY pós-A4; A8 Perfis eleitorado IBGE.
- B — B3 Mapa Leaflet nas superfícies (mapa); B4 Camada de zonas TSE no mapa; B5 Escala/DRY pós-B2 (lazy geometrias / cache CLI).
- C — C4 Demandas; C5 Operação dia D / GOTV (proposto — sem plano; design
Dia-D-GOTV); C10 Escala/DRY pós-C9; C11 Escala/DRY pós-C7. - D — D2 Notificações (push + sino; push ↔ chave jurídica).
- E — E4 Import único da planilha; E5 Salvador por bairro (futuro); E6 Escala/DRY pós-E1+E3; E7 Escala/DRY pós-E2.
- Débitos / fill-ins abertos — O0+; VR+; RS+; Field Desk polish (em branch — PRODUCT.md / DESIGN.md); FD+; FD2; listas globais (sem plano); higiene PascalCase (notebook).
Referências de design (só itens abertos com ref)
Os designs UX Pilot estão em docs/design-refs/latest/. UX/estrutura é referência; a paleta não — usar tokens data-theme='campaign'.
| Item do roadmap | Design | Plano |
|---|---|---|
| A5 Insights (5) | Baseline-Eleitoral-2022 (card Insights) |
conversão · classificação · alavancagem · mobilização · competitiva |
| A7 Escala/DRY pós-A4 | — | escala-dry-pos-a4.md |
| A8 Perfis eleitorado IBGE | — | perfil-eleitorado-ibge.md |
| B3/B4/B5 Mapa | — (encomendar ou desenhar na implementação) | mapa-bahia-geometrias.md · B5 |
| C4 Demandas | — | demandas-campanha.md |
| C5 Dia D / GOTV | Dia-D-GOTV |
sem plano ainda |
| C10 / C11 Escala | — | C10 · C11 |
| D2 Notificações | Notificacoes-PWA (central) |
notifications.md |
| E4–E7 Mapa de projeção | seguir Baseline-Eleitoral-2022 / Lista-Nucleos-Overview |
mapa-projecao-municipios.md · E6 · E7 |
| O0+ / VR+ / RS+ / FD+ / FD2 | — | O0+ · VR+ · RS+ · FD+ · FD2 |
Sem design nesta leva: A6, B3/B4, C4 detalhe, E4–E5, fill-ins (listas globais).
Grafo de dependências (abertos + predecessores mínimos)
Setas cheias = dependência dura; tracejadas = suave. Nós ✓ só aparecem se ainda são dep de algum aberto.
flowchart TD
subgraph Onda0["Onda 0 — produção"]
JUR["Lote jurídico final<br/>(Consent + privacidade + RIPD)"]
O0DRY["O0+ Escala e DRY pós-Onda 0"]
end
subgraph Preds["Entregues (deps)"]
A4["A4 Baseline + Gap ✓"]
B1["B1 Overview ✓"]
B2["B2 Geometrias ✓"]
C2["C2 Cadastro nominal ✓"]
C3["C3 Agenda ✓"]
C7["C7 Escala pós-C3 ✓"]
C9["C9 Escala pós-C8 ✓"]
D1["D1 PWA ✓"]
E1["E1 Metas + prioridade ✓"]
E2["E2 Série + tendência ✓"]
E3["E3 Dobradinhas manuais ✓"]
end
subgraph TrilhaA["Trilha A"]
A7["A7 Escala/DRY pós-A4"]
A5["A5 Insights"]
A6["A6 Dobradinha 2026"]
A8["A8 Perfis IBGE"]
end
subgraph TrilhaB["Trilha B"]
B5["B5 Escala/DRY pós-B2"]
B3["B3 Mapa Leaflet"]
B4["B4 Zonas TSE no mapa"]
end
subgraph TrilhaC["Trilha C"]
C10["C10 Escala/DRY pós-C9"]
C11["C11 Escala/DRY pós-C7"]
C4["C4 Demandas"]
C5["C5 Dia D / GOTV"]
C2prod["C2 dados reais"]
end
subgraph TrilhaD["Trilha D"]
D2["D2 Notificações"]
end
subgraph TrilhaE["Trilha E"]
E6["E6 Escala/DRY pós-E1+E3"]
E7["E7 Escala/DRY pós-E2"]
E4["E4 Import planilha"]
E5["E5 Salvador por bairro"]
end
A4 --> A7
A4 --> A5
A4 --> A6
A7 -.mesmo loader.-> A5
B2 -.codarea.-> A8
TSE2026["TSE candidaturas 2026<br/>(após 15/08)"] --> A6
B1 --> B3
B2 --> B3
B2 --> B5
B5 -.lazy geometrias.-> B3
A4 -.coroplético.-> B3
B3 --> B4
C9 --> C10
C7 --> C11
C10 -.forms DRY.-> C11
C3 -.relação opcional.-> C4
JUR --> C2prod
C2 --> C2prod
C2 --> C5
D1 --> D2
JUR -.chave push.-> D2
E1 --> E6
E2 --> E7
E1 --> E4
E3 --> E4
E6 -.perf lista.-> E4
E7 -.int loader.-> E4
E2 -.votacao_secao.-> E5
E1 -.metas mapa.-> B3
E2 -.classe cor.-> B3
Paralelizáveis a qualquer momento: O0+, VR+, RS+, FD+ / FD2 (após polish Field Desk), listas globais, PascalCase.
Sequência por janela (só pendentes)
Janela 1 — agora → 05/08 (convenções): produção com hold de PII.
| Ordem | Item | Plano | Depende de | Paralelizável com |
|---|---|---|---|---|
| 1 | Onda 0 (lote jurídico final + smoke + hold PII real) | onda-0.md | engenharia entregue | tudo |
Janela 2 — 05/08 → 16/08 (pré-propaganda): base nominal + escala restante.
| Ordem | Item | Plano | Depende de | Paralelizável com |
|---|---|---|---|---|
| 2 | C2 dados reais (Consent keys + aprovação) | cadastro-nominal-apoiadores.md | Onda 0 jurídico | C10, C11, E6, E7 |
| 3 | C10 Escala/DRY pós-C9 (cortável se base pequena) | escala-dry-pos-c9.md | C9 ✓ | C11, E6, E7 |
| 4 | C11 Escala/DRY pós-C7 (cortável se agenda pequena) | escala-dry-pos-c7.md | C7 ✓ | C10, E6, E7 |
| 5 | E6 Escala/DRY pós-E1+E3 (cortável se poucos núcleos) | escala-dry-pos-e1.md | E1+E3 ✓ | E7, C10, A7 |
| 6 | E7 Escala/DRY pós-E2 (Fase 2 int preferível antes de E4) | escala-dry-pos-e2.md | E2 ✓ | E6, A7, E4 |
Janela 3 — 16/08 → set (campanha de rua): inteligência, mapa, engajamento.
| Ordem | Item | Plano | Depende de | Paralelizável com |
|---|---|---|---|---|
| 7 | E4 Import único da planilha | mapa-projecao-municipios.md | E1 ✓ + E3 ✓ (suave: E6 F1, E7 F2) | A5, A7, A8, B3, B5, C4, D2 |
| 8 | A5 Insights (5, paralelizáveis entre si) | conversão · classificação · alavancagem · mobilização · competitiva | A4 ✓ | A7, A8, B3, B5, C4, E4, D2 |
| 9 | A8 Perfis eleitorado IBGE (cortável: manuais já existem) | perfil-eleitorado-ibge.md | A1 ✓ (suave: B2 ✓) | A5, A7, B3, B5, C4, E4 |
| 10 | A7 Escala/DRY pós-A4 | escala-dry-pos-a4.md | A4 ✓ | A5, A8, B3, B5, C4, E4 |
| 11 | B3 Mapa Leaflet | mapa-bahia-geometrias.md | B1 ✓ + B2 ✓ (suave: A4, E1/E2, B5 F1) | A5, A7, A8, B5, C4, E4 |
| 12 | B5 Escala/DRY pós-B2 | escala-dry-pos-b2.md | B2 ✓ (F1 c/ B3) | A5, A7, A8, B3, C4, E4 |
| 13 | C4 Demandas | demandas-campanha.md | A1 ✓ (suave: C3) | A5, A7, A8, B3, B5, E4 |
| 14 | D2 Notificações (push + sino) | notifications.md | D1 ✓ + chave push Onda 0 | A5, A7, A8, B3, B5, C4, E4 |
Janela 4 — set → 04/10 (reta final): dobradinha, dia D, estabilização.
| Ordem | Item | Plano | Depende de |
|---|---|---|---|
| 15 | A6 Insight dobradinha 2026 | insight-dobradinha-2026.md | A4 ✓ + TSE candidaturas 2026 (após 15/08) + taxonomia produto |
| 16 | B4 Camada de zonas TSE no mapa | mapa-bahia-geometrias.md | A2 ✓ + B3 |
| 17 | C5 Operação dia D / GOTV (validar com produto; sem plano) | design Dia-D-GOTV |
C2 (suave: escala C6+) |
| 18 | Congelamento ~20/09: só bugfix + dados. E5 pós-eleição. | — | — |
Fill-ins abertos
- O0+ Escala/DRY pós-Onda 0 — escala-dry-pos-onda0.md
- VR+ Escala/DRY pós-visitados — escala-dry-pos-visitados-recentemente.md
- RS+ Escala/DRY pós-reset senha/perfil — escala-dry-pos-reset-senha-perfil.md
- Field Desk polish — em branch (
PRODUCT.md/DESIGN.md) - FD+ Escala/DRY pós-Field Desk — escala-dry-pos-field-desk.md
- FD2 UX Field Desk pós-critique — field-desk-ux-pos-critique.md
- Listas globais (lideranças, atualizações, territórios) — sem plano detalhado
- Higiene PascalCase dos componentes legados — notebook Núcleos
Cortes seguros / não cortáveis
Cortáveis (se o prazo apertar): E5; B4; B5 F2; E4 (campos E1/E3 à mão); A8; E7 F1/F3 (manter F2 antes de E4); E6 F2–F4 (preferir F1 se lista lenta); A7 F2–F3; B3 (levar B5 F1 junto se entrar); C4; D2 push (manter sino); C10 / C11 (se base/agenda pequena); O0+ F4–5; VR+ / RS+ / FD+ Fases 3–5; FD2 Fase 5.
Preferir manter se houver uso real: C10 Fase 1 (access dedup); C11 Fases 2–3 (loaders/selects); O0+ Fase 1; RS+ Fase 1; E6 Fase 1; E7 Fase 2; A7 F1 (antes de A5/B3 se I/O do baseline doer).
Não cortáveis: Onda 0 jurídico; C2 dados reais (quando liberado); C3 agenda e A4/E1+E3 já entregues — base legal, base nominal, operação e paridade mínima com a planilha.
Bloqueadores atuais
| Item | Status | Fonte |
|---|---|---|
| Lote jurídico final LGPD (4 Consent + privacidade + RIPD) — provisórios já provisionados; PII real em hold | caminho crítico para dados reais | notebook; onda-0; cadastro-nominal; notifications |
RBAC em users (admin Payload) antes de abrir /admin a equipe maior |
pendente | AGENTS Known Gap #1 |
| Fluxos públicos hardcodam ID de Consent → migrar para chave estável | pendente | AGENTS Known Gap #2 |
Collection Pages + hero/copy da home editáveis |
pendente (não bloqueia /campanha) |
AGENTS Known Gap #3 |
Site público
Já entregue: post/tag (notícias), seed jorgesolla.com.br, cache posts; /privacidade (texto provisório Onda 0).
Próximos (não bloqueiam /campanha, exceto textos finais de privacidade ↔ Onda 0):
- Textos finais de privacidade + polish O0+ (escala-dry-pos-onda0.md)
Pagesinstitucional (bio, mandato, propostas) + home editável- Agenda/multimídia via links oficiais; CTA "Doar" → QueroApoiar
- Consent público por chave estável (Known Gap #2)
Admin Payload
rolesemusers+ access control real (Known Gap #1)- Seed reproduzível de
Consentpor chave (não por ID)
Plataforma white-label
- Fase 2 README: multi-tenant / marca por mandato — depois da eleição. (README Phase 2)
Fora de escopo (por enquanto)
- Serviço Rust separado; self-host/Coolify; doações in-app. (AGENTS.md)
- Núcleo = Zona TSE; PWA do site/
/admin; PostGIS no v1 do mapa. - WhatsApp Business API / disparo em massa; previsão estatística de votos neste ciclo.
Fontes
AGENTS.md— decisões travadas, Known Gaps, checklist.cursor/rules/projects/nucleos-eleitorais.mdc— status operacionalREADME.md— missão e Phase 2docs/plans/*.md— planos por itemdocs/sheets/*.xlsx— planilhas Mapa de projeção (estrutura de referência; dados eleitorais = TSE)- Res. TSE 23.760/2026 (calendário) · Res. TSE 23.610/2019 art. 33 · Politipédia AVM