diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/links/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/links/page-client.tsx index 51f7e43c81f..ce942b011b3 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/links/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/links/page-client.tsx @@ -36,24 +36,12 @@ import { useRouterStuff, } from "@dub/ui"; import { Download, Globe, TableIcon, Tag } from "@dub/ui/icons"; -import { useSession } from "next-auth/react"; import { useRouter, useSearchParams } from "next/navigation"; -import posthog from "posthog-js"; import { ReactNode, useEffect, useState } from "react"; export default function WorkspaceLinksClient() { - const { data: session } = useSession(); const { folderId } = useCurrentFolderId(); - useEffect(() => { - if (session?.user) { - posthog.identify(session.user["id"], { - email: session.user.email, - name: session.user.name, - }); - } - }, [session?.user]); - return ( { plausible("Signed Up"); - if (session?.user) { - posthog.identify(session.user["id"], { - email: session.user.email, - name: session.user.name, - }); - posthog.capture("user_signed_up"); - } }, [session?.user]); return null; diff --git a/apps/web/app/providers.tsx b/apps/web/app/providers.tsx index 546fcd6f1d5..6bbc8a6721e 100644 --- a/apps/web/app/providers.tsx +++ b/apps/web/app/providers.tsx @@ -1,49 +1,28 @@ "use client"; -import { PosthogPageview } from "@/ui/layout/posthog-pageview"; import { Analytics as DubAnalytics } from "@dub/analytics/react"; -import { - KeyboardShortcutProvider, - TooltipProvider, - useRemoveGAParams, -} from "@dub/ui"; +import { KeyboardShortcutProvider, TooltipProvider } from "@dub/ui"; import PlausibleProvider from "next-plausible"; -import posthog from "posthog-js"; -import { PostHogProvider } from "posthog-js/react"; import { ReactNode } from "react"; import { Toaster } from "sonner"; -if (typeof window !== "undefined" && process.env.NEXT_PUBLIC_POSTHOG_KEY) { - posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, { - ui_host: "https://us.posthog.com", - person_profiles: "identified_only", - capture_pageview: false, // Disable automatic pageview capture, as we capture manually - capture_pageleave: true, // Enable pageleave capture - }); -} - export default function RootProviders({ children }: { children: ReactNode }) { - useRemoveGAParams(); - return ( - + - - - - - {children} - - - - + + + {children} + + + ); } diff --git a/apps/web/package.json b/apps/web/package.json index 78b4a1f4dd4..5782c052db7 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -108,7 +108,6 @@ "openapi-types": "^12.1.3", "openapi3-ts": "^4.2.1", "openid-client": "^6.8.0", - "posthog-js": "^1.164.1", "react": "19.1.3", "react-colorful": "^5.6.1", "react-dom": "19.1.3", diff --git a/apps/web/ui/analytics/use-analytics-filters.tsx b/apps/web/ui/analytics/use-analytics-filters.tsx index 90760e0ffbe..d7853448c7d 100644 --- a/apps/web/ui/analytics/use-analytics-filters.tsx +++ b/apps/web/ui/analytics/use-analytics-filters.tsx @@ -50,7 +50,6 @@ import { REGIONS, } from "@dub/utils"; import { useParams } from "next/navigation"; -import posthog from "posthog-js"; import { ComponentProps, ContextType, @@ -839,10 +838,6 @@ export function useAnalyticsFilters({ }); } } - posthog.capture("ai_filters_generated", { - prompt, - filters: activeFilters, - }); setStreaming(false); } else { queryParams({ diff --git a/apps/web/ui/domains/add-edit-domain-form.tsx b/apps/web/ui/domains/add-edit-domain-form.tsx index 763e2935073..6a8a10c8d12 100644 --- a/apps/web/ui/domains/add-edit-domain-form.tsx +++ b/apps/web/ui/domains/add-edit-domain-form.tsx @@ -30,7 +30,6 @@ import { TextCursorInput, } from "lucide-react"; import { motion } from "motion/react"; -import posthog from "posthog-js"; import { FormEvent, useEffect, useMemo, useRef, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -249,7 +248,6 @@ export function AddEditDomainForm({ mutatePrefix("/api/links"), ]); const data = await res.json(); - posthog.capture(props ? "domain_updated" : "domain_created", data); toast.success(endpoint.successMessage); onSuccess?.(data); } else { diff --git a/apps/web/ui/layout/posthog-pageview.tsx b/apps/web/ui/layout/posthog-pageview.tsx deleted file mode 100644 index fd7a86386a4..00000000000 --- a/apps/web/ui/layout/posthog-pageview.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { usePathname, useSearchParams } from "next/navigation"; -import { usePostHog } from "posthog-js/react"; -import { Suspense, useEffect } from "react"; - -export function PosthogPageview() { - return ( - - - - ); -} - -const PosthogPageviewClient = () => { - const pathname = usePathname(); - const searchParams = useSearchParams(); - const posthog = usePostHog(); - useEffect(() => { - // Track pageviews - if (pathname && posthog) { - let url = window.origin + pathname; - if (searchParams.toString()) { - url = url + `?${searchParams.toString()}`; - } - posthog.capture("$pageview", { - $current_url: url, - }); - } - }, [pathname, searchParams, posthog]); - - return null; -}; diff --git a/apps/web/ui/links/link-builder/tag-select.tsx b/apps/web/ui/links/link-builder/tag-select.tsx index 23d40352ee7..3c7c1864432 100644 --- a/apps/web/ui/links/link-builder/tag-select.tsx +++ b/apps/web/ui/links/link-builder/tag-select.tsx @@ -15,7 +15,6 @@ import { Tooltip, } from "@dub/ui"; import { cn } from "@dub/utils"; -import posthog from "posthog-js"; import { memo, useEffect, useMemo, useState } from "react"; import { useFormContext, useWatch } from "react-hook-form"; import { toast } from "sonner"; @@ -241,10 +240,6 @@ export const TagSelect = memo(() => { setSuggestedTags((tags) => tags.filter(({ id }) => id !== tag.id), ); - posthog.capture("ai_suggested_tag_selected", { - tag: tag.name, - url: url, - }); }} className="group flex items-center transition-all active:scale-95" > diff --git a/apps/web/ui/links/link-builder/use-link-builder-submit.tsx b/apps/web/ui/links/link-builder/use-link-builder-submit.tsx index 8df8f2d924c..d61ea6d8904 100644 --- a/apps/web/ui/links/link-builder/use-link-builder-submit.tsx +++ b/apps/web/ui/links/link-builder/use-link-builder-submit.tsx @@ -2,7 +2,6 @@ import { mutatePrefix } from "@/lib/swr/mutate"; import { UpgradeRequiredToast } from "@/ui/shared/upgrade-required-toast"; import { Button, useCopyToClipboard } from "@dub/ui"; import { useRouter } from "next/navigation"; -import posthog from "posthog-js"; import { useCallback } from "react"; import { useFormContext } from "react-hook-form"; import { toast } from "sonner"; @@ -80,7 +79,6 @@ export function useLinkBuilderSubmit({ // if updating root domain link, mutate domains as well ...(getValues("key") === "_root" ? ["/api/domains"] : []), ]); - posthog.capture(props ? "link_updated" : "link_created", data); // copy shortlink to clipboard when adding a new link if (!props) { diff --git a/apps/web/ui/links/short-link-input.tsx b/apps/web/ui/links/short-link-input.tsx index 26b092094aa..290dfa2ef43 100644 --- a/apps/web/ui/links/short-link-input.tsx +++ b/apps/web/ui/links/short-link-input.tsx @@ -29,7 +29,6 @@ import { } from "@dub/utils"; import { TriangleAlert } from "lucide-react"; import { useParams, usePathname } from "next/navigation"; -import posthog from "posthog-js"; import { forwardRef, HTMLProps, @@ -168,10 +167,6 @@ export const ShortLinkInput = forwardRef( onFinish: (_, completion) => { setGeneratedKeys((prev) => [...prev, completion]); mutateWorkspace(); - posthog.capture("ai_key_generated", { - key: completion, - url: data.url, - }); }, }); diff --git a/apps/web/ui/modals/add-edit-tag-modal.tsx b/apps/web/ui/modals/add-edit-tag-modal.tsx index e526448b257..42234ecbd15 100644 --- a/apps/web/ui/modals/add-edit-tag-modal.tsx +++ b/apps/web/ui/modals/add-edit-tag-modal.tsx @@ -17,7 +17,6 @@ import { useMediaQuery, } from "@dub/ui"; import { capitalize, cn, pluralize } from "@dub/utils"; -import posthog from "posthog-js"; import { Dispatch, FormEvent, @@ -120,11 +119,6 @@ function AddEditTagModal({ }), }).then(async (res) => { if (res.status === 200 || res.status === 201) { - posthog.capture(props ? "tag_edited" : "tag_created", { - tag_id: data.id, - tag_name: data.name, - tag_color: data.color, - }); await mutatePrefix(["/api/tags", "/api/links"]); toast.success(endpoint.successMessage); setShowAddEditTagModal(false); diff --git a/apps/web/ui/modals/add-edit-utm-template.modal.tsx b/apps/web/ui/modals/add-edit-utm-template.modal.tsx index a8a79dcc19e..87969c288ce 100644 --- a/apps/web/ui/modals/add-edit-utm-template.modal.tsx +++ b/apps/web/ui/modals/add-edit-utm-template.modal.tsx @@ -7,7 +7,6 @@ import { useMediaQuery, UTMBuilder, } from "@dub/ui"; -import posthog from "posthog-js"; import { Dispatch, SetStateAction, @@ -95,13 +94,6 @@ function AddEditUtmTemplateModal({ return; } - posthog.capture( - props ? "utm-template_edited" : "utm-template_created", - { - utmTemplateId: id, - utmTemplateName: data.name, - }, - ); await mutate(`/api/utm?workspaceId=${workspaceId}`); toast.success(endpoint.successMessage); setShowAddEditUtmTemplateModal(false); diff --git a/apps/web/ui/modals/link-builder/og-modal.tsx b/apps/web/ui/modals/link-builder/og-modal.tsx index 1dc31b249d1..6269a240eb3 100644 --- a/apps/web/ui/modals/link-builder/og-modal.tsx +++ b/apps/web/ui/modals/link-builder/og-modal.tsx @@ -17,7 +17,6 @@ import { } from "@dub/ui"; import { LoadingCircle, Magic, Unsplash } from "@dub/ui/icons"; import { resizeImage } from "@dub/utils"; -import posthog from "posthog-js"; import { Dispatch, SetStateAction, @@ -120,12 +119,8 @@ function OGModalInner({ toast.error(error.message); } }, - onFinish: (_, completion) => { + onFinish: () => { mutate(); - posthog.capture("ai_meta_title_generated", { - title: completion, - url, - }); }, }); @@ -170,12 +165,8 @@ function OGModalInner({ toast.error(error.message); } }, - onFinish: (_, completion) => { + onFinish: (_, __) => { mutate(); - posthog.capture("ai_meta_description_generated", { - description: completion, - url, - }); }, }); diff --git a/apps/web/ui/modals/upgraded-modal.tsx b/apps/web/ui/modals/upgraded-modal.tsx index c46d29cf352..057d7b18173 100644 --- a/apps/web/ui/modals/upgraded-modal.tsx +++ b/apps/web/ui/modals/upgraded-modal.tsx @@ -4,7 +4,6 @@ import { Button, Modal, useRouterStuff, useScrollProgress } from "@dub/ui"; import { getPlanDetails, PLANS, PRO_PLAN } from "@dub/utils"; import { usePlausible } from "next-plausible"; import { useSearchParams } from "next/navigation"; -import posthog from "posthog-js"; import { Dispatch, SetStateAction, @@ -43,11 +42,6 @@ function UpgradedModal({ const period = searchParams.get("period"); if (currentPlan && period) { plausible(`Upgraded to ${currentPlan.name}`); - posthog.capture("plan_upgraded", { - plan: currentPlan.name, - period, - revenue: currentPlan.price[period], - }); } } }; diff --git a/apps/web/ui/workspaces/create-workspace-form.tsx b/apps/web/ui/workspaces/create-workspace-form.tsx index 238845d6368..9ae86d7d722 100644 --- a/apps/web/ui/workspaces/create-workspace-form.tsx +++ b/apps/web/ui/workspaces/create-workspace-form.tsx @@ -7,7 +7,6 @@ import { cn } from "@dub/utils"; import slugify from "@sindresorhus/slugify"; import { useSession } from "next-auth/react"; import { usePlausible } from "next-plausible"; -import posthog from "posthog-js"; import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -85,11 +84,6 @@ export function CreateWorkspaceForm({ const { id: workspaceId } = await res.json(); plausible("Created Workspace"); // track workspace creation event - posthog.capture("workspace_created", { - workspace_id: workspaceId, - workspace_name: data.name, - workspace_slug: data.slug, - }); await Promise.all([mutate("/api/workspaces"), update()]); onSuccess?.(data); } else { diff --git a/apps/web/ui/workspaces/invite-teammates-form.tsx b/apps/web/ui/workspaces/invite-teammates-form.tsx index c1e1ab6aba9..73f8a9d5a67 100644 --- a/apps/web/ui/workspaces/invite-teammates-form.tsx +++ b/apps/web/ui/workspaces/invite-teammates-form.tsx @@ -10,7 +10,6 @@ import { Button, useMediaQuery, useRouterStuff } from "@dub/ui"; import { Trash } from "@dub/ui/icons"; import { cn, pluralize } from "@dub/utils"; import { Plus } from "lucide-react"; -import posthog from "posthog-js"; import { useMemo } from "react"; import { useFieldArray, useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -75,12 +74,6 @@ export function InviteTeammatesForm({ }, }); - teammates.forEach(({ email }) => - posthog.capture("teammate_invited", { - workspace: slug, - invitee_email: email, - }), - ); onSuccess?.(); } else { const { error } = await res.json(); diff --git a/apps/web/ui/workspaces/upgrade-plan-button.tsx b/apps/web/ui/workspaces/upgrade-plan-button.tsx index fa38c334b41..53a9e657143 100644 --- a/apps/web/ui/workspaces/upgrade-plan-button.tsx +++ b/apps/web/ui/workspaces/upgrade-plan-button.tsx @@ -7,7 +7,6 @@ import { Button, ButtonProps } from "@dub/ui"; import { APP_DOMAIN, capitalize, SELF_SERVE_PAID_PLANS } from "@dub/utils"; import { usePlausible } from "next-plausible"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; -import posthog from "posthog-js"; import { useState } from "react"; import { usePlanChangeConfirmationModal } from "../modals/plan-change-confirmation-modal"; @@ -27,6 +26,7 @@ export function UpgradePlanButton({ const { slug: workspaceSlug, plan: currentPlan, + stripeId, defaultProgramId, } = useWorkspace(); @@ -69,11 +69,7 @@ export function UpgradePlanButton({ }) .then(async (res) => { plausible("Opened Checkout"); - posthog.capture("checkout_opened", { - currentPlan: capitalize(plan), - newPlan: selectedPlan.name, - }); - if (currentPlan === "free") { + if (!stripeId || currentPlan === "free") { const data = await res.json(); const { id: sessionId } = data; const stripe = await getStripe(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb246d31c97..3b739243c73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -311,9 +311,6 @@ importers: openid-client: specifier: ^6.8.0 version: 6.8.0 - posthog-js: - specifier: ^1.164.1 - version: 1.164.1 react: specifier: 19.1.3 version: 19.1.3 @@ -8108,9 +8105,6 @@ packages: fetch-retry@6.0.0: resolution: {integrity: sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag==} - fflate@0.4.8: - resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} - fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} @@ -10779,17 +10773,11 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - posthog-js@1.164.1: - resolution: {integrity: sha512-cEWPJmg7V9EgpHLW+FfhQ0GBPd0uVc77MCWTJtnOWp88rIThDXbCwug+OPFzos/7puWqMYXo+mwQNjW8aL4SeQ==} - preact-render-to-string@5.2.6: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' - preact@10.22.1: - resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} - preact@10.24.3: resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} @@ -13056,9 +13044,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - web-vitals@4.2.2: - resolution: {integrity: sha512-nYfoOqb4EmElljyXU2qdeE76KsvoHdftQKY4DzA9Aw8DervCg2bG634pHLrJ/d6+B4mE3nWTSJv8Mo7B2mbZkw==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -22174,8 +22159,6 @@ snapshots: fetch-retry@6.0.0: {} - fflate@0.4.8: {} - fflate@0.7.4: {} fflate@0.8.2: {} @@ -25542,19 +25525,11 @@ snapshots: dependencies: xtend: 4.0.2 - posthog-js@1.164.1: - dependencies: - fflate: 0.4.8 - preact: 10.22.1 - web-vitals: 4.2.2 - preact-render-to-string@5.2.6(preact@10.24.3): dependencies: preact: 10.24.3 pretty-format: 3.8.0 - preact@10.22.1: {} - preact@10.24.3: {} prebuild-install@7.1.3: @@ -28409,8 +28384,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - web-vitals@4.2.2: {} - webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {}