From 88f1907dcd695a444e36c1c5eca31eb6200681a3 Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Sun, 20 Sep 2026 01:19:25 -0300 Subject: [PATCH] =?UTF-8?q?feat(S21):=20jingles=20de=20Jorge=20Solla=20no?= =?UTF-8?q?=20site=20p=C3=BAblico=20=E2=80=94=20ouvir=20e=20baixar=20(Clos?= =?UTF-8?q?es=20#1222)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + docs/changelog/2026-09-20-s21.md | 1 + docs/plans/jingles-site-publico-impl.md | 192 + playwright.config.ts | 9 + scripts/lib/e2e-affected-manifest.mjs | 24 + src/app/(frontend)/(home)/cards/page.tsx | 4 +- src/app/(frontend)/(home)/page.tsx | 5 +- src/app/(frontend)/corte/[id]/page.tsx | 11 +- src/app/(frontend)/jingles/layout.tsx | 17 + src/app/(frontend)/jingles/page.tsx | 103 + src/collections/Jingle.ts | 112 + src/collections/ShareLink.ts | 9 +- src/components/CampaignFooter.tsx | 167 +- src/components/jingles/JingleEmptyState.tsx | 42 + src/components/jingles/JingleIntro.tsx | 71 + src/components/jingles/JinglePageHeader.tsx | 34 + src/components/jingles/JinglePlayer.tsx | 266 + src/lib/jingle.ts | 76 + src/lib/shareLink.ts | 1 + .../20260920_031320_add_jingle.json | 17146 ++++++++++++++++ src/migrations/20260920_031320_add_jingle.ts | 37 + src/migrations/index.ts | 8 +- src/payload-types.ts | 56 + src/payload.config.ts | 2 + src/utilities/access/shared.ts | 9 + src/utilities/campaignAccess.ts | 1 + src/utilities/documentReads.ts | 9 + src/utilities/documents.ts | 2 + src/utilities/jingleReads.ts | 80 + tests/e2e/frontendJingles.e2e.spec.ts | 240 + tests/fixtures/jingle-tone.mp3 | Bin 0 -> 4511 bytes tests/int/jingle.int.spec.ts | 336 + tests/unit/campaignHome.unit.spec.tsx | 7 + tests/unit/codebaseConventions.unit.spec.ts | 4 + tests/unit/e2eAffectedManifest.unit.spec.ts | 3 + tests/unit/jingle.unit.spec.ts | 62 + tests/unit/jinglePlayer.unit.spec.tsx | 173 + tests/unit/shareLink.unit.spec.ts | 1 + 38 files changed, 19230 insertions(+), 93 deletions(-) create mode 100644 docs/changelog/2026-09-20-s21.md create mode 100644 docs/plans/jingles-site-publico-impl.md create mode 100644 src/app/(frontend)/jingles/layout.tsx create mode 100644 src/app/(frontend)/jingles/page.tsx create mode 100644 src/collections/Jingle.ts create mode 100644 src/components/jingles/JingleEmptyState.tsx create mode 100644 src/components/jingles/JingleIntro.tsx create mode 100644 src/components/jingles/JinglePageHeader.tsx create mode 100644 src/components/jingles/JinglePlayer.tsx create mode 100644 src/lib/jingle.ts create mode 100644 src/migrations/20260920_031320_add_jingle.json create mode 100644 src/migrations/20260920_031320_add_jingle.ts create mode 100644 src/utilities/jingleReads.ts create mode 100644 tests/e2e/frontendJingles.e2e.spec.ts create mode 100644 tests/fixtures/jingle-tone.mp3 create mode 100644 tests/int/jingle.int.spec.ts create mode 100644 tests/unit/jingle.unit.spec.ts create mode 100644 tests/unit/jinglePlayer.unit.spec.tsx diff --git a/.gitignore b/.gitignore index 90929486..8435f118 100644 --- a/.gitignore +++ b/.gitignore @@ -124,6 +124,9 @@ next-env.d.ts *.m4a *.mp3 *.webm +# S21 — the int/e2e jingle fixture (~5 KB, sine tone): the only audio the repo +# commits; every real jingle lives in the media collection. +!tests/fixtures/*.mp3 # opencode secrets (Penpot MCP token, etc.) .opencode/secrets/ diff --git a/docs/changelog/2026-09-20-s21.md b/docs/changelog/2026-09-20-s21.md new file mode 100644 index 00000000..33ee7e71 --- /dev/null +++ b/docs/changelog/2026-09-20-s21.md @@ -0,0 +1 @@ +**S21 — Jingles de Jorge Solla no site público: ouvir e baixar (2026-09-20):** o mandato ganha uma casa oficial para os jingles — a página pública `/jingles` (tema `campaign-site`, portada classe-a-classe do artefato aprovado `docs/plans/jingles-site-publico-ui-design.html`) lista os jingles publicados em grid de 3 colunas no desktop e coluna única no celular (capa quadrada com gradiente, play amarelo de 56px com sombra 3D, título, estado "Pronto para tocar"/"Em reprodução", trilha de progresso e Tempo/Duração reais, "Baixar MP3" com alvo de 44px e o nome do arquivo), com header próprio (marca completa + selo "Jingles oficiais"), hero "A trilha da nossa caminhada" e o rodapé eleitoral compartilhado. O player é um único client component (`JinglePlayer`): cada card tem seu `