Skip to content

Analytics

Paul Thiberville edited this page Oct 14, 2026 · 13 revisions

Analytics

Statut : 🟡 Brouillon · Màj : 2026-10-14 · Tickets : #165 #383 #415

PostHog (cloud UE) et crash reporting Sentry, branchés dès le premier jalon (v0.1) : les hypothèses du MVP ne se valident pas sans mesure. Consentement demandé au premier lancement ; sans consentement, seuls les événements techniques anonymes (crash, performance) sont envoyés. Identifiant anonyme d'appareil, rattaché au compte à la connexion.

Propriétés communes

app_version, platform (ios, android), city (slug de la ville explorée : paris), is_authenticated, et la session de PostHog ($session_id, ajoutée par le SDK). Le catalogue de packages/shared refuse tout événement ou propriété que cette page ne nomme pas.

Aucune position ni zone : city est le seul lieu envoyé, et map_search_zone envoie le niveau de zoom, jamais la zone. Décision (#165, D-067) : pas d'arrondissement ni de quartier dans les événements. Une lecture par secteur (H1 par arrondissement, par exemple) se fait côté données, en rattachant route_id à l'arrondissement du départ du parcours, sans rien envoyer de l'appareil qui situe l'utilisateur. Écartée : une propriété de zone de recherche, qui l'aurait situé au quartier près (Securite-et-RGPD : aucune position envoyée).

Événements

Découverte

Événement Propriétés Hypothèse
app_opened cold_start
analytics_consent_given envoyé seulement après « Accepter » (premier événement autorisé) ; rien n'est envoyé après un refus (décision d'Ilan du 2026-09-28, D-060)
map_search_zone zoom, results_count, trigger (initial, button, geocode) H1
filters_applied audiences, moods, conditions, durations, budgets, transports, results_count, source (chip, panel ; plus de weather : la météo n'applique aucun filtre, D-010, D-067) H2
filters_no_results filtres actifs H2
weather_section_shown condition (rainy, sunny) une fois par résultats affichés, quand la section météo entre à l'écran (sheet à mi-hauteur ou pleine) ; weather_banner_shown et weather_banner_tapped sont retirés avec le bandeau (D-010, D-067)
search_text kind (geo, route), has_result
result_card_viewed route_id, position (à partir de 0, dans le carrousel ou la liste), section, sheet_level (rest, half, full ; list dans la liste « Voir tout »), sort (dans la liste seulement : tri courant) H1 ; une fois par card et par résultats affichés (D-067)
section_opened section, sheet_level (rest, half, full : cran d'où « Voir tout » est touché), sort (tri de la liste à l'ouverture, mémorisé pour la session), results_count (nombre annoncé par la section) H1 ; « Voir tout » d'une section (E-04, #62, D-067)
list_sorted section, sort (recommended, distance, duration, rating), previous_sort choix dans la sheet « Trier par » de la liste (E-04) ; rien si le tri ne change pas (D-067)
route_opened route_id, source (marker : « Voir plus » ou « Voir le parcours » d'un parcours sélectionné sur la carte ; card : carrousel ou liste ; link, favorites, planned), step_index (seulement quand la fiche s'ouvre à une étape touchée sur la carte, #153 ; à partir de 0) H1
route_scrolled route_id, depth (info, timeline, steps, end) H1
route_shared route_id

Règles de la découverte (#165, D-067, confirmées par Ilan le 2026-09-28, D-071, #220) :

  • section : clé technique de la section de la sheet (E-01) : nearby (À proximité), weather (section météo), signature (Les Signature Widoo). Une section ajoutée à E-01 ajoute sa clé ici avant d'être émise.
  • Section météo : weather_section_shown mesure l'exposition ; son « Voir tout » émet section_opened avec section = weather. weather_section_opened, prévu par #31, n'est pas créé : il doublerait section_opened.
  • Pas d'événement au tap sur une étape (#153) ni à la sélection d'un parcours sur la carte : ce sont des gestes d'exploration ; ce qui compte pour H1 est l'ouverture de la fiche, portée par route_opened (source = marker, step_index quand la fiche s'ouvre à l'étape).

Action

Événement Propriétés Hypothèse
auth_prompted intent (favorite, plan, go, create, signal)
auth_completed provider, intent, is_new_user
favorite_added / favorite_removed route_id H3
route_planned route_id, days_ahead, has_conflicts, bookings_count, source (route, past pour « Reprogrammer », D-038) H3
plan_checklist_item_done route_id, provider
plan_changed route_id, days_moved « Modifier la sortie », D-038
plan_cancelled / plan_restored route_id, days_ahead « Annuler la sortie » et « Rétablir », D-038
plan_missed route_id serveur, job de 4:00 du lendemain, D-038
booking_link_opened route_id, step_id, provider, context (route, plan, go) monétisation
go_started route_id, was_planned H3
maps_opened route_id, mode (full, next_step)
go_arrived route_id, step_index, suggested (pastille « Vous semblez être sur place » affichée) D-029
go_step_done route_id, step_index
go_stopped route_id, steps_done_ratio « Arrêter le parcours », D-029
go_step_skipped route_id, step_index, reason (signaled, late, user) « Passer cette étape », D-033
go_completed route_id, duration_actual_min, steps_done_ratio, closed_by (user, auto) H3
route_rated route_id, rating, has_comment, source (go_end, past) qualité ; note facultative depuis D-029
creator_profile_opened creator_id, source communauté
certified_info_opened creator_id, own communauté
profile_updated fields[] (photo, bio, neighborhood, anecdotes, featured) communauté
paywall_shown reason (premium_route, create_limit, premium_card), source (route, profile, profile_edit, settings, create, planned) H6
paywall_dismissed / purchase_started / purchase_completed plan (monthly, annual), trial (essai de 7 jours, D-040) H6
purchase_failed / purchase_pending / purchase_restored plan (monthly, annual), trial ; purchase_failed : reason (erreur du store, hors annulation par l'utilisateur) ; purchase_restored : found (booléen) (D-045) H6
reminder_received / reminder_tapped

🟡 Brouillon #383 du 2026-10-14, à valider par Ilan, voir Compte-et-Monetisation › Fin de la limite de création : proposé, paywall_shown.reason ne garde que premium_route et premium_card, et la source create sort aussi (question 3) : depuis D-073, aucun paywall ne s'ouvre plus depuis la création. Retrait côté code : #415.

Création et qualité

Événement Propriétés Hypothèse
create_started H4
create_step_added place_source (existing, new) H4
create_coherence_warning codes[] H4
create_saved_private / create_submitted steps_count, warnings_count H4
moderation_decision (serveur) decision, reason_code, hours_in_queue H4
place_confirmed / place_reported reason, context (go ou end, plus de confirmation depuis la fiche, D-056) H5
route_reported route_id, reason, step_index D-056
place_flagged (serveur) place_id, routes_affected H5

KPI du MVP

  • Activation : part des sessions avec au moins une route_opened ; objectif 60 %.
  • Pertinence : taux de filters_no_results sous 10 % ; médiane de fiches ouvertes avant une action sous 3.
  • Conversion : route_planned ou go_started par route_opened ; objectif 8 %.
  • Rétention : utilisateurs revenant à J+7 et J+30 après une première programmation.
  • Contenu : parcours soumis par semaine hors équipe, taux d'acceptation, délai de modération.
  • Fraîcheur : part des lieux verified parmi ceux utilisés par des parcours publiés ; objectif 80 %.
  • Notation : part des Go terminés qui donnent une note ; objectif 60 %.
  • Freemium : part des utilisateurs actifs qui rencontrent un parcours Premium ou la limite de création dans le mois, conversion paywall → achat par raison, churn mensuel.

🟡 Brouillon #383 du 2026-10-14, à valider par Ilan, voir Compte-et-Monetisation › Fin de la limite de création : proposé, le KPI Freemium ne compte plus « la limite de création ».

Tableaux PostHog à créer

Funnel découverte (ouverture → zone → fiche → action), funnel création (démarré → étape → soumis → publié), usage des filtres par valeur, lieux signalés par semaine.

Clone this wiki locally