← all branches

feat/ph-consent

safe
8c748c7 · incrementalpre-PRreviewed 2026-08-01 00:40 UTC0H · 0M · 2L · 1I
The branch
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
The changes (whole branch)
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+82248apps/web+1965apps/platform+134
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).
consent privacy analytics posthog lfpdppp
ci· No open PR; CI status not available for pre-PR branchcoderabbit· No .coderabbit.yaml present

Findings · 3

correctness1

info

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

low

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.'

low

'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

  1. 8c748c7safeincremental0H · 0M · 2L2026-08-01 00:40current
  2. 22fc175safeincremental0H · 0M · 4L2026-08-01 00:30
  3. f26dee1needs attentionincremental2H · 2M · 9L2026-08-01 00:24
  4. bf92308needs attentionincremental2H · 8M · 8L2026-07-31 23:56
  5. cf3e330needs attentionincremental0H · 6M · 5L2026-07-31 23:17
  6. 5fb4d78blockedfull4H · 8M · 9L2026-07-31 22:11