feat/ph-consent
safe8c748c7 · incrementalpre-PRreviewed 2026-08-01 00:40 UTC0H · 0M · 2L · 1I- Purpose
- Add GDPR/LFPDPPP-compliant consent gate for PostHog session replay on the public marketing site and authenticated platform, with explicit consent banner, revocation UI, and per-app replay policy.
- Goal
- Ship consent-gated session recording: banner on apps/web, terms-based implicit consent on apps/platform, per-app sampling policy, and revocation control on the privacy page.
- Sub-goals
- SG-1: Per-app replay policy — 60% sampling on web (consent-gated), explicit opt-in policy on platform
- SG-2: Gate identity and analytics on consent; add revocation control on /legal/privacidad
- SG-3: Scope replay to Atlas route and authenticated dashboard via SessionReplayScope
- SG-4: Discreet corner-card consent banner using useSyncExternalStore for SSR safety
- SG-5: Copy polish — state the purpose of session recording in the banner
- What
- Single consent banner copy tweak: 'podemos grabar la sesión en secciones como el Atlas' → 'podemos grabar la sesión para mejorar la plataforma en secciones como el Atlas'. Adds stated purpose for LFPDPPP art. 16 compliance.
- Why
- Purpose specification in consent copy is a LFPDPPP (Mexican data privacy law) requirement for informed consent and aligns with the /legal/privacidad privacy notice wording ('para entender cómo se usa el sitio y mejorarlo').
- Areas
- packages/analytics+822−48apps/web+196−5apps/platform+13−4
- Blast
- 14 files, +1031/−57 across 3 areas. Core work in packages/analytics (new consent/replay layer); apps/web (banner + privacy page); apps/platform (layout consent gate).
Findings · 3
correctness1
Mild grammatical ambiguity: 'en secciones como el Atlas' could attach to 'mejorar' instead of 'grabar'
apps/web/src/components/ConsentBanner.tsx:55
Does not affect consent accuracy — the intent is unambiguous in practice — but is resolved by reordering: '…grabar la sesión en secciones como el Atlas para mejorar la plataforma'.
improvement2
Purpose clause interrupts sentence flow — consider moving to end
apps/web/src/components/ConsentBanner.tsx:55
'para mejorar la plataforma' sits between the verb 'grabar la sesión' and the location qualifier 'en secciones como el Atlas'. Moving it to the end reads more naturally: 'podemos grabar la sesión en secciones como el Atlas para mejorar la plataforma.'
'el Atlas' may be opaque to first-time public-site visitors
apps/web/src/components/ConsentBanner.tsx:55
The banner appears on the public marketing site where a user may never have logged in. 'el Atlas' has no external referent. Consider 'el Atlas (panel de monitoreo solar)' or 'algunas secciones de la plataforma' so consent scope is self-explanatory.
History · 6 commits
- 8c748c7safeincremental0H · 0M · 2L2026-08-01 00:40current
- 22fc175safeincremental0H · 0M · 4L2026-08-01 00:30
- f26dee1needs attentionincremental2H · 2M · 9L2026-08-01 00:24
- bf92308needs attentionincremental2H · 8M · 8L2026-07-31 23:56
- cf3e330needs attentionincremental0H · 6M · 5L2026-07-31 23:17
- 5fb4d78blockedfull4H · 8M · 9L2026-07-31 22:11