From be151fd6f7e7860cc60bee67bab815c155e86fcd Mon Sep 17 00:00:00 2001
From: Fuwn <contact@fuwn.net>
Date: Fri, 29 May 2026 23:05:37 +0000
Subject: feat(analytics): track umami events across core actions

Add a guarded track() wrapper (src/lib/analytics.ts) so programmatic
events no-op instead of throwing when umami is absent (localhost),
lazily loaded, or ad-blocked. Instrument the core loop (progress
increment, roulette, list filter, force refresh), the auth funnel
(log in/out, command palette), settings toggles/selects at the wrapper
level, sync/debug/feed actions, and tool/sharing actions.
---
 src/routes/+layout.svelte | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'src/routes/+layout.svelte')

diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index b1f9fc87..a35fee29 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -32,6 +32,7 @@ import Message from "$lib/Loading/Message.svelte";
 import { requestNotifications } from "$lib/Utility/notifications";
 import { database as userDatabase } from "$lib/Database/IDB/user";
 import CommandPalette from "$lib/CommandPalette/CommandPalette.svelte";
+import { track } from "$lib/analytics";
 import { defaultActions } from "$lib/CommandPalette/actions";
 import { authActions } from "$lib/CommandPalette/authActions";
 import { syncActions } from "$lib/CommandPalette/syncActions";
@@ -402,6 +403,8 @@ $: {
                 url: '#',
                 preventDefault: true,
                 onClick: async () => {
+                  track('Log Out', { source: 'header' });
+
                   await localforage.removeItem('identity');
                   await localforage.removeItem('commit');
 
@@ -424,6 +427,8 @@ $: {
             class="header-item"
             href={`https://anilist.co/api/v2/oauth/authorize?client_id=${env.PUBLIC_ANILIST_CLIENT_ID}&redirect_uri=${env.PUBLIC_ANILIST_REDIRECT_URI}&response_type=code`}
             onclick={async () => {
+              track('Log In', { source: 'header' });
+
               await localforage.setItem(
                 'redirect',
                 window.location.origin + window.location.pathname + window.location.search
-- 
cgit v1.2.3

