Nick Frostbutter 4 сар өмнө
parent
commit
4a249196e4

+ 2 - 2
.gitignore

@@ -35,6 +35,6 @@ coverage
 # GitHub Pages deploy directory
 .ghpages-deploy
 
-.env
-.env.local
+*.env*
+*.local*
 .vercel

+ 1 - 0
docs/package.json

@@ -19,6 +19,7 @@
     "yarn": "please-use-pnpm"
   },
   "dependencies": {
+    "fathom-client": "^3.7.2",
     "fumadocs-core": "15.2.10",
     "fumadocs-docgen": "^2.0.0",
     "fumadocs-mdx": "11.6.1",

+ 8 - 0
docs/pnpm-lock.yaml

@@ -8,6 +8,9 @@ importers:
 
   .:
     dependencies:
+      fathom-client:
+        specifier: ^3.7.2
+        version: 3.7.2
       fumadocs-core:
         specifier: 15.2.10
         version: 15.2.10(@types/react@19.0.12)(next@15.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -1955,6 +1958,9 @@ packages:
   fastq@1.19.1:
     resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
 
+  fathom-client@3.7.2:
+    resolution: {integrity: sha512-sWtaNivhg7uwp/q1bUuIiNj4LeQZMEZ5NXXFFpZ8le4uDedAfQG84gPOdYehtVXbl+1yX2s8lmXZ2+IQ9a/xxA==}
+
   fdir@6.4.3:
     resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
     peerDependencies:
@@ -5432,6 +5438,8 @@ snapshots:
     dependencies:
       reusify: 1.1.0
 
+  fathom-client@3.7.2: {}
+
   fdir@6.4.3(picomatch@4.0.2):
     optionalDependencies:
       picomatch: 4.0.2

+ 2 - 0
docs/src/app/layout.tsx

@@ -4,6 +4,7 @@ import type { Metadata } from "next";
 import { Inter } from "next/font/google";
 import type { ReactNode } from "react";
 import "./global.css";
+import FathomAnalytics from "@/components/fathom-analytics";
 
 const inter = Inter({
   subsets: ["latin"],
@@ -30,6 +31,7 @@ export default function Layout({ children }: { children: ReactNode }) {
   return (
     <html lang="en" className={inter.className} suppressHydrationWarning>
       <body className="flex flex-col min-h-screen">
+        <FathomAnalytics />
         <RootProvider>{children}</RootProvider>
       </body>
     </html>

+ 40 - 0
docs/src/components/fathom-analytics.tsx

@@ -0,0 +1,40 @@
+"use client";
+import { useEffect, Suspense } from "react";
+import { load, trackPageview } from "fathom-client";
+import { usePathname, useSearchParams } from "next/navigation";
+
+function TrackPageView() {
+  const pathname = usePathname();
+  const searchParams = useSearchParams();
+
+  useEffect(() => {
+    if (process?.env?.NODE_ENV !== "production" || !process.env.NEXT_PUBLIC_FATHOM_ID) {
+      return;
+    }
+
+    load(process.env.NEXT_PUBLIC_FATHOM_ID, {
+      auto: false,
+      // includedDomains: [SITE.domain, `www.${SITE.domain}`],
+    });
+  }, []);
+
+  // Record a page view when route changes (including params)
+  useEffect(() => {
+    if (!pathname) return;
+
+    trackPageview({
+      url: pathname + searchParams.toString(),
+      referrer: document.referrer,
+    });
+  }, [pathname, searchParams]);
+
+  return null;
+}
+
+export default function FathomAnalytics() {
+  return (
+    <Suspense fallback={null}>
+      <TrackPageView />
+    </Suspense>
+  );
+}