Event Taxonomy
PostHog events
| Event | When fired | Properties |
|---|---|---|
track_viewed | Embed loads (once per session per URL) | gpx_url, page_url, referrer_host |
track_downloaded | User clicks “Descarregar el track” | gpx_url, page_url, ui_surface |
track_shared | User selects a share channel | gpx_url, page_url, share_channel, ui_surface |
share_modal_opened | User opens the share dropdown | gpx_url, page_url, ui_surface |
route_start_opened | User clicks “Inici de ruta” (Google Maps) | gpx_url, page_url, ui_surface |
elevation_chart_expanded | User expands collapsed chart | gpx_url, page_url, ui_surface |
gpx_fetch_error | GPX loading fails | gpx_url, error_message |
shortcode_copied | Helper: user copies shortcode | context-dependent |
map_previewed | Helper: user previews embed | context-dependent |
gpx_proxy_downloaded | Server-side: GPX downloaded via proxy with dl=1 | gpx_url, filename |
Event groups
Defined in lib/analytics-events.ts:
| Group | Events |
|---|---|
engagement | view |
conversion | download |
share | share, share_facebook, share_x, etc. |
navigation | open_route_start |
ui | open_share_modal, elevation_chart_expanded |
other | Anything not matching above |
Share channels
| Channel | Platform |
|---|---|
facebook | Facebook sharer |
x | X (Twitter) |
whatsapp | |
email | Email (mailto) |
garmin | Garmin Connect import |
qr | QR code generation |
copy_link | Clipboard copy |
open_tab | Open in new tab |
unknown | Fallback |
Supabase event schema
The analytics_events table stores:
| Column | Type | Description |
|---|---|---|
gpx_url | TEXT | GPX file URL |
event | TEXT | Legacy: view, download, or share |
event_name | TEXT | Fine-grained: view, download, share_facebook, etc. |
event_group | TEXT | Category: engagement, conversion, share, etc. |
share_channel | TEXT | Channel identifier (nullable) |
ui_surface | TEXT | Where the action occurred: embed_bottom_bar, share_modal |
session_id | TEXT | Ephemeral per-tab session ID |
referrer_host | TEXT | Hostname from document.referrer |
meta_json | JSONB | Additional metadata |
created_at | TIMESTAMPTZ | Event timestamp |
Summary logic
summarizeAnalyticsRows() in lib/analytics-events.ts aggregates raw event rows into:
{
views: number,
downloads: number,
shares: number,
shareModalOpens: number,
openRouteStartClicks: number,
shareChannels: Record<string, number>
}