feat(analytics): activate GA4 (G-KQ1JRV3KN7) + GDPR privacy page + GSC support

Client provided the GA4 Measurement ID and approved the standard policy.

- Activate analytics: NEXT_PUBLIC_GA_ID set to the FLUX property
  G-KQ1JRV3KN7 in the env template, with the same value as the
  docker-compose build-arg fallback so it works out of the box on deploy.
  (GA Measurement IDs are public — they ship in page HTML — safe to commit.)
- New GDPR-compliant Privacy & Cookie Policy page at /[locale]/privacy
  (all 5 locales), linked from the consent banner. Includes a clearly
  marked template disclaimer for legal review and a TODO on the contact
  email. Added to sitemap.
- Consent banner now links via the locale-aware next-intl Link.
- Google Search Console: optional NEXT_PUBLIC_GSC_VERIFICATION env var
  emits the google-site-verification meta tag (Dockerfile arg +
  docker-compose wired). Empty by default.

Verified: build inlines G-KQ1JRV3KN7 into the client bundle; the 5
/privacy routes render; TypeScript clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-05 12:00:44 -05:00
parent 148aefc68f
commit fbfffb28d9
7 changed files with 220 additions and 6 deletions
+5 -3
View File
@@ -43,9 +43,11 @@ services:
context: .
dockerfile: Dockerfile
args:
# NEXT_PUBLIC_GA_ID must be available at build time (Next.js inlines
# NEXT_PUBLIC_* into the client bundle). Sourced from .env on the host.
NEXT_PUBLIC_GA_ID: ${NEXT_PUBLIC_GA_ID:-}
# NEXT_PUBLIC_* are inlined into the client bundle at build time.
# Sourced from .env on the host; the fallback is the FLUX GA4 ID so
# analytics works out of the box even if .env doesn't override it.
NEXT_PUBLIC_GA_ID: ${NEXT_PUBLIC_GA_ID:-G-KQ1JRV3KN7}
NEXT_PUBLIC_GSC_VERIFICATION: ${NEXT_PUBLIC_GSC_VERIFICATION:-}
restart: always
depends_on:
postgres: