The teaser workflow now takes its Postiz routing and API key from a config
node instead of hard-coded placeholders inside the Code node, so activating
it is a matter of filling two fields rather than editing JavaScript.
scripts/setup-metabase-dashboard.mjs registers the hidden11 database in
Metabase and builds the funnel dashboard from the SQL views. It is
idempotent, so it can be re-run after adding a view.
Refs #4#9
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvQ1ErZNRUcWgCEkJ9uyrn
Prerendering every past answer page in six languages meant 700 static pages,
and the CI runner blew past Next's 60s per-page export timeout on
/puzzle/236, failing the build. The set also grew by six pages a day, so
every build would have been slower than the last.
generateStaticParams now covers the most recent 30 days per locale (202
pages, ~35s locally). Older days keep working exactly as before: they are
still linked, still in the sitemap and still indexable, but render on first
request and are then cached by ISR — measured at 180ms cold.
Also raises staticPageGenerationTimeout to 180s for headroom, since the
runner shares a host with Gitea and Postgres.
Refs #6
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvQ1ErZNRUcWgCEkJ9uyrn
Archive and answer pages now exist in all six languages and are prerendered
instead of rendered per request, and each answer page carries a sentence of
real context per player (club, league, nationality, former clubs, honours)
plus Article and BreadcrumbList JSON-LD. The sitemap grows from 121 to 691
URLs, every one with hreflang alternates.
Adds an optional display name to shared results, so a challenge link reads
"<name> challenges you" in the page, the OG image and the head-to-head
verdict; the name is sanitised both when written and when parsed back.
Adds an opt-in daily reminder (Web Push without payload, so no content
encryption) and a PWA install prompt shown once the day is finished, plus
first-party event ingestion at /api/events that mirrors GA4 so the funnel
survives ad blockers.
Wires the missing N8N_PLAYS_WEBHOOK_URL into the deployment along with the
new events, push and search-verification secrets, and ships the n8n
workflows, the Postgres schema with funnel/retention views, and an IndexNow
submitter.
Refs #2#3#5#6#7#8#9#10
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvQ1ErZNRUcWgCEkJ9uyrn
Localized home pages (/es, /fr, /de, /it, /pt) with server-rendered intro,
how-to-play and FAQ plus FAQPage/WebApplication JSON-LD and hreflang.
Puzzle archive at /archive with answer pages (/puzzle/N) for past days only
and replays (/play/N) that never touch stats or the daily streak.
Challenge loop: shared results link back as /?challenge=<code> and the result
screen shows a head-to-head verdict.
Also adds robots.txt, sitemap.xml, the PWA manifest and icons, a compact
share text with WhatsApp/X/copy channels, a next-puzzle countdown, the
social-proof play counter and a spoiler-free /api/teaser for daily posting.
Refs #1
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvQ1ErZNRUcWgCEkJ9uyrn
Avoids ambiguity with cup competitions — league titles are now
consistently referred to as "campeonato liguero / campeonatos ligueros"
in all Spanish clue translations.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix feedback color label: Close → Cerca/Proche/Nah/Vicino/Perto
in all non-English locales (was using the verb "to close" instead
of "near/close")
- Replace "liga/ligas" with "campeonato/campeonatos" in all ES
translations that refer to league titles, to avoid confusion with
the competition name LaLiga
- Add new player fields (ballonDOr, goldenBoot, worldCupWinner,
copaAmericaWinner, eurocupWinner) and rework clue generation with
difficulty-aware mixing (easy=all direct, medium=2 direct+2 harder,
hard=1 direct+2 medium+comparisons)
- Add new clue types: club, trophy (World Cup/Euro/Copa), award
(Ballon d'Or/Golden Boot), with full i18n support in 6 languages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>