mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-17 12:20:04 +00:00
88 lines
2 KiB
TypeScript
88 lines
2 KiB
TypeScript
"use client"
|
|
|
|
import { usePathname, useSearchParams } from "next/navigation"
|
|
import posthog from "posthog-js"
|
|
import { Suspense, useEffect } from "react"
|
|
import { useSession } from "./auth"
|
|
|
|
function PostHogPageTracking() {
|
|
const pathname = usePathname()
|
|
const searchParams = useSearchParams()
|
|
|
|
// Page tracking
|
|
useEffect(() => {
|
|
if (pathname && posthog.__loaded) {
|
|
let url = window.origin + pathname
|
|
if (searchParams.toString()) {
|
|
url = `${url}?${searchParams.toString()}`
|
|
}
|
|
|
|
// Extract page context for better tracking
|
|
const pageContext = {
|
|
$current_url: url,
|
|
path: pathname,
|
|
search_params: searchParams.toString(),
|
|
page_type: getPageType(),
|
|
org_slug: getOrgSlug(pathname),
|
|
}
|
|
|
|
posthog.capture("$pageview", pageContext)
|
|
}
|
|
}, [pathname, searchParams])
|
|
|
|
return null
|
|
}
|
|
|
|
export function PostHogProvider({ children }: { children: React.ReactNode }) {
|
|
const { data: session } = useSession()
|
|
|
|
useEffect(() => {
|
|
if (typeof window !== "undefined") {
|
|
const backendUrl =
|
|
process.env.NEXT_PUBLIC_BACKEND_URL ?? "https://api.supermemory.ai"
|
|
|
|
posthog.init("phc_ShqecfUPQgf16lWu6ZMUzduQvcWzCywrkCz5KHwmWsv", {
|
|
api_host: `${backendUrl}/orange`,
|
|
ui_host: "https://us.i.posthog.com",
|
|
person_profiles: "identified_only",
|
|
capture_pageview: false,
|
|
capture_pageleave: true,
|
|
loaded: (ph) => ph.register({ app: "app" }),
|
|
})
|
|
}
|
|
}, [])
|
|
|
|
// User identification
|
|
useEffect(() => {
|
|
if (session?.user && posthog.__loaded) {
|
|
posthog.identify(session.user.id, {
|
|
email: session.user.email,
|
|
name: session.user.name,
|
|
userId: session.user.id,
|
|
createdAt: session.user.createdAt,
|
|
})
|
|
}
|
|
}, [session?.user])
|
|
|
|
return (
|
|
<>
|
|
<Suspense fallback={null}>
|
|
{process.env.NODE_ENV === "production" && <PostHogPageTracking />}
|
|
</Suspense>
|
|
{children}
|
|
</>
|
|
)
|
|
}
|
|
|
|
function getPageType(): string {
|
|
return "other"
|
|
}
|
|
|
|
function getOrgSlug(pathname: string): string | null {
|
|
const match = pathname.match(/^\/([^/]+)\//)
|
|
return match ? (match[1] ?? null) : null
|
|
}
|
|
|
|
export function usePostHog() {
|
|
return posthog
|
|
}
|