From fd17ea0620d3f19d9a21d99cd18191d491b98af4 Mon Sep 17 00:00:00 2001 From: Daniel Rosel Date: Wed, 12 Nov 2025 10:28:08 +0100 Subject: [PATCH] event unification --- web/src/lib/events.ts | 68 ++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/web/src/lib/events.ts b/web/src/lib/events.ts index 6d83a26..503621c 100644 --- a/web/src/lib/events.ts +++ b/web/src/lib/events.ts @@ -2,31 +2,46 @@ import { z } from 'zod'; // canonical events for tracking user interactions export type EventName = + // navigation & discovery | 'page_view' - | 'click' - | 'product_view' - | 'product_hover' - | 'search' - | 'filter_apply' - | 'sort_change' - | 'add_to_cart' - | 'remove_from_cart' + | 'view_item_page' + | 'learn_more_about_item' + // cart operations + | 'add_item_to_cart' + | 'remove_item' | 'checkout_start' | 'purchase_complete' + // filtering & search + | 'search' + | 'filter_for_date' + | 'filter_for_amenities' + | 'filter_for_price' + | 'sort_change' + // dwell signals (3s threshold) + | 'hover_over_title' + | 'hover_over_paragraph' + | 'hover_over_link' + | 'hover_over_button' + // session | 'session_start'; export const eventNames: readonly EventName[] = [ 'page_view', - 'click', - 'product_view', - 'product_hover', - 'search', - 'filter_apply', - 'sort_change', - 'add_to_cart', - 'remove_from_cart', + 'view_item_page', + 'learn_more_about_item', + 'add_item_to_cart', + 'remove_item', 'checkout_start', 'purchase_complete', + 'search', + 'filter_for_date', + 'filter_for_amenities', + 'filter_for_price', + 'sort_change', + 'hover_over_title', + 'hover_over_paragraph', + 'hover_over_link', + 'hover_over_button', 'session_start', ] as const; @@ -51,16 +66,21 @@ export const eventBaseSchema = z.object({ page: z.string().min(1), eventName: z.enum([ 'page_view', - 'click', - 'product_view', - 'product_hover', - 'search', - 'filter_apply', - 'sort_change', - 'add_to_cart', - 'remove_from_cart', + 'view_item_page', + 'learn_more_about_item', + 'add_item_to_cart', + 'remove_item', 'checkout_start', 'purchase_complete', + 'search', + 'filter_for_date', + 'filter_for_amenities', + 'filter_for_price', + 'sort_change', + 'hover_over_title', + 'hover_over_paragraph', + 'hover_over_link', + 'hover_over_button', 'session_start', ]), productId: z.string().optional(),