diff --git a/extras/web/app/layout.tsx b/extras/web/app/layout.tsx
index 2e5719345e..a28c1043ea 100644
--- a/extras/web/app/layout.tsx
+++ b/extras/web/app/layout.tsx
@@ -1,5 +1,6 @@
import type { Metadata } from 'next'
import localFont from 'next/font/local'
+import { Analytics } from '@vercel/analytics/next'
import './globals.css'
const geistSans = localFont({
@@ -23,7 +24,10 @@ export default function RootLayout({
}>) {
return (
-
{children}
+
+ {children}
+
+
)
}
diff --git a/extras/web/package.json b/extras/web/package.json
index 65bb5be430..f413f8d4db 100644
--- a/extras/web/package.json
+++ b/extras/web/package.json
@@ -13,6 +13,7 @@
},
"dependencies": {
"@repo/ui": "workspace:^",
+ "@vercel/analytics": "^1.6.1",
"next": "^15.5.10",
"react": "^19.2.3",
"react-dom": "^19.2.3"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3a0e98430..f371e15feb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -75,6 +75,9 @@ importers:
'@repo/ui':
specifier: workspace:^
version: link:../../repo/ui
+ '@vercel/analytics':
+ specifier: ^1.6.1
+ version: 1.6.1(next@15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
next:
specifier: ^15.5.10
version: 15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -1447,6 +1450,32 @@ packages:
resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@vercel/analytics@1.6.1':
+ resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==}
+ 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
+ peerDependenciesMeta:
+ '@remix-run/react':
+ optional: true
+ '@sveltejs/kit':
+ optional: true
+ next:
+ optional: true
+ react:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
+ vue-router:
+ optional: true
+
'@vitest/coverage-v8@4.0.18':
resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==}
peerDependencies:
@@ -1645,6 +1674,7 @@ packages:
basic-ftp@5.0.5:
resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
engines: {node: '>=10.0.0'}
+ deprecated: Security vulnerability fixed in 5.2.0, please upgrade
better-path-resolve@1.0.0:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
@@ -3444,6 +3474,7 @@ packages:
syncpack@14.0.0:
resolution: {integrity: sha512-OfAa3Oip5YC9Ad1jEs92Hw08Wy4JfdpdeequIwaJGsQG0tJtb8gpQfCdLuBefsk6n8WiUdt/5qmzcW+BDXtzbQ==}
engines: {node: '>=14.17.0'}
+ deprecated: 'pnpm users: upgrade to 14.0.2 or newer'
hasBin: true
term-size@2.2.1:
@@ -4714,6 +4745,11 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
+ '@vercel/analytics@1.6.1(next@15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)':
+ optionalDependencies:
+ next: 15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+
'@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0))':
dependencies:
'@bcoe/v8-coverage': 1.0.2