@@ -2,9 +2,12 @@ import Head from 'next/head'
22import { Toaster } from 'react-hot-toast'
33import Script from 'next/script'
44import { useRouter } from 'next/router'
5+ import { useEffect } from 'react'
56import type { AppProps } from 'next/app'
67import { Open_Sans } from 'next/font/google'
78import { Analytics } from '@vercel/analytics/react'
9+ import posthog from 'posthog-js'
10+ import { PostHogProvider } from 'posthog-js/react'
811
912import {
1013 AuthContextProvider ,
@@ -28,47 +31,59 @@ function MaiaPlatform({ Component, pageProps }: AppProps) {
2831 const router = useRouter ( )
2932 const isAnalysisPage = router . pathname . startsWith ( '/analysis' )
3033
34+ useEffect ( ( ) => {
35+ posthog . init ( process . env . NEXT_PUBLIC_POSTHOG_KEY ! , {
36+ api_host : '/ingest' ,
37+ ui_host : 'https://us.posthog.com' ,
38+ defaults : '2025-05-24' ,
39+ capture_exceptions : true ,
40+ debug : process . env . NODE_ENV === 'development' ,
41+ } )
42+ } , [ ] )
43+
3144 return (
32- < TourContextProvider >
33- < TourManager />
34- < Compose
35- components = { [
36- ErrorBoundary ,
37- ThemeContextProvider ,
38- WindowSizeContextProvider ,
39- AuthContextProvider ,
40- ModalContextProvider ,
41- ...( isAnalysisPage ? [ AnalysisListContextProvider ] : [ ] ) ,
42- ] }
43- >
44- < Head >
45- < link rel = "icon" type = "image/png" href = "/favicon.png" />
46- < link
47- rel = "stylesheet"
48- href = "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined& display = swap "
49- />
50- </ Head >
51- < div className = { `${ OpenSans . className } app-container` } >
52- < Header />
53- < div className = "content-container" >
54- < Component { ...pageProps } />
45+ < PostHogProvider client = { posthog } >
46+ < TourContextProvider >
47+ < TourManager />
48+ < Compose
49+ components = { [
50+ ErrorBoundary ,
51+ ThemeContextProvider ,
52+ WindowSizeContextProvider ,
53+ AuthContextProvider ,
54+ ModalContextProvider ,
55+ ...( isAnalysisPage ? [ AnalysisListContextProvider ] : [ ] ) ,
56+ ] }
57+ >
58+ < Head >
59+ < link rel = "icon" type = "image/png" href = "/favicon.png" />
60+ < link
61+ rel = "stylesheet"
62+ href = "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined& display = swap "
63+ />
64+ </ Head >
65+ < div className = { `${ OpenSans . className } app-container` } >
66+ < Header />
67+ < div className = "content-container" >
68+ < Component { ...pageProps } />
69+ </ div >
70+ < Footer />
5571 </ div >
56- < Footer />
57- </ div >
58- < Toaster position = "bottom-right" />
59- < Analytics />
60- < Script async src = "/analytics.js?id=G-SNP84LXLKY" />
61- < Script id = "analytics" >
62- { `
72+ < Toaster position = "bottom-right" />
73+ < Analytics />
74+ < Script async src = "/analytics.js?id=G-SNP84LXLKY" />
75+ < Script id = "analytics" >
76+ { `
6377 window.dataLayer = window.dataLayer || [];
6478 function gtag(){dataLayer.push(arguments);}
6579 gtag('js', new Date());
6680
6781 gtag('config', 'G-SNP84LXLKY');
6882 ` }
69- </ Script >
70- </ Compose >
71- </ TourContextProvider >
83+ </ Script >
84+ </ Compose >
85+ </ TourContextProvider >
86+ </ PostHogProvider >
7287 )
7388}
7489
0 commit comments