From 6a22e9c0f8fbfb7bf111be0fb26e2bc4b9885341 Mon Sep 17 00:00:00 2001 From: Arjun Komath Date: Fri, 24 Oct 2025 22:36:52 +1100 Subject: [PATCH] Remove posthog --- CLAUDE.md | 2 +- app/layout.tsx | 17 ++++---- build.Dockerfile | 2 - bun.lock | 17 ++------ components/core/posthog-provider.tsx | 58 ---------------------------- lib/posthog.ts | 11 ------ next.config.mjs | 15 ------- package.json | 3 +- 8 files changed, 13 insertions(+), 112 deletions(-) delete mode 100644 components/core/posthog-provider.tsx delete mode 100644 lib/posthog.ts diff --git a/CLAUDE.md b/CLAUDE.md index 1d4c0ff9..7bd75ac1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,7 +29,7 @@ bun run migrate:tenants # Migrate all tenant databases (CI/CD - IDs are masked - **Email**: React Email + Resend - **File Storage**: S3-compatible storage - **Search**: Upstash Search for full-text search with filtering -- **Monitoring**: Sentry + PostHog +- **Monitoring**: Sentry - **Linting**: Biome (not ESLint) ### Directory Structure diff --git a/app/layout.tsx b/app/layout.tsx index 337b2868..10922424 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,6 +1,6 @@ import { ClerkProvider } from "@clerk/nextjs"; +import { Analytics } from "@vercel/analytics/next"; import { Geist } from "next/font/google"; -import { PostHogProvider } from "@/components/core/posthog-provider"; import { ThemeProvider } from "@/components/core/theme-provider"; import { Toaster } from "@/components/ui/sonner"; import { SITE_METADATA } from "@/data/marketing"; @@ -322,14 +322,13 @@ export default function RootLayout({ /> - - - - - {children} - - - + + + + {children} + + + ); diff --git a/build.Dockerfile b/build.Dockerfile index 5e53afb3..320e941e 100644 --- a/build.Dockerfile +++ b/build.Dockerfile @@ -2,8 +2,6 @@ FROM oven/bun:slim AS base ARG NEXT_PUBLIC_APP_URL ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -ARG NEXT_PUBLIC_POSTHOG_KEY -ARG NEXT_PUBLIC_POSTHOG_HOST ARG QSTASH_URL ARG QSTASH_TOKEN ARG QSTASH_CURRENT_SIGNING_KEY diff --git a/bun.lock b/bun.lock index aa5e47f8..0e7895f6 100644 --- a/bun.lock +++ b/bun.lock @@ -41,6 +41,7 @@ "@upstash/redis": "^1.35.3", "@upstash/search": "^0.1.5", "@upstash/workflow": "^0.2.16", + "@vercel/analytics": "^1.5.0", "autoprefixer": "10.4.14", "babel-plugin-react-compiler": "^1.0.0", "caniuse-lite": "^1.0.30001737", @@ -64,8 +65,6 @@ "nuqs": "^2.4.1", "postcss": "8.4.23", "postgres": "^3.4.7", - "posthog-js": "^1.242.2", - "posthog-node": "^4.17.1", "react": "19.2.0", "react-day-picker": "^8.10.1", "react-dom": "19.2.0", @@ -1092,6 +1091,8 @@ "@upstash/workflow": ["@upstash/workflow@0.2.16", "", { "dependencies": { "@ai-sdk/openai": "^1.2.1", "@upstash/qstash": "^2.8.1", "ai": "^4.1.54", "zod": "^3.24.1" } }, "sha512-9mqC3p5B9i92gf1KMEZhDcU5YMEut0hkWxmf2gsDcJVCcbLD958MEDT2q2wGZa7MnKAuvEOYNDSefi0x2a5pGQ=="], + "@vercel/analytics": ["@vercel/analytics@1.5.0", "", { "peerDependencies": { "@remix-run/react": "^2", "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@remix-run/react", "@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g=="], + "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="], @@ -1298,8 +1299,6 @@ "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], - "core-js": ["core-js@3.42.0", "", {}, "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g=="], - "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], @@ -1488,8 +1487,6 @@ "fdir": ["fdir@6.4.3", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw=="], - "fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="], - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], @@ -2088,12 +2085,6 @@ "postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="], - "posthog-js": ["posthog-js@1.242.2", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" }, "peerDependencies": { "@rrweb/types": "2.0.0-alpha.17", "rrweb-snapshot": "2.0.0-alpha.17" }, "optionalPeers": ["@rrweb/types", "rrweb-snapshot"] }, "sha512-bj5Bq9Z/TE24k0fbt/VoD13xsqCybuoLp7KkWmfknEiO63+1Ln/PnX/1CjppikE9yM7toQIWY3vY7hT/RTT57Q=="], - - "posthog-node": ["posthog-node@4.17.1", "", { "dependencies": { "axios": "^1.8.2" } }, "sha512-cVlQPOwOPjakUnrueKRCQe1m2Ku+XzKaOos7Tn/zDZkkZFeBT/byP7tbNf7LiwhaBRWFBRowZZb/MsTtSRaorg=="], - - "preact": ["preact@10.26.6", "", {}, "sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], @@ -2512,8 +2503,6 @@ "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - "web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "webpack": ["webpack@5.99.6", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-TJOLrJ6oeccsGWPl7ujCYuc0pIq2cNsuD6GZDma8i5o5Npvcco/z+NKvZSFsP0/x6SShVb0+X2JK/JHUjKY9dQ=="], diff --git a/components/core/posthog-provider.tsx b/components/core/posthog-provider.tsx deleted file mode 100644 index 4557be31..00000000 --- a/components/core/posthog-provider.tsx +++ /dev/null @@ -1,58 +0,0 @@ -"use client"; - -import { usePathname, useSearchParams } from "next/navigation"; -import posthog from "posthog-js"; -import { PostHogProvider as PHProvider, usePostHog } from "posthog-js/react"; -import { Suspense, useEffect } from "react"; - -export function PostHogProvider({ children }: { children: React.ReactNode }) { - useEffect(() => { - if (!process.env.NEXT_PUBLIC_POSTHOG_KEY) { - return; - } - - posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, { - api_host: "/ingest", - ui_host: "https://us.posthog.com", - capture_pageview: false, // We capture pageviews manually - capture_pageleave: true, // Enable pageleave capture - debug: process.env.NODE_ENV === "development", - }); - }, []); - - return process.env.NEXT_PUBLIC_POSTHOG_KEY ? ( - - - {children} - - ) : ( - children - ); -} - -function PostHogPageView() { - const pathname = usePathname(); - const searchParams = useSearchParams(); - const posthog = usePostHog(); - - useEffect(() => { - if (pathname && posthog) { - let url = window.origin + pathname; - const search = searchParams.toString(); - if (search) { - url += `?${search}`; - } - posthog.capture("$pageview", { $current_url: url }); - } - }, [pathname, searchParams, posthog]); - - return null; -} - -function SuspendedPostHogPageView() { - return ( - - - - ); -} diff --git a/lib/posthog.ts b/lib/posthog.ts deleted file mode 100644 index 0e76f4c8..00000000 --- a/lib/posthog.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { PostHog } from "posthog-node"; - -export default function PostHogClient() { - const posthogClient = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, { - host: process.env.NEXT_PUBLIC_POSTHOG_HOST, - flushAt: 1, - flushInterval: 0, - }); - - return posthogClient; -} diff --git a/next.config.mjs b/next.config.mjs index 25f277fb..88937ab5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -10,24 +10,9 @@ const nextConfig = { source: "/api/calendar/:ownerId/:projectId/calendar.ics", destination: "/api/calendar/:ownerId/:projectId", }, - { - source: "/ingest/static/:path*", - destination: "https://us-assets.i.posthog.com/static/:path*", - }, - { - source: "/ingest/:path*", - destination: "https://us.i.posthog.com/:path*", - }, - { - source: "/ingest/decide", - destination: "https://us.i.posthog.com/decide", - }, ]; }, - // This is required to support PostHog trailing slash API requests - skipTrailingSlashRedirect: true, - // output: "standalone", // Uncomment this to enable standalone mode in Docker }; diff --git a/package.json b/package.json index f631a27b..2ea3fb23 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@upstash/redis": "^1.35.3", "@upstash/search": "^0.1.5", "@upstash/workflow": "^0.2.16", + "@vercel/analytics": "^1.5.0", "autoprefixer": "10.4.14", "babel-plugin-react-compiler": "^1.0.0", "caniuse-lite": "^1.0.30001737", @@ -76,8 +77,6 @@ "nuqs": "^2.4.1", "postcss": "8.4.23", "postgres": "^3.4.7", - "posthog-js": "^1.242.2", - "posthog-node": "^4.17.1", "react": "19.2.0", "react-day-picker": "^8.10.1", "react-dom": "19.2.0",