Skip to content

Commit 7d3d91b

Browse files
committed
Setup Posthog analytics
1 parent ff5cd75 commit 7d3d91b

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

packages/svelte-ux/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"date-fns": "^2.30.0",
6161
"immer": "^10.0.3",
6262
"lodash-es": "^4.17.21",
63+
"posthog-js": "^1.95.1",
6364
"rehype-slug": "^6.0.0",
6465
"tailwind-merge": "^2.0.0",
6566
"zod": "^3.22.4"

packages/svelte-ux/src/routes/+layout.svelte

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
2+
import { onMount } from 'svelte';
3+
import posthog from 'posthog-js';
24
import 'prism-themes/themes/prism-vsc-dark-plus.css';
3-
import { dev } from '$app/environment';
45
import { mdiArrowTopRight, mdiGithub, mdiTwitter } from '@mdi/js';
56
67
import AppBar from '$lib/components/AppBar.svelte';
@@ -9,7 +10,11 @@
910
import Tooltip from '$lib/components/Tooltip.svelte';
1011
import NavMenu from './_NavMenu.svelte';
1112
import QuickSearch from '$lib/components/QuickSearch.svelte';
13+
14+
import { dev } from '$app/environment';
1215
import { afterNavigate, goto } from '$app/navigation';
16+
import { page } from '$app/stores';
17+
1318
import { settings } from '$lib';
1419
1520
settings({
@@ -46,6 +51,34 @@
4651
};
4752
})
4853
.sort((a, b) => groups.indexOf(a.group) - groups.indexOf(b.group));
54+
55+
let currentPath = '';
56+
onMount(() => {
57+
// Posthog analytics
58+
if (!dev) {
59+
const unsubscribePage = page.subscribe(($page) => {
60+
if (currentPath && currentPath !== $page.url.pathname) {
61+
// Page navigated away
62+
posthog.capture('$pageleave');
63+
}
64+
console.log('entering');
65+
// Page entered
66+
currentPath = $page.url.pathname;
67+
posthog.capture('$pageview');
68+
});
69+
70+
const handleBeforeUnload = () => {
71+
// Hard reloads or browser exit
72+
posthog.capture('$pageleave');
73+
};
74+
window.addEventListener('beforeunload', handleBeforeUnload);
75+
76+
return () => {
77+
unsubscribePage();
78+
window.removeEventListener('beforeunload', handleBeforeUnload);
79+
};
80+
}
81+
});
4982
</script>
5083

5184
<AppLayout>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,17 @@
1+
import posthog from 'posthog-js';
2+
3+
import { browser, dev } from '$app/environment';
4+
15
// Disable server-side rendering until AppLayout shift is fixed (issue #22)
26
export const ssr = false;
7+
8+
export const load = async () => {
9+
// Setup Posthog
10+
if (browser && !dev) {
11+
posthog.init('phc_F78mUWQpKPpsXS1mamJFzDWM8bivZrwIx4Nm1cI8BSb', {
12+
api_host: 'https://app.posthog.com',
13+
capture_pageview: false,
14+
capture_pageleave: false,
15+
});
16+
}
17+
};

pnpm-lock.yaml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)