diff --git a/package.json b/package.json index 5a97a3ed1a..c953e03202 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "dependencies": { "@sentry/sveltekit": "^8.38.0", "h3": "^1.13.0", + "posthog-js": "^1.204.0", "sharp": "^0.33.5" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d72be7299..4e809f444c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: h3: specifier: ^1.13.0 version: 1.13.0 + posthog-js: + specifier: ^1.204.0 + version: 1.204.0 sharp: specifier: ^0.33.5 version: 0.33.5 @@ -2228,6 +2231,9 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2561,6 +2567,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -3565,6 +3574,12 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + posthog-js@1.204.0: + resolution: {integrity: sha512-wVt948wKPPztCZ3OeDq8y0dtaPbhbY8vFuEVBUNHOn7PohbTXr7HZ4CNhH8fXgFkx5COEzz/20wWJmEsSU5oCA==} + + preact@10.25.4: + resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4310,6 +4325,9 @@ packages: jsdom: optional: true + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -6641,6 +6659,8 @@ snapshots: cookie@0.6.0: {} + core-js@3.39.0: {} + core-util-is@1.0.3: {} cross-fetch@3.1.8(encoding@0.1.13): @@ -7009,6 +7029,8 @@ snapshots: dependencies: reusify: 1.0.4 + fflate@0.4.8: {} + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -7992,6 +8014,15 @@ snapshots: dependencies: xtend: 4.0.2 + posthog-js@1.204.0: + dependencies: + core-js: 3.39.0 + fflate: 0.4.8 + preact: 10.25.4 + web-vitals: 4.2.4 + + preact@10.25.4: {} + prelude-ls@1.2.1: {} prettier-plugin-svelte@3.3.2(prettier@3.3.3)(svelte@4.2.19): @@ -8739,6 +8770,8 @@ snapshots: - supports-color - terser + web-vitals@4.2.4: {} + webidl-conversions@3.0.1: {} webpack-sources@3.2.3: {} diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index b1905d2a60..ba3891d271 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -2,6 +2,7 @@ import { Analytics, type AnalyticsPlugin } from 'analytics'; import Plausible from 'plausible-tracker'; import { get } from 'svelte/store'; import { page } from '$app/stores'; +import posthogEvent from 'posthog-js'; import { ENV } from '$lib/system'; import { browser } from '$app/environment'; @@ -54,7 +55,10 @@ const analytics = Analytics({ plugins: [plausible('appwrite.io')] }); -export const trackEvent = async (name: string, data: object = {}) => { +export const trackEvent = async (platforms: { + plausible?: { name: string; data?: object }; + posthog?: { name: string }; +}) => { if (!isTrackingAllowed()) { return; } @@ -63,9 +67,15 @@ export const trackEvent = async (name: string, data: object = {}) => { const path = currentPage.route.id ?? ''; if (ENV.DEV || ENV.PREVIEW) { - console.log(`[Analytics] Event ${name} ${path}`, data); + console.log(`[Analytics] Event`, platforms.plausible, platforms.posthog); } else { - await analytics.track(name, { ...data, path }); + if (platforms.plausible) { + await analytics.track(plausible.name, { ...platforms.plausible.data, path }); + } + + if (platforms.posthog) { + posthogEvent.capture(platforms.posthog.name); + } } }; diff --git a/src/lib/components/AppwriteIn100Seconds.svelte b/src/lib/components/AppwriteIn100Seconds.svelte index 686e1e1978..6153e08c44 100644 --- a/src/lib/components/AppwriteIn100Seconds.svelte +++ b/src/lib/components/AppwriteIn100Seconds.svelte @@ -17,7 +17,10 @@