From d0c2314ebf98c4f04413508f44a41097ad50a702 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 17 Jun 2025 22:45:06 +0100 Subject: [PATCH] feat: add posthog analytics --- apps/web/package.json | 1 + apps/web/src/env.ts | 4 ++++ apps/web/src/pages/_app.tsx | 29 ++++++++++++++++++++++++-- docker-compose-old.yml | 2 ++ docker-compose.yml | 2 ++ pnpm-lock.yaml | 41 +++++++++++++++++++++++++++++++++++++ 6 files changed, 77 insertions(+), 2 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index b9dd0649..81f8a2fc 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -42,6 +42,7 @@ "next-runtime-env": "^1.7.2", "nextjs-cors": "^2.2.0", "pino": "^9.6.0", + "posthog-js": "^1.254.0", "react": "catalog:react18", "react-beautiful-dnd": "^13.1.1", "react-contenteditable": "^3.3.7", diff --git a/apps/web/src/env.ts b/apps/web/src/env.ts index dee7f7ca..194b99c3 100644 --- a/apps/web/src/env.ts +++ b/apps/web/src/env.ts @@ -79,6 +79,8 @@ export const env = createEnv({ client: { NEXT_PUBLIC_KAN_ENV: z.string().optional(), NEXT_PUBLIC_UMAMI_ID: z.string().optional(), + NEXT_PUBLIC_POSTHOG_KEY: z.string().optional(), + NEXT_PUBLIC_POSTHOG_HOST: z.string().optional(), NEXT_PUBLIC_BASE_URL: z.string().url(), NEXT_PUBLIC_STORAGE_URL: z.string().url().optional(), NEXT_PUBLIC_AVATAR_BUCKET_NAME: z.string().optional(), @@ -105,6 +107,8 @@ export const env = createEnv({ NEXT_PUBLIC_KAN_ENV: process.env.NEXT_PUBLIC_KAN_ENV, NODE_ENV: process.env.NODE_ENV, NEXT_PUBLIC_UMAMI_ID: process.env.NEXT_PUBLIC_UMAMI_ID, + NEXT_PUBLIC_POSTHOG_KEY: process.env.NEXT_PUBLIC_POSTHOG_KEY, + NEXT_PUBLIC_POSTHOG_HOST: process.env.NEXT_PUBLIC_POSTHOG_HOST, NEXT_PUBLIC_BASE_URL: process.env.NEXT_PUBLIC_BASE_URL, NEXT_PUBLIC_STORAGE_URL: process.env.NEXT_PUBLIC_STORAGE_URL, NEXT_PUBLIC_AVATAR_BUCKET_NAME: process.env.NEXT_PUBLIC_AVATAR_BUCKET_NAME, diff --git a/apps/web/src/pages/_app.tsx b/apps/web/src/pages/_app.tsx index 480a955b..058ba624 100644 --- a/apps/web/src/pages/_app.tsx +++ b/apps/web/src/pages/_app.tsx @@ -2,7 +2,11 @@ import "~/styles/globals.css"; import type { AppType } from "next/app"; import { Plus_Jakarta_Sans } from "next/font/google"; +import Script from "next/script"; import { env } from "next-runtime-env"; +import posthog from "posthog-js"; +import { PostHogProvider } from "posthog-js/react"; +import { useEffect } from "react"; import { ModalProvider } from "~/providers/modal"; import { PopupProvider } from "~/providers/popup"; @@ -21,6 +25,21 @@ export const metadata = { }; const MyApp: AppType = ({ Component, pageProps }) => { + const posthogKey = env("NEXT_PUBLIC_POSTHOG_KEY"); + + useEffect(() => { + if (posthogKey) { + posthog.init(posthogKey, { + api_host: env("NEXT_PUBLIC_POSTHOG_HOST"), + person_profiles: "identified_only", + defaults: "2025-05-24", + loaded: (posthog) => { + if (process.env.NODE_ENV === "development") posthog.debug(); + }, + }); + } + }, [posthogKey]); + return ( <> {env("NEXT_PUBLIC_UMAMI_ID") && ( -