lilith-platform.live/codebase/@features/user-data
2026-05-14 22:58:53 -07:00
..
beacon analytics(beacon): 📈 Update beacon event collection and payload structure for improved analytics integration 2026-05-14 22:58:53 -07:00
frontend-client feat(frontend-client): Implement comprehensive analytics system with funnel tracking, custom hooks, and global context for behavior/engagement tracking 2026-05-14 22:44:13 -07:00
shared feat(user-data): Add analytics client, backend client, batch queue, device collector, logger, and UTM extractor utilities for user data processing 2026-05-14 22:44:14 -07:00
website-backend-users feat(backend-users): Implement backend server with API routes, logging utilities, and server configuration 2026-05-14 22:44:14 -07:00
website-frontend-users feat(website-frontend-users): Add interactive user analytics dashboard with geospatial mapping, data visualization, and API integration components 2026-05-14 22:44:14 -07:00
README.md chore(deployment-specific): 🔧 Update production/development configs, CI workflows, and environment variables for quinn.mail-autoresponder, quinn.www, and quinn.data; adjust agency branding scripts, user data service definitions, local Caddyfile, and documentation. 2026-05-14 22:44:14 -07:00
services.yaml chore(deployment-specific): 🔧 Update production/development configs, CI workflows, and environment variables for quinn.mail-autoresponder, quinn.www, and quinn.data; adjust agency branding scripts, user data service definitions, local Caddyfile, and documentation. 2026-05-14 22:44:14 -07:00

user-data

Parent feature: cross-domain, cross-corp visitor flow on the lilith-platform.live mesh.

This feature absorbs what used to be @features/analytics/ and adds the missing layers needed to stitch a visitor journey across adulttherapytour.com → maisonsansonnet.com → transquinnftw.com → atlilith.com. The deployed surface remains quinn.data (data.transquinnftw.com).

Shape

Path Package Role
shared/ @lilith/analytics-client Browser client core — batch queue, attribution, device collector. No React dep.
frontend-client/ @lilith/analytics-client-react React provider + hooks (useAnalytics, useFunnelEvents, usePageViewTracking).
website-backend-users/ @lilith/analytics-website-backend BFF proxy → @analytics collector (:4001) + query API (:4003). Stamps every event with visitor_id_daily, corp_id, domain_id.
website-frontend-users/ @lilith/analytics-website-users Dashboard SPA. Includes the Cross-Corp Flow tab.
identity/ @lilith/user-data-identity Server-side visitor identity. visitorIdDaily(ip, ua, lang, now) = sha256(daily_salt ‖ ip ‖ ua ‖ lang). Salt rotates at 00:00 UTC. Cookie-free, GDPR-clean.
beacon/ @lilith/user-data-beacon ~2 KB IIFE for static-HTML sites that can't host the React provider. Served from https://quinn.data/beacon.js.
flow/ @lilith/user-data-flow SQL building blocks + dashboard tab for corp → corp flow analysis.

Visitor identity model

  • No cookies. No localStorage. No fingerprint canvas.
  • visitor_id_daily = sha256(salt_today ‖ X-Real-IP ‖ User-Agent ‖ Accept-Language).
  • Same visitor → same id across all our domains within a UTC day.
  • Salt rotates at 00:00 UTC and is purged from visitor_salts after 7 days, making historical re-identification mathematically impossible.
  • Tab-scoped sessionId (client-side, in-memory) is preserved for per-tab funnels.

Corp / domain taxonomy

Every event row carries corp_id and domain_id. Seed corps:

slug legal_name
lilith-apps-ehf Lilith Apps ehf
att Adult Therapy Tour
sansonnet Maison Sansonnet
transquinnftw transquinnftw

Domains map to corps (adulttherapytour.comatt, maisonsansonnet.comsansonnet, etc.). See migration <TBD> in website-backend-users/migrations/.

Privacy

See PRIVACY.md.