From 2f42c49ae888f96cf0c3ffb1687c3fdb071c68ac Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 12 Jun 2026 21:03:04 +0000 Subject: [PATCH 1/2] Migrate from Segment to PostHog analytics - Replace @segment/snippet package with posthog-js - Create new lib/posthog.ts module with PostHog analytics functions - Update pages/_app.tsx to initialize PostHog and track page views - Remove old lib/analytics.js Segment integration Environment variables: - NEXT_PUBLIC_POSTHOG_KEY: PostHog project API key - NEXT_PUBLIC_POSTHOG_HOST: PostHog API host (optional, defaults to us.i.posthog.com) Resolves KNO-13710 Co-authored-by: Sam Seely --- lib/analytics.js | 39 --------------------- lib/posthog.ts | 58 +++++++++++++++++++++++++++++++ package.json | 2 +- pages/_app.tsx | 8 ++--- yarn.lock | 89 ++++++++++++++++++++++++++++++++++-------------- 5 files changed, 126 insertions(+), 70 deletions(-) delete mode 100644 lib/analytics.js create mode 100644 lib/posthog.ts diff --git a/lib/analytics.js b/lib/analytics.js deleted file mode 100644 index 6b226ec74..000000000 --- a/lib/analytics.js +++ /dev/null @@ -1,39 +0,0 @@ -import * as snippet from "@segment/snippet"; -import Script from "next/script"; - -export function track(eventName, attrs = {}) { - if (typeof window?.analytics?.track === "function") { - window.analytics.track(eventName, attrs); - } -} - -export function page(pageName, properties = {}) { - if (typeof window?.analytics?.page === "function") { - window.analytics.page(pageName, properties); - } -} - -export const SEGMENT_WRITE_KEY = process.env.NEXT_PUBLIC_ANALYTICS_WRITE_KEY; - -function renderSnippet() { - const opts = { - apiKey: SEGMENT_WRITE_KEY, - // note: the page option only covers SSR tracking. - // Page.js is used to track other events using `window.analytics.page()` - page: true, - }; - - if (process.env.NODE_ENV === "development") { - return snippet.max(opts); - } - - return snippet.min(opts); -} - -export const Snippet = () => ( -