diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index a534179..1bebfc7 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -35,6 +35,7 @@
src="https://analytics.mifi.holdings/script.js"
data-website-id="72ac01ce-e7fc-4582-8593-703f15add8d5"
>
+
{merged.title}
diff --git a/static/assets/js/umami-helper.js b/static/assets/js/umami-helper.js
new file mode 100644
index 0000000..17c9f14
--- /dev/null
+++ b/static/assets/js/umami-helper.js
@@ -0,0 +1,28 @@
+// Umami: safe track (no-op if script blocked or not loaded)
+function umamiTrack(name, data) {
+ if (
+ typeof window.umami !== 'undefined' &&
+ typeof window.umami.track === 'function'
+ ) {
+ if (data != null) window.umami.track(name, data);
+ else window.umami.track(name);
+ }
+}
+
+// Umami: scroll depth (25%, 50%, 75%, 100%) – once per milestone
+const scrollMilestones = new Set();
+function onScroll() {
+ const doc = document.documentElement;
+ const scrollTop = doc.scrollTop || document.body.scrollTop;
+ const scrollHeight =
+ (doc.scrollHeight || document.body.scrollHeight) - window.innerHeight;
+ if (scrollHeight <= 0) return;
+ const pct = Math.round((scrollTop / scrollHeight) * 100);
+ for (const m of [25, 50, 75, 100]) {
+ if (pct >= m && !scrollMilestones.has(m)) {
+ scrollMilestones.add(m);
+ umamiTrack('scroll-depth', { depth: String(m) });
+ }
+ }
+}
+window.addEventListener('scroll', onScroll, { passive: true });