diff --git a/docs/plans/cards-analytics-ui-design.html b/docs/plans/cards-analytics-ui-design.html new file mode 100644 index 00000000..e137c703 --- /dev/null +++ b/docs/plans/cards-analytics-ui-design.html @@ -0,0 +1,448 @@ + + + + + + + Design — S32 · Contadores de cards + + + +
+
+

Gate visual · S32

+

Cards na home da campanha

+

+ Um bloco compacto no resumo que responde somente quantos downloads cada modelo recebeu. + Sem rota, dashboard, total, porcentagem, tendência ou leitura de pessoas. +

+
+ interno · tokens shadcncontagens absolutasordem natural do catálogodownloads anônimos +
+
+ +
+

+ Cena 1 · Home interna 1280 · bloco com dados +

+

+ O bloco entra depois do resumo principal, sem competir com “Votos estimados”. Os números + abaixo são fictícios e existem apenas para validar largura e hierarquia. +

+
+
+ +
+
+

Visão geral

+

Resumo da campanha

+
+
+
+

Votos estimados

+ +
+
+
+ Cobertura por lideranças +
+
+
+
+
+
+
+
+
+

Cards

+

+ Downloads anônimos acumulados desde o lançamento. +

+
+ VALORES FICTÍCIOS DO GATE +
+
+
+
+ Card com seu nome +
+
123
+
+
+
+ Moldura quadrada +
+
89
+
+
+
+ Moldura vertical +
+
67
+
+
+
+ Time de você +
+
145
+
+
+
+ Time do estadual +
+
34
+
+
+
+ Minha colinha +
+
76
+
+
+

+ Os números contam downloads, não pessoas ou visitantes únicos. +

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

+ Cena 2 · Home interna mobile 390 · bloco com dados +

+

+ No mobile cada modelo vira uma linha compacta: rótulo à esquerda, contagem tabular à + direita. Não há carrossel escondendo modelos nem grid apertado. +

+
+
+
+
+ S +
+ Visão geral +
+ +
+
+
+
+

Votos estimados

+ +
+
+
+ Cobertura por lideranças +
+
+
+
+
+
+
+
+

Cards

+ EXEMPLO +
+

+ Downloads anônimos acumulados desde o lançamento. +

+
+
+
Card com seu nome
+
123
+
+
+
Moldura quadrada
+
89
+
+
+
Moldura vertical
+
67
+
+
+
Time de você
+
145
+
+
+
Time do estadual
+
34
+
+
+
Minha colinha
+
76
+
+
+

+ Os números contam downloads, não pessoas ou visitantes únicos. +

+
+
+
+
+ +
+

+ Cenas 3–4 · Estado vazio honesto · desktop + mobile +

+

+ Antes do primeiro evento, não se desenham seis zeros como se fossem uma comparação pronta. + O bloco explica o que surgirá e preserva o mesmo espaço sem gráfico ou CTA. +

+
+
+
+

Cards

+
+
+ +
+

Nenhum download ainda

+

+ Os contadores aparecem quando alguém baixar um card. +

+
+
+
+

+ A contagem será anônima e mostrará downloads por modelo, nunca pessoas. +

+
+
+
+
+ Visão geral +
+
+

Cards

+
+
+ ↓ +
+

Nenhum download ainda

+

+ Os contadores aparecem quando alguém baixar um card. +

+
+

+ A contagem será anônima e mostrará downloads por modelo, nunca pessoas. +

+
+
+
+
+ +
+

+ Anatomia aprovada do bloco +

+
+
+

Só seis modelos

+

+ Card com seu nome · Moldura quadrada · Moldura vertical · Time de você · Time do + estadual · Minha colinha. +

+
+
+

Só números absolutos

+

+ Sem porcentagem, total de “usos”, ranking, série, seta, gráfico ou tendência. +

+
+
+

Leitura honesta

+

+ “Downloads”, nunca pessoas, usuários ou visitantes únicos. Caption curta sempre + visível. +

+
+
+
+ + +
+ + diff --git a/docs/plans/cards-analytics.md b/docs/plans/cards-analytics.md new file mode 100644 index 00000000..ab78e632 --- /dev/null +++ b/docs/plans/cards-analytics.md @@ -0,0 +1,108 @@ +# S32 — Analytics dos cards personalizados: quantos e quais + +Status: rascunho +Atualizado em: 2026-09-23 +Issue: #1273 +Priority: P2 +Impeccable: B — encaixe no resumo da home interna (contadores por modelo), sem tela nova +Design UI: docs/plans/cards-analytics-ui-design.html +Appetite: ~0,5–1 dia eng (depois do C213) +Responsável: — + +## Intenção + +O funil de cards personalizados (S13/S14/S15 e os modelos novos de S30/S31) roda 100% no aparelho do visitante, sem conta e sem coletar nada sobre quem usa — decisão de privacidade que continua valendo. O efeito colateral é que a campanha não sabe se o funil é usado nem quais modelos circulam: o dono pediu "medidas de quantas pessoas estão usando e quais". Responder à pergunta útil não exige identificar ninguém — basta contar downloads por modelo, de forma anônima e agregada. O C213 (#1258) já desenha um mecanismo mínimo de eventos anônimos para a Central de Conteúdos; este item faz o card ser mais um assunto do mesmo mecanismo, nunca um segundo analytics. + +## Persona e fluxo + +- **Persona / contexto:** coordenação e assessoria (staff) na home interna `/campanha`, decidindo o que divulgar e em que modelo investir; quem gera o evento é o visitante anônimo do funil público. +- **Job principal:** ler, por modelo de card, quantos downloads aconteceram desde o lançamento, e decidir qual modelo divulgar/reforçar (e, nos modelos com escolha estadual, qual dobradinha está sendo promovida). +- **Fluxo desejado:** abre a home interna → vê o bloco compacto "Cards" com o contador de downloads de cada modelo, lado a lado → lê qual modelo puxa o uso do funil → decide reforçar, divulgar de novo ou aposentar um modelo. +- **Anti-goals de produto:** não é analytics de site (sem pageview, funil, origem); não é perfil de visitante (sem cookie, IP, user-agent, identidade ou rastreio); não é dashboard nem rota nova; não mede abertura de galeria, prévia ou nada dentro da foto/recorte local. + +### Esboço de fluxo (B) + +```text +[visitante baixa o PNG] → evento anônimo "Download do card" no mecanismo do C213 (model id + slug do estadual quando houver) +[staff] home interna → bloco "Cards" (contadores por modelo, lado a lado) → decide o que divulgar/reforçar +[falha na contagem] o download segue idêntico e imediato — contador a menos é aceitável +``` + +### Design UI (B) + +- Design UI (gate): `docs/plans/cards-analytics-ui-design.html` — cena do bloco compacto no resumo da home, com e sem dados, em desktop e mobile. + +## Objetivo e aceite + +- O download de qualquer card conta uma vez um evento anônimo "Download do card", com o model id do card; nos modelos de escolha estadual (S30/S31) o evento leva também o slug do estadual escolhido. +- A superfície interna mostra, por modelo, o contador absoluto acumulado desde o lançamento, lado a lado; sem índice único de "usos", sem %, sem série/tendência, sem funil/pageview. +- Honestidade do dado: os números medem downloads, não pessoas — a superfície não sugere visitantes únicos (impossível sem identidade) nem mistura as duas leituras. +- Não conta abertura da galeria nem prévia renderizada; só o download concluído (arquivo gerado e entregue ao visitante). +- Privacidade: evento estritamente anônimo e agregado — sem PII, sem IP persistido, sem cookie/identidade, sem user-agent, sem rastreio entre páginas ou entre modelos; nenhum `Consent` novo. +- Fail-soft: o download nunca é bloqueado nem atrasado pela contagem; falha no evento é invisível ao visitante; nada da foto ou do recorte local é tocado por telemetria. +- Mesmo mecanismo do C213 (#1258) — nenhuma collection/endpoint paralelo; sem o C213 entregue não há onde escrever nem onde ler. + +## Dados (intenção) + +- **Vou apresentar dados?** Sim, superfície neste item — contadores anônimos por modelo de card no resumo da home interna. +- **Decisões desbloqueadas:** + - Coordenação e assessoria: qual modelo de card divulgar/reforçar e se vale manter um modelo com pouca saída. + - Coordenação: qual dobradinha está sendo promovida nos modelos com escolha estadual (S30/S31) — o slug escolhido é o sinal. + - Coordenação: ler se o funil de cards como um todo está sendo usado (soma dos downloads por modelo — número de downloads, nunca de pessoas). +- **Forma:** _adiada ao plano de implementação_ — restrições: contagens absolutas por modelo, lado a lado e na ordem natural do catálogo; sem índice "usos", sem %, sem série/tendência, sem funil/pageview. + +## Dados da decisão (literais) + +- Um único pipeline anônimo de analytics — o do C213 (#1258); o card é um assunto do mesmo mecanismo, nunca uma collection/endpoint paralelo. Dependência dura do C213. +- Evento v1: "Download do card" — disparado uma vez quando o visitante baixa o PNG gerado; carrega o model id do card e, nos modelos por estadual (S30/S31), o slug do estadual escolhido. Abertura da galeria e render da prévia NÃO contam no v1. +- Contadores por modelo de card, lado a lado e absolutos; sem índice único de "usos", sem %, sem série/tendência, sem funil/pageview, sem ranking além da ordem natural dos contadores. +- Guardrail de honestidade: contagens anônimas medem downloads, não "pessoas"; sem identidade não existe visitante único — a superfície não pode sugerir isso. +- Superfície recomendada: bloco compacto "Cards" no resumo da home da campanha (precedente `CampaignHomeSummary`/`CampaignMetricStrip`, papéis de staff) — sem rota nova, sem dashboard. A comunicação (role `communicator`, cuja home é a vertical Comunicação) veria depois, pela própria vertical, se o produto pedir; a superfície do v1 é a home staff. +- Privacidade: sem PII, sem IP persistido, sem cookie/identidade, sem user-agent, sem rastreio entre páginas/modelos; sem `Consent` novo; estritamente anônimo e agregado. +- Fail-soft: o download nunca é bloqueado nem atrasado pelo contador — contagem a menos é aceitável, dado de visitante não. +- Os modelos que incluem escolha de estadual contam o mesmo evento de download com o slug do estadual (qual dobradinha está sendo promovida é uma decisão que a campanha quer). + +## Direção no codebase (hipótese) + +- **Áreas prováveis:** o caminho de download de `src/components/cards/CardComposer.tsx` (o evento sai daqui, sem bloquear), o catálogo `src/lib/cardModels.ts` como lista de modelos, e o resumo da home (`src/components/campaign/dashboard/CampaignHomeSummary.tsx`, hoje alimentado por `src/utilities/campaignDashboardData.ts`). +- **Precedente a olhar:** `docs/plans/central-conteudos-analytics.md` (C213 — o mecanismo, a agregação e o idioma de superfície), `src/components/campaign/shared/CampaignMetricStrip.tsx` (molde do bloco de contadores) e `src/collections/CampaignVoteSummarySnapshot.ts` (contagem agregada sem dashboard). +- **Risco de acoplamento:** a contagem é acessória — atraso ou falha do C213 não pode segurar o funil; nenhum identificador de visitante nasce do lado do card; nada de tocar na foto ou no recorte que roda no aparelho. + +## Dependências + +- **C213 (#1258)** — dura: o pipeline de eventos anônimos e o idioma de superfície interna precisam existir primeiro. +- **S30/S31** — suave: os modelos novos apenas somam model ids e slugs ao contador. + +## Fora de escopo + +- Segundo mecanismo de eventos, serviço de analytics (Umami/Plausible) ou retomada de `@vercel/analytics`; cookie, identidade, sessão, banner de consentimento ou `Consent` novo. +- Contar abertura de galeria, prévia renderizada, modelo escolhido no estúdio ou qualquer passo dentro do compositor; medir a foto ou o recorte local (a imagem nunca sai do aparelho e não é tocada por telemetria). +- Dashboard, rota `/campanha/cards`, gráfico, série/tendência, exportação, alerta, lista por visitante ou índice único de "usos". +- Visão da comunicação no v1 (follow-up registrado: pela vertical, se o produto pedir). + +## Rabbit holes de produto + +- **"Quero saber quantas pessoas usam".** Se alguém "só completar": cookie, session id, "visitante único" — métrica que não existe sem identidade. **Corte neste item:** contador de downloads, agregado, dito honestamente. +- **Virar dashboard de cards.** Se alguém "só completar": rota própria com gráfico, série e ranking. **Corte neste item:** bloco compacto na home staff, contadores absolutos por modelo. +- **Medir o funil inteiro.** Se alguém "só completar": pageview, modelo escolhido, prévia, abandono. **Corte neste item:** só o download; abertura, prévia e estúdio fora. +- **Identificar quem compartilha.** Se alguém "só completar": gravar o nome/foto do card ou inferir perfil pelo uso. **Corte neste item:** zero PII; a foto nunca sai do aparelho. +- **Segunda superfície "só para a comunicação".** Se alguém "só completar": bloco novo na vertical da comunicação no v1. **Corte neste item:** home staff agora; comunicação depois, pela vertical, se o produto pedir. + +## Questões em aberto (produto) + +- **Onde os contadores aparecem?** **Opções:** A) bloco compacto no resumo da home da campanha, staff (recomendado) | B) na lista de peças do C211, ao lado dos contadores por peça do C213 (força os cards a uma lista a que não pertencem) | C) rota própria `/campanha/cards` (rejeitada — superfície nova de dashboard; a doutrina do C213 evita). **Recomendação:** A. _(assumido — validar com produto)_ +- **O que conta?** **Opções:** A) só o download (recomendado — o momento em que o visitante leva o card) | B) download + modelo selecionado no estúdio (mede interesse x conversão, com mais ruído). **Recomendação:** A. _(assumido — validar com produto)_ +- **Granularidade:** A) acumulado por modelo desde o lançamento (recomendado no v1, espelha o C213) | B) janela de tempo (só se alguém pedir "o que está circulando agora"). **Recomendação:** A. _(assumido — validar com produto)_ + +## Referências + +- GitHub Issue #1258 (C213 — dependência dura) +- Design UI (gate): `docs/plans/cards-analytics-ui-design.html` +- `docs/plans/central-conteudos-analytics.md` — o mecanismo e a superfície que este item integra +- `src/components/campaign/dashboard/CampaignHomeSummary.tsx`, `src/components/campaign/shared/CampaignMetricStrip.tsx`, `src/collections/CampaignVoteSummarySnapshot.ts` — precedentes de superfície/rollup +- `src/components/cards/CardComposer.tsx`, `src/lib/cardModels.ts` — onde o download acontece e o catálogo de modelos +- `docs/plans/cards-time-de-voce.md`, `docs/plans/cards-estadual-dobradinha.md`, `docs/plans/cards-colinha.md` — os modelos que o contador separa + +## Self-score (shaping) + +5/5 — (1) fatia = um outcome verificável (download contado e contadores por modelo na home staff); (2) appetite ~0,5–1 dia cabe porque reusa o mecanismo do C213; (3) persona, job e aceite em linguagem de produto, com o guardrail de honestidade explícito; (4) direção no codebase é hipótese com precedentes abertos; (5) zero decisão dura de engenharia — shape da collection, endpoint e agregação ficam no C213/implementação. diff --git a/docs/plans/cards-colinha-ui-design-assets/marca-negativa-completa.png b/docs/plans/cards-colinha-ui-design-assets/marca-negativa-completa.png new file mode 100644 index 00000000..00fc39c1 Binary files /dev/null and b/docs/plans/cards-colinha-ui-design-assets/marca-negativa-completa.png differ diff --git a/docs/plans/cards-colinha-ui-design-assets/modelo-colinha.jpeg b/docs/plans/cards-colinha-ui-design-assets/modelo-colinha.jpeg new file mode 100644 index 00000000..da706cb7 Binary files /dev/null and b/docs/plans/cards-colinha-ui-design-assets/modelo-colinha.jpeg differ diff --git a/docs/plans/cards-colinha-ui-design-assets/team-card-base.png b/docs/plans/cards-colinha-ui-design-assets/team-card-base.png new file mode 100644 index 00000000..6e7aceb7 Binary files /dev/null and b/docs/plans/cards-colinha-ui-design-assets/team-card-base.png differ diff --git a/docs/plans/cards-colinha-ui-design-assets/team-card-front.png b/docs/plans/cards-colinha-ui-design-assets/team-card-front.png new file mode 100644 index 00000000..e4177714 Binary files /dev/null and b/docs/plans/cards-colinha-ui-design-assets/team-card-front.png differ diff --git a/docs/plans/cards-colinha-ui-design.html b/docs/plans/cards-colinha-ui-design.html new file mode 100644 index 00000000..738c23f8 --- /dev/null +++ b/docs/plans/cards-colinha-ui-design.html @@ -0,0 +1,689 @@ + + + + + + + Design — S31 · Minha colinha + + + +
+
+

Gate visual · S31

+

Minha colinha

+

+ O militante escolhe o estadual e leva uma colinha 9:16 completa para mandar ou imprimir. + Cinco escolhas são fixas; a linha de deputado estadual recebe nome e cinco dígitos da + dobradinha. +

+
+ PNG 1080 × 19201280px + 390pxsem nome, foto ou uploadmodelo aprovado · arquivo do gate +
+
+ +
+

+ Cena 1 · Tile “Minha colinha” na galeria +

+

+ O sexto modelo mantém o mesmo tile clicável. No desktop, a seção usa seis colunas; no + celular, permanece no carrossel horizontal com uma pista do próximo/anterior. +

+
+
+
+ Card com
seu nome +
+
+ Moldura
quadrada +
+
+ Moldura
vertical +
+
+ Time de
você +
+
+ Time do
estadual +
+ +
+
+
+ +
+

+ Cena 2 · Estado inicial + seletor aberto · dialog desktop +

+

+ Sem estadual, a linha correspondente fica vazia e o download não compete com a escolha. O + mesmo seletor de S30 oferece busca, teclado e lista rolável dos 53 nomes. +

+
+
+ +
+
+ +
+

+ Cena 3 · Resultado completo 9:16 · desktop 1280 +

+

+ A prévia fica grande o bastante para conferir todas as linhas. O topo abaixo compõe ativos + oficiais para o gate; a arte-mestre final ainda precisa ser produzida e aprovada. +

+
+
+
+
+ Foto do grupo da campanha +
+ Jorge Solla 1313 — Mais Saúde, Mais Futuro +
+
+ JORGE SOLLA 1313 com as marcas Lula 13, Jero 13, Wagner 130 e Rui 133 +
+
+ +
+
+
+ DEPUTADO
FEDERALJorge Solla +
+
+ 1313 +
+ CONFIRMA +
+
+
+ DEPUTADO
ESTADUALJULIO PINHEIRO +
+
+ 13999 +
+ CONFIRMA +
+
+
SENADORJaques Wagner
+
+ 130 +
+ CONFIRMA +
+
+
SENADORRui Costa
+
+ 133 +
+ CONFIRMA +
+
+
GOVERNADORJerônimo
+
13
+ CONFIRMA +
+
+
PRESIDENTELula
+
13
+ CONFIRMA +
+
+
+
+
+

+ Minha colinha +

+

Pronta para levar com você

+

+ Confira o estadual escolhido. As demais escolhas já vêm preenchidas no modelo oficial. +

+ +
+

Linha conferida

+

+ DEPUTADO ESTADUAL · JULIO PINHEIRO · 13999 +

+
+ +

+ A escolha é processada neste aparelho. Nenhum nome, foto ou cadastro é solicitado. +

+
+
+
+ +
+

+ Cena 4 · Zoom do detalhe aprovado · deputado estadual +

+

+ Um dígito por caixa, cinco caixas, nome vermelho e CONFIRMA verde. Este recorte fixa a + hierarquia e o contraste em escala legível. +

+
+
+
+

DEPUTADO ESTADUAL

+

+ JULIO PINHEIRO +

+
+
+ 13999 +
+ CONFIRMA +
+
+
+ +
+

+ Cena 5 · Drawer mobile 390 · escolhido e pronto +

+

+ A colinha usa quase toda a largura útil e segue legível; a prévia rola, enquanto o CTA + fica isolado no rodapé. +

+
+
+
+
+
+
+

Minha colinha

+

Pronta para baixar

+
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ DEPUTADO
FEDERALJorge Solla +
+
+ 1313 +
+ CONFIRMA +
+
+
+ DEPUTADO
ESTADUALJULIO PINHEIRO +
+
+ 13999 +
+ CONFIRMA +
+
+
SENADORJaques Wagner
+
+ 130 +
+ CONFIRMA +
+
+
SENADORRui Costa
+
+ 133 +
+ CONFIRMA +
+
+
GOVERNADORJerônimo
+
+ 13 +
+ CONFIRMA +
+
+
PRESIDENTELula
+
+ 13 +
+ CONFIRMA +
+
+
+
+ +
+
+ +
+
+
+
+ + +
+ + diff --git a/docs/plans/cards-colinha.md b/docs/plans/cards-colinha.md new file mode 100644 index 00000000..a3768a39 --- /dev/null +++ b/docs/plans/cards-colinha.md @@ -0,0 +1,111 @@ +# S31 — Minha colinha: o estadual escolhido na colinha de voto + +Status: rascunho +Atualizado em: 2026-09-23 +Issue: #1272 +Priority: P1 +Impeccable: B — novo modelo no estúdio de cards existente com saída nova (colinha) e seletor de estadual +Design UI: docs/plans/cards-colinha-ui-design.html +Appetite: ~1–1,5 dia eng; um modelo novo e verificável no estúdio de cards existente +Responsável: — + +## Intenção + +O funil de cards (seção `#cards` da home + `/cards`) dá ao visitante cards para circular — nome, foto e "Time de você". Falta a peça que o cabo eleitoral leva para a rua: a **colinha de voto**, o papel com o número de cada cargo. O pedido do humano é auto-serviço: o visitante escolhe o estadual da mesma lista da dobradinha (S30) e recebe uma colinha 9:16 no modelo de referência, com a linha do estadual preenchida — nome de urna e os cinco dígitos, um por caixa — e as outras cinco escolhas fixas do voto. + +A referência é uma arte vertical 1080×1920 de fundo branco: topo com o lockup "MAIS SAÚDE MAIS FUTURO", a foto do grupo e a faixa vermelha JORGE SOLLA · DEPUTADO FEDERAL · 1313 (com as marcas menores LULA 13, JERO 13, WAGNER 130, RUI 133); linha legal vertical na borda esquerda; corpo com uma linha por cargo (rótulo escuro em caixa alta, nome em vermelho, dígitos em caixas brancas contornadas de preto e um selo verde "CONFIRMA"). É um modelo novo do estúdio de cards, não uma superfície nova. + +## Persona e fluxo + +- **Persona / contexto:** militante/eleitor no celular, prestes a pedir voto na rua ou no grupo; quer a colinha certa do seu estadual, pronta para imprimir ou mandar. +- **Job principal:** sair com a colinha completa — o estadual que ele apoia preenchido no meio das escolhas fixas — sem instalar nada, sem cadastro e sem digitar. +- **Fluxo desejado:** home ou `/cards` → escolhe `Minha colinha` → escolhe o estadual na lista da dobradinha → vê a prévia com a linha preenchida → baixa o PNG 1080×1920. +- **Anti-goals de produto:** segundo editor/estúdio, rota ou página por colinha, coleta de nome/foto do visitante, editor de linhas, upload, CMS. + +### Esboço de fluxo (B) + +```text +[home/#cards ou /cards] → [modelo "Minha colinha"] → [seletor do estadual (lista da dobradinha)] → [prévia 9:16 com a linha preenchida] → [baixar PNG] +``` + +### Design UI (B) + +- Design UI (gate): `docs/plans/cards-colinha-ui-design.html` +- Cenas: tile do modelo na galeria, seletor do estadual (busca e estado vazio), prévia completa 9:16 em desktop e mobile e o detalhe da linha preenchida (cinco dígitos nas cinco caixas + CONFIRMA). + +## Objetivo e aceite + +- O estúdio ganha o modelo `Minha colinha`; escolhido o estadual, a prévia mostra a linha do estadual preenchida (nome de urna + cinco dígitos, um por caixa) e as cinco linhas fixas intocadas; o PNG 1080×1920 (9:16) sai do mesmo estúdio dos cards atuais. +- 100% no aparelho: sem nome do visitante, sem foto, sem upload e sem análise de uso neste item (analytics é S32). +- O catálogo de estaduais é o de S30 (arte predefinida; slug, nome de urna e número): um estadual, uma linha; sem estadual escolhido não há prévia. +- Fidelidade ao modelo de referência: topo, linha legal vertical na borda esquerda e corpo de linhas seguem o desenho aprovado no gate. +- Escolha por toque e teclado, no idioma do seletor de S30; sem página/rota por colinha; a nota de privacidade existente permanece verdadeira. + +## Dados (intenção) + +- **Vou apresentar dados?** Não. +- **Decisões desbloqueadas:** N/A — nenhum dado é apresentado; medir uso da colinha é S32. +- **Forma:** _adiada ao plano de implementação_ — o catálogo de estaduais é conteúdo (arte + número), não análise. + +## Dados da decisão (literais) + +- ID `S31`; tipo `feature`; Priority `P1`; Impeccable `B — novo modelo no estúdio de cards existente com saída nova (colinha) e seletor de estadual`; Design UI `docs/plans/cards-colinha-ui-design.html`; slug `cards-colinha` (arquivo `docs/plans/cards-colinha.md`). +- Model id `colinha`; label de galeria `Minha colinha`. +- Saída PNG 1080×1920 (9:16), seguindo o modelo de referência, baixada do mesmo estúdio; sem nome do visitante, sem foto, sem upload — 100% no aparelho. +- Linhas fixas (conteúdo do template, não digitação do visitante), cada uma com o selo verde `CONFIRMA`: `DEPUTADO FEDERAL Jorge Solla — 1313`; `SENADOR Jaques Wagner — 130`; `SENADOR Rui Costa — 133`; `GOVERNADOR Jerônimo — 13`; `PRESIDENTE Lula — 13`. +- Linha preenchida: `DEPUTADO ESTADUAL — <5 dígitos>`, com os cinco dígitos dentro das cinco caixas, um por caixa; vem do catálogo compartilhado com S30. +- Modelo aprovado (arquivo exato entregue pelo humano, 2026-09-23): `docs/plans/cards-colinha-ui-design-assets/modelo-colinha.jpeg` (900×1600) — usar como referência canônica do layout (tile da galeria e conferência no gate); o preenchimento é o resultado (linha do estadual com nome de urna + 5 dígitos). +- Topo (arte-mestre) — **NEEDS ASSET**: lockup "MAIS SAÚDE MAIS FUTURO" + foto do grupo + faixa `JORGE SOLLA · DEPUTADO FEDERAL · 1313` com `LULA 13`, `JERO 13`, `WAGNER 130`, `RUI 133`; definida no design hi-fi e montada a partir do kit oficial (`public/campaign-kit/`, `public/cards/team-card-base.png`, `public/cards/team-card-front.png`). +- Linha legal vertical (borda esquerda): `FEDERAÇÃO BRASIL DA ESPERANÇA - FE BRASIL (PT-PC DO B - PV) | CNPJ CANDIDATO: 68.430.467/0001-05`. +- Catálogo compartilhado com S30: as 53 pastas de arte predefinida em `/home/fsolla/Downloads/DOBRADINHAS SITE-20260923T033020Z-1-001/DOBRADINHAS SITE/` (slug, nome de urna, número de 5 dígitos); dependência dura de S30 para o catálogo/assets commitados. +- Pipeline reaproveitado: `renderX → preview canvas → PNG download` — o mesmo motor único de prévia/export do estúdio. + +## Direção no codebase (hipótese) + +- **Áreas prováveis:** catálogo `src/lib/cardModels.ts`, roteiro/render `src/lib/cardRender.ts`, compositor `src/components/cards/CardComposer.tsx`, assets `public/cards/` e `public/campaign-kit/`. +- **Precedente a olhar:** S13/S14/S15 (`docs/plans/cards-personalizados-campanha-impl.md`, `docs/plans/cards-time-de-voce-impl.md`) e S30 (`docs/plans/cards-estadual-dobradinha.md`) — o seletor do estadual segue o idioma de escolha de S30. +- **Risco de acoplamento:** o `CardComposer` ramifica por `kind`; testes de unidade pinam os ids e o e2e falha em qualquer console error; a colinha não pode virar segundo editor nem mexer nos modelos existentes. + +## Dependências + +- S30 (`docs/plans/cards-estadual-dobradinha.md`) — catálogo e assets dos estaduais; dependência dura para o preenchimento da linha. +- NEEDS ASSET: arte-mestre do topo — definida no design hi-fi e construída a partir dos ativos oficiais (o pacote não existe no repo hoje). + +## Fora de escopo + +- Segundo editor/estúdio; rota ou página por colinha; CMS/coleção/migration. +- Nome do visitante ou "feito por você" (Questão 2); PDF A4/impressão em casa (Questão 1). +- Analytics de uso/abandono (S32); foto/recorte do visitante; upload ou processamento no servidor. +- Mudar o conteúdo das cinco linhas fixas; redesenhar os modelos existentes. + +## Rabbit holes de produto + +- **A colinha virar editor de voto.** Se alguém "só completar": reordenar/remover linhas e acrescentar cargos. **Corte neste item:** cinco linhas fixas + a linha do estadual. +- **A escolha do estadual virar "matching".** Se alguém "só completar": busca por município, perfil e recomendação. **Corte neste item:** uma lista no idioma de S30. +- **A arte do topo virar redesenho infinito.** Se alguém "só completar": recriar tipografia e foto em vez de usar o kit. **Corte neste item:** arte aprovada no gate a partir dos ativos oficiais. +- **Impressão/PDF no mesmo item.** Se alguém "só completar": entra diagramação A4 e margem de impressora. **Corte neste item:** só PNG 9:16; A4 vira item próprio se o produto pedir. + +## Questões em aberto (produto) + +- **Saída só 9:16 ou também PDF/A4 para imprimir?** **Opções:** A) PNG 1080×1920 9:16 (bate com a referência e com os stories) | B) também A4/impressão (escopo extra). **Recomendação:** A. _(assumido — validar com produto)_ +- **A colinha leva o nome do visitante ou "feito por você"?** **Opções:** A) não (a colinha é o produto) | B) linha opcional com o nome (escopo extra). **Recomendação:** A. _(assumido — validar com produto)_ +- **Onde o visitante escolhe o estadual?** **Opções:** A) mesmo idioma de seletor de S30 dentro do compositor | B) só um ponto de entrada próprio na galeria. **Recomendação:** A — um só fluxo, um só editor. _(assumido — validar com produto)_ + +## Referências + +- GitHub Issue #1272 +- Design UI (gate): `docs/plans/cards-colinha-ui-design.html` +- `docs/plans/cards-estadual-dobradinha.md` (S30 — catálogo e assets compartilhados) +- `src/lib/cardModels.ts`, `src/lib/cardRender.ts`, `src/components/cards/CardComposer.tsx`, `tests/e2e/frontend.e2e.spec.ts` +- `public/campaign-kit/README.md`, `public/cards/team-card-base.png`, `public/cards/team-card-front.png` +- `/home/fsolla/Downloads/DOBRADINHAS SITE-20260923T033020Z-1-001/DOBRADINHAS SITE/` — referência externa do catálogo (53 pastas) + +## Self-score (shaping) + +**5/5.** + +- Fatia = um outcome verificável (colinha baixável com a linha do estadual preenchida) e nada além. +- Appetite (~1–1,5 dia) declarado e a intenção cabe nele: um modelo novo em estúdio existente, sem fluxo novo. +- Persona, job e aceite em linguagem de produto; o anti-goal (editor de voto) está explícito. +- Direção no codebase é hipótese revisável; nenhuma signature, schema ou migration prescrita. +- Arte final, geometria e o seletor ficam para a implementação; o NEEDS ASSET é pendência de produto no gate. diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-base.png b/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-base.png new file mode 100644 index 00000000..830e3ac3 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-base.png differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-fotos.png b/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-fotos.png new file mode 100644 index 00000000..d5c58486 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/julio-fotos.png differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/modelo-time-de-voce-com-estadual.jpeg b/docs/plans/cards-estadual-dobradinha-ui-design-assets/modelo-time-de-voce-com-estadual.jpeg new file mode 100644 index 00000000..4e38c272 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/modelo-time-de-voce-com-estadual.jpeg differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/name-card-base.jpg b/docs/plans/cards-estadual-dobradinha-ui-design-assets/name-card-base.jpg new file mode 100644 index 00000000..dc2967d6 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/name-card-base.jpg differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-portrait-frame.png b/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-portrait-frame.png new file mode 100644 index 00000000..eaf97aec Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-portrait-frame.png differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-square-frame.png b/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-square-frame.png new file mode 100644 index 00000000..ad5ecc22 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/photo-square-frame.png differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design-assets/team-card-example.jpg b/docs/plans/cards-estadual-dobradinha-ui-design-assets/team-card-example.jpg new file mode 100644 index 00000000..5b35a875 Binary files /dev/null and b/docs/plans/cards-estadual-dobradinha-ui-design-assets/team-card-example.jpg differ diff --git a/docs/plans/cards-estadual-dobradinha-ui-design.html b/docs/plans/cards-estadual-dobradinha-ui-design.html new file mode 100644 index 00000000..ef95b202 --- /dev/null +++ b/docs/plans/cards-estadual-dobradinha-ui-design.html @@ -0,0 +1,660 @@ + + + + + + + Design — S30 · Time do estadual + + + +
+
+

Gate visual · S30

+

Time do estadual

+

+ O apoiador escolhe uma das 53 dobradinhas, digita como é chamado, envia uma foto de busto + e baixa o card com a arte oficial do estadual. É o mesmo fluxo do “Time de você”: recorte + no aparelho, dialog no desktop e drawer no celular. +

+
+ 1280px · desktop + 390px · mobile + 53 estaduais · busca + rolagem + foto + recorte no aparelho +
+
+ +
+

+ Cena 1 · Galeria desktop 1280 · cinco tiles na mesma linha +

+

+ A largura do conteúdo é preservada; o gap cai discretamente e os cinco modelos continuam + legíveis em uma única fileira. “Time do estadual” usa uma única arte de exemplo no + carrossel: TIME DE FULANO com a silhueta no lugar da foto do visitante, Julio no grupo e a + faixa JULIO PINHEIRO 13999. +

+
+
+

+ Faça parte +

+

Mostre que você está com Solla

+

+ Escolha um modelo, personalize e baixe seu card para compartilhar. +

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

+ Cena 2 · Galeria mobile 390 · carrossel horizontal +

+

+ No celular não se espreme a grade: mantém-se um tile largo com a borda do próximo como + pista. A dica passa a “Deslize para ver os cinco modelos” e há cinco indicadores. O tile + repete a arte de exemplo do modelo: TIME DE FULANO, silhueta no lugar da foto do visitante + e Julio no grupo com a faixa JULIO PINHEIRO 13999. +

+
+

+ Faça parte +

+

Crie seu card de apoio

+

+ Escolha um dos cinco modelos, personalize e baixe para compartilhar. +

+
+ + + +
+

+ Deslize para ver os cinco modelos +

+
+ +
+
+
+ +
+

+ Cena 3 · Compositor inicial + seletor aberto · dialog desktop +

+

+ O seletor vive dentro do mesmo dialog. Busca no topo, lista rolável, seleção por linha + inteira e check visível; o nome já digitado permanece quando a pessoa troca o estadual. +

+
+
+ +
+
+ +
+

+ Cena 4 · Escolhido, pronto e nome longo · estados críticos +

+

+ A arte de Julio confirma o estadual ao lado/atrás; a silhueta mantém a convenção do S15 + para a foto recortada do visitante em primeiro plano. O estado pronto tem um único CTA + primário; o estado too-long preserva foto e estadual sem cortar o nome. +

+
+
+
+

Estadual escolhido

+

Agora coloque seu nome

+
+
+
+
+ +
+
+ +
+

Sua foto de busto

+

+ O fundo é removido no seu aparelho e você entra em primeiro plano. +

+ +
+
+
+ +
+
+
+
+

Tudo certo

+

Seu card está pronto

+
+
+
+
+ +
+
+

+ Julio Pinheiro · 13999 +

+
+ Seu nome e sua foto são processados apenas neste aparelho e não são enviados para + nós. +
+
+
+ +
+
+
+
+

Nome muito longo

+

Encurte o nome

+
+
+
+
+ +
+
+ + +

+ A foto recortada e Julio Pinheiro continuam preservados enquanto você corrige. +

+
+
+ +
+
+
+
+ +
+

+ Cena 5 · Drawer mobile 390 · escolhido e pronto +

+

+ No celular o conteúdo rola dentro do drawer; prévia, estadual e nome ficam em ordem + linear, com o CTA fixo no rodapé. +

+
+
+
+
+
+
+

+ Time do estadual +

+

Seu card está pronto

+
+ +
+
+
+
+ +
+
+ +

+ Sua foto é recortada e ajustada apenas neste aparelho, como no “Time de você”, e não + é enviada para nós. +

+
+
+ +
+
+
+
+ + +
+ + diff --git a/docs/plans/cards-estadual-dobradinha.md b/docs/plans/cards-estadual-dobradinha.md new file mode 100644 index 00000000..074fe2de --- /dev/null +++ b/docs/plans/cards-estadual-dobradinha.md @@ -0,0 +1,110 @@ +# S30 — Card personalizado com o seu estadual (dobradinha) + +Status: rascunho +Atualizado em: 2026-09-23 +Issue: #1271 +Priority: P1 +Impeccable: B — encaixe no estúdio de cards existente (novo modelo + seletor de estadual no composer) +Design UI: docs/plans/cards-estadual-dobradinha-ui-design.html +Appetite: ~1–1,5 dia eng; o quinto modelo do estúdio entregue no mesmo fluxo, com a arte oficial do estadual +Responsável: — + +## Intenção + +O funil de cards do site já tem o "Time de você" (S15, #1161): o visitante digita o nome e a própria foto recortada entra no card `TIME DE `, no aparelho, sem upload. Agora a campanha fechou dobradinhas com 53 estaduais e já mandou a arte pronta de cada um — o grupo com o estadual e a faixa com o lockup nome+número ao lado do Jorge Solla 1313 (ex.: `JULIO` = "JULIO PINHEIRO · DEPUTADO ESTADUAL · 13999"). + +O card novo é o mesmo "Time de você" com o seu estadual dentro: o visitante escolhe o estadual, digita o nome e manda a própria foto — o recorte entra na janela, em primeiro plano, como hoje, e o estadual aparece ao lado (a arte oficial do escolhido vira o fundo e a faixa do card). A referência aprovada pelo humano (2026-09-23) é exatamente isso: `TIME DE FULANO` com a silhueta do visitante no centro e o estadual ao lado. A arte já existe (53 pastas, dois PNGs 1080×1440 por estadual, ~90 MB de originais) e o repo recebe só derivativos otimizados; é um modelo novo ao lado dos quatro atuais, no mesmo estúdio. + +## Persona e fluxo + +- **Persona / contexto:** apoiador/militante no celular com um estadual de referência (a dobradinha do seu território), querendo um card para circular no WhatsApp sem montar nada. +- **Job principal:** escolher o seu estadual e sair com o card `TIME DE ` com a arte oficial dele, a partir da própria foto, sem cadastro e sem nenhum byte saindo do aparelho. +- **Fluxo desejado:** abre `#cards` na home (ou `/cards`) → escolhe `Time do estadual` → escolhe o estadual na lista dos 53 → digita o nome → manda a foto de busto → vê o recorte acontecer no aparelho e a prévia com o estadual ao lado → baixa o PNG. +- **Anti-goals de produto:** segundo cadastro de pessoas, ranking/placar de estaduais, página por estadual, controles novos além dos que o "Time de você" já tem, analytics, conta, persistência. + +### Design UI (B) + +- Design UI (gate): `docs/plans/cards-estadual-dobradinha-ui-design.html` — cenas: tile do quinto modelo na galeria, seletor dos 53 estaduais (mobile/desktop), prévia pronta com a banda do estadual e resultado baixado; o hi-fi é a fonte iterável do aceite visual até o gate. + +## Objetivo e aceite + +- O estúdio ganha o quinto modelo, `Time do estadual`, ao lado dos quatro atuais — mesmo editor, mesmas rotas (`#cards`, `/cards`, `?model=`). +- Escolhido o estadual, digitado o nome e enviada a foto, o card final é o "Time de você" com a arte do estadual: o recorte do visitante entra na janela em primeiro plano, o estadual aparece ao lado e a banda leva o lockup nome+número dele — exatamente a referência aprovada (silhueta do visitante + `TIME DE FULANO` + estadual). +- O fluxo de foto é o do S15 inteiro (envio, recorte no aparelho com progresso/retry, harmonização, arrasto/zoom como escape); nenhum controle novo nasce aqui. +- A lista dos 53 estaduais é navegável por toque e teclado no celular; trocar de estadual não perde o nome nem a foto já processada. +- Nome em uma linha com a máquina do S16 (banner azul dinâmico via `fitCardName`): fora do cap mínimo legível, a pessoa é pedida a usar um nome mais curto — nunca corte silencioso. +- Os derivativos otimizados das 53 artes ficam commitados em `public/cards/` (originais fora do repo); nome completo e número vêm do catálogo derivado da arte, não da base. +- 100% no aparelho: sem conta, sem PII, sem upload; a nota de privacidade do estúdio continua verdadeira e os quatro modelos existentes (e suas artes) ficam intocados. + +## Dados (intenção) + +- **Vou apresentar dados?** Não. +- **Decisões desbloqueadas / forma:** N/A — nenhuma métrica é apresentada e a escolha do estadual não vira relatório; o catálogo dos 53 é conteúdo estático derivado da arte (_adiado ao plano de implementação_), e leitura de uso fica para S32. + +## Dados da decisão (literais) + +- ID `S30`; slug `cards-estadual-dobradinha` (arquivo `docs/plans/cards-estadual-dobradinha.md`); tipo `feature`; Priority `P1`; Impeccable `B — encaixe no estúdio de cards existente (novo modelo + seletor de estadual no composer)`; Design UI `docs/plans/cards-estadual-dobradinha-ui-design.html`. +- Model id `time-do-estadual`; label de galeria `Time do estadual`; kind: variante de time personalizada pelo nome. +- Composição do card (ordem do S15, com a arte do estadual por baixo): FOTOS do estadual (grupo com o estadual na janela) → foto recortada do visitante na janela em primeiro plano (x=286, y=439, largura=592, altura=577) → BASE do estadual (banda/overlay frontal, transparente no topo) → banners `TIME DE` + nome. O visitante **mantém** o fluxo de foto do S15 (envio, recorte no aparelho, harmonização, arrasto/zoom); o estadual aparece ao lado/atrás do recorte. +- A banda/overlay frontal carrega o lockup nome+número do estadual ao lado do Jorge Solla 1313, no desenho de `public/cards/team-card-front.png`; exemplo literal: `JULIO` = "JULIO PINHEIRO · DEPUTADO ESTADUAL · 13999". +- Arte do modelo no carrossel (decisão do humano, 2026-09-23): **o arquivo exato entregue pelo humano** — `docs/plans/cards-estadual-dobradinha-ui-design-assets/modelo-time-de-voce-com-estadual.jpeg` (1080×1440, "modelo-time-de-voce-com-estadual.jpeg"): `TIME DE FULANO` com a **silhueta do visitante no centro** sobre a arte do estadual de exemplo (JULIO: FOTOS + faixa). Usar esse arquivo como está (tile da galeria e placeholder do modelo no composer); não recriar nem substituir por outra arte. A arte de exemplo é uma só para o modelo (JULIO como estadual ilustrativo) e não muda a regra do card final (arte do estadual escolhido); na implementação, as artes de exemplo por estadual seguem essa mesma receita (FOTOS + silhueta + BASE). +- Catálogo exatamente as 53 pastas de `/home/fsolla/Downloads/DOBRADINHAS SITE-20260923T033020Z-1-001/DOBRADINHAS SITE/`: ADRIANA, ANDRE, ANDREA, ANGELO, ARTHUR, BOBO, CAROL, CICERO, DENISE, ELANE, EUCLIDES, FABIOLA, FATIMA, FELIPE, GEANE, HILTON, IVANA, JACO, JAMILLE, JOSAFA, JULIETE, JULIO, JUNIOR, KLEBER, LENINHA, LEO, LUDMILLA, MAGNO, MARCOS, MARLENE, MESTRE, NEUSA, NILTINHO, OSNI, PABLO, PATRICK, PINHEIRO, RADIOVALDO, ROBERTO, ROBINSON, ROGERIO, ROSEMBERG, ROSIVAL, ROWENNA, SILVA, SILVIO, THIAGO, VILMA, VITOR, WELLIGTON, WENCESLAU, YULO, ZE RAIMUNDO. +- Nome completo + número de urna vêm dos lockups da arte: a base da campanha não tem campo de número de candidato nem números de 2026 (`src/collections/StateDeputy.ts` só tem `ballotName`/`party`). +- O catálogo é commitado como tabela derivada e imutável (precedente: `src/lib/municipalityCatalog.ts` + snapshot test), com, por estadual: slug, nome de exibição/legenda, número de 5 dígitos e os dois caminhos de asset commitados. +- Assets commitados em `public/cards/` como derivativos otimizados; origem acima; os PNGs originais (~90 MB) não entram no repo. +- A máquina de banners existente é reusada: `TEAM_CARD_LABEL` ("TIME DE") + banner azul dinâmico via `fitCardName` (comportamento de nome longo do S16 intocado); o modelo não tem controles de recorte/harmonia. +- 100% no aparelho; nada do visitante sai do celular; sem conta, sem PII. + +## Direção no codebase (hipótese) + +- **Áreas prováveis:** catálogo `src/lib/cardModels.ts` (variante de time), tabela estática dos 53 num módulo de `src/lib/` (padrão do `municipalityCatalog`), render `src/lib/cardRender.ts`, seletor no `src/components/cards/CardComposer.tsx`, derivativos em `public/cards/`. +- **Precedente a olhar:** S15/S16 (`docs/plans/cards-time-de-voce.md`, `cards-time-de-voce-nomes-longos.md`); `src/lib/municipalityCatalog.ts` + `tests/fixtures/municipality-catalog.snapshot.json` para a tabela imutável. +- **Risco de acoplamento:** o composer ramifica por `kind` e a esteira de recorte é a do time; o novo modelo reusa essa esteira sem alterá-la e não pode tocar nos quatro existentes; o e2e falha em qualquer console error. + +## Dependências + +- S15 (#1161), S16 (#1195) e S17 (#1196) entregues — o fluxo de foto/recorte, a máquina do banner e a harmonização que este modelo reusa inteiros. +- Assets dos 53 estaduais entregues pela campanha no caminho de origem (acima); derivar e otimizar é parte desta entrega. +- S31 (`docs/plans/cards-colinha.md`) reusa o mesmo catálogo/artes — soft; S32 (analytics) soma model ids — soft. + +## Fora de escopo + +- CMS/collection/migration para o roster dos estaduais — catálogo estático, commitado no código. +- Segundo editor: mesmo estúdio/composer, mesmas rotas (`#cards`, `/cards`, `?model=`). +- Página ou rota por estadual; ranking/"força"; qualquer métrica ou analytics (isso é S32). +- Segundo cadastro de pessoas; ler `stateDeputy`/`Contact` para montar o card. +- Controle novo de foto/recorte além do que o "Time de você" já entrega. +- Mexer nos quatro modelos existentes; regenerar ou redesenhar arte. +- Compartilhamento direto em redes sociais. + +## Rabbit holes de produto + +- **O roster virar CMS com número de 2026.** Se alguém "só completar": collection nova, migration e cadastro de 53 pessoas, com os números divergindo da arte. **Corte neste item:** tabela estática derivada dos lockups, com snapshot test; a base não tem número e não ganha um aqui. +- **A lista virar ranking/"força".** Se alguém "só completar": ordenação por votos, placar por estadual, destaque de "prioridade". **Corte neste item:** lista simples em ordem estável, sem métrica. +- **O card virar o card do estadual.** Se alguém "só completar": o banner azul passa a estampar o nome do estadual e o visitante perde o que digitar. **Corte neste item:** banner do visitante (`TIME DE `); nome/número do estadual só na banda. +- **Reposicionar a arte por estadual.** Se alguém "só completar": medir cada uma das 53 artes e mover a janela por estadual. **Corte neste item:** a janela é a do S15 (286/439/592/577) para todas; as artes já foram feitas nessa régua. + +## Questões em aberto (produto) + +- **O banner `TIME DE ` mostra o nome de quem?** **Opções:** A) o nome digitado pelo visitante (a referência mostra `FULANO`, o visitante) | B) o nome de urna do estadual (zero digitação; o card vira o card do time do estadual). **Recomendação:** A — a referência aprovada é a silhueta do visitante com `TIME DE FULANO`; o nome do estadual já vive na banda. _(assumido — validar com produto)_ +- **`time-do-estadual` / "Time do estadual" está bom?** **Opções:** confirmar o id e o label. **Recomendação:** manter os dois como literais. _(assumido — validar com produto)_ + +## Referências + +- `src/lib/cardModels.ts`, `src/lib/cardRender.ts`, `src/components/cards/CardComposer.tsx`, `tests/e2e/frontend.e2e.spec.ts` +- `src/lib/municipalityCatalog.ts` — precedente de catálogo derivado e imutável (com snapshot test) +- `docs/plans/cards-time-de-voce.md`, `docs/plans/cards-time-de-voce-nomes-longos.md` — o fluxo e a máquina do banner +- `public/cards/team-card-front.png` — desenho da banda/overlay frontal +- `src/collections/StateDeputy.ts` — o que a base (não) tem de número de urna +- Design UI (gate): `docs/plans/cards-estadual-dobradinha-ui-design.html` (+ assets em `cards-estadual-dobradinha-ui-design-assets/`) +- Origem da arte: `/home/fsolla/Downloads/DOBRADINHAS SITE-20260923T033020Z-1-001/DOBRADINHAS SITE/` + +## Self-score (shaping) + +5/5 — um outcome verificável, appetite declarado e nenhuma decisão dura de engenharia. + +- Fatia = um outcome verificável: quinto modelo no estúdio existente, sem tocar nos quatro atuais. +- Appetite ~1–1,5 dia cabe: catálogo derivado + assets otimizados + seletor no composer, sem fluxo novo. +- Persona + job + aceite claros, em linguagem de produto, sem jargão de stack. +- Direção no codebase é hipótese: arquivos citados como pista, nenhum nome novo cravado. +- Zero schema/migration/signature no plano; literais são só de produto, arte e copy.