From 331d0a38e8962ec02630475ba684287d10f736b0 Mon Sep 17 00:00:00 2001 From: Matt Rubens Date: Tue, 24 Jun 2025 16:40:25 -0400 Subject: [PATCH] Add client-side posthog (#134) --- apps/web/package.json | 1 + apps/web/src/instrumentation-client.ts | 9 +++--- pnpm-lock.yaml | 41 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index cf38c7d64c..2d250e2eb4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -56,6 +56,7 @@ "pino": "^9.7.0", "pino-pretty": "^13.0.0", "postgres": "^3.4.7", + "posthog-js": "^1.255.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-hook-form": "^7.56.4", diff --git a/apps/web/src/instrumentation-client.ts b/apps/web/src/instrumentation-client.ts index fd8ad296bc..6aabc3558e 100644 --- a/apps/web/src/instrumentation-client.ts +++ b/apps/web/src/instrumentation-client.ts @@ -4,7 +4,7 @@ // Note: User context (userId, orgId, orgRole) is set via SentryUserContext component import * as Sentry from '@sentry/nextjs'; -// import * as Spotlight from '@spotlightjs/spotlight'; +import posthog from 'posthog-js'; Sentry.init({ dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, @@ -24,9 +24,10 @@ Sentry.init({ ], }); -// if (process.env.NODE_ENV === 'development') { -// Spotlight.init(); -// } +posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, { + api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST, + defaults: '2025-05-24', +}); // This export will instrument router navigations, and is only relevant if you enable tracing. // `captureRouterTransitionStart` is available from SDK version 9.12.0 onwards diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3100c9839b..cae020f2e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -272,6 +272,9 @@ importers: postgres: specifier: ^3.4.7 version: 3.4.7 + posthog-js: + specifier: ^1.255.1 + version: 1.255.1 react: specifier: ^19.1.0 version: 19.1.0 @@ -3310,6 +3313,9 @@ packages: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} hasBin: true + core-js@3.43.0: + resolution: {integrity: sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3900,6 +3906,9 @@ packages: picomatch: optional: true + fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -5342,6 +5351,20 @@ packages: resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} engines: {node: '>=12'} + posthog-js@1.255.1: + resolution: {integrity: sha512-KMh0o9MhORhEZVjXpktXB5rJ8PfDk+poqBoTSoLzWgNjhJf6D8jcyB9jUMA6vVPfn4YeepVX5NuclDRqOwr5Mw==} + peerDependencies: + '@rrweb/types': 2.0.0-alpha.17 + rrweb-snapshot: 2.0.0-alpha.17 + peerDependenciesMeta: + '@rrweb/types': + optional: true + rrweb-snapshot: + optional: true + + preact@10.26.9: + resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6464,6 +6487,9 @@ packages: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9527,6 +9553,8 @@ snapshots: untildify: 4.0.0 yargs: 16.2.0 + core-js@3.43.0: {} + core-util-is@1.0.3: {} cron-parser@4.9.0: @@ -10188,6 +10216,8 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fflate@0.4.8: {} + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -11777,6 +11807,15 @@ snapshots: postgres@3.4.7: {} + posthog-js@1.255.1: + dependencies: + core-js: 3.43.0 + fflate: 0.4.8 + preact: 10.26.9 + web-vitals: 4.2.4 + + preact@10.26.9: {} + prelude-ls@1.2.1: {} prettier@3.5.3: {} @@ -13234,6 +13273,8 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + web-vitals@4.2.4: {} + webidl-conversions@3.0.1: {} webidl-conversions@7.0.0: {}