ADR-081 — Platform Web Analytics (GTM, Clarity, GA4)

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-081-platform-web-analytics-gtm-clarity.md

ADR-081: Platform Web Analytics (GTM, Clarity, GA4)

Estado

Accepted — 2026-08-25

Contexto

IVPrior necesita medir el funnel SaaS público (landing, signup, login, pricing) y la UX de esas páginas. Capas distintas que no sustituyen esto:

CapaHerramientaRol
OpsPrometheus / Loki / Grafana (ADR-028)Latencia, errores, uptime
Producto internoCash dashboard (DOC-021)Cash Recovered, DSO, promises
Marketing / UX webGTM + Clarity (+ GA4 / Ads vía GTM)Funnel, heatmaps, session insights

Patrón: IVPrior ADR-049. IDs: crear proyectos IVPrior antes de producción — ver docs/ops/go-live/pre-prod-analytics-projects.md. Local/e2e: NEXT_PUBLIC_GTM_ID vacío = GTM off.

Mercado primario del sitio público (piloto): Estados Unidos / LatAm según lanzamiento. Consent Mode v2 + barra Accept/Reject: default denied hasta Accept.

Decisión

  1. Un solo inyector en código: Google Tag Manager vía NEXT_PUBLIC_GTM_ID. Clarity, GA4 y Ads se configuran dentro de GTM, no con snippets nativos en Next.js.
  2. Zonas IVPrior:
    • M1 (SaaS marketing): /, /signup — GTM activo cuando el env está seteado. No hay /login global en V1 (login de Organization es /t/{slug}/login; Customer portal no existe aún).
    • Platform admin (/platform/...): sin GTM.
    • Help / Docs apps: sin GTM hasta decisión explícita.
  3. Cookie banner + Consent Mode: Accept/Reject en paths GTM. Default denied hasta Accept. Override NEXT_PUBLIC_GTM_CONSENT_DEFAULT oculta la barra (e2e).
  4. Sin PII en dataLayer.
  5. Env vacío en local: sin ID → no se carga GTM.
  6. No mezclar con DOC-021 ni con ADR-028.

Consecuencias

  • Un punto de control (GTM) para vendors sin redeploy.
  • Operadores deben crear sus proyectos Google/Microsoft Clarity para IVPrior antes del go-live; no reutilizar IVPrior.