Documentation

Analytics (PostHog)

Analytics produit PostHog — tracking client et serveur, événements et le dashboard analytics.

Ouvrir dansChatGPT (s’ouvre dans un nouvel onglet)Claude (s’ouvre dans un nouvel onglet)Cursor (s’ouvre dans un nouvel onglet)Analytics produit PostHog — tracking client et serveur, événements et le dashboard analytics.

Motoko Base utilise PostHog pour l'analytics produit. PostHog est distinct de Sentry (erreurs) — ne les mélangez pas.

Official docs: PostHog documentation

Setup

  1. Créez un projet PostHog
  2. Copiez la Project API key (capture client)
  3. Pour le dashboard Analytics (/dashboard/analytics), créez aussi une Personal API key avec Query Read
  4. Définissez les variables d'environnement :
VariableScopePurpose
NEXT_PUBLIC_POSTHOG_PROJECT_TOKENClientEvent capture
NEXT_PUBLIC_POSTHOG_HOSTClientIngest host (US/EU)
POSTHOG_PERSONAL_API_KEYServerHogQL queries
POSTHOG_PROJECT_IDServerProject ID for queries
POSTHOG_HOSTServerAPI host for queries (not ingest)

Sans le project token, l'analytics est désactivé — l'app fonctionne normalement.

Client vs server tracking

LayerModuleUse for
Clientsrc/lib/analytics/client.tsBrowser events (sign-in, sign-up)
Serversrc/lib/analytics/server.tsServer actions, webhooks (links, files, billing)

Init client : src/instrumentation-client.ts. Le serveur utilise un singleton de module — fail-open, ne lance jamais.

Events

Les noms d'événements vivent dans src/lib/analytics/events.ts :

export const ANALYTICS_EVENTS = {
  userSignedUp: "user_signed_up",
  linkCreated: "link_created",
  fileUploaded: "file_uploaded",
  checkoutStarted: "checkout_started",
  // ...
} as const;

Convention : {object}_{past_tense_verb} (minuscules, underscores).

Add a custom event

  1. Ajoutez le nom d'événement à ANALYTICS_EVENTS dans events.ts
  2. Ajoutez des propriétés typées à AnalyticsEventProperties (optionnel)
  3. Capturez depuis la bonne couche :
// Client component
import { captureClientEvent } from "@/lib/analytics/client";
captureClientEvent(ANALYTICS_EVENTS.linkCreated, { link_id, slug, destination_host });

// Server action
import { captureServerEvent } from "@/lib/analytics/server";
captureServerEvent({ distinctId: userId, event: ANALYTICS_EVENTS.linkCreated, properties: { ... } });

Les propriétés sont nettoyées avant l'envoi (src/lib/analytics/scrub.ts) — pas de mots de passe, tokens ni URLs brutes avec secrets.

Analytics dashboard

/dashboard/analytics exécute des requêtes HogQL via src/lib/analytics/query.ts. Nécessite POSTHOG_PERSONAL_API_KEY + POSTHOG_PROJECT_ID. Les résultats sont mis en cache ~60s par utilisateur.

Where to change this

WhatWhere
Event taxonomysrc/lib/analytics/events.ts
Client capturesrc/lib/analytics/client.ts
Server capturesrc/lib/analytics/server.ts
Config & enable checkssrc/lib/analytics/config.ts
Dashboard queriessrc/lib/analytics/query.ts
Analytics UIsrc/features/analytics/

Environment Variables — toutes les variables PostHog.