diff --git a/apps/web/package.json b/apps/web/package.json
index a5f6041..1a6703d 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -29,6 +29,7 @@
"@slotscope/semantics": "workspace:*",
"@slotscope/session": "workspace:*",
"@slotscope/ui": "workspace:*",
+ "@vercel/analytics": "2.0.1",
"react": "19.2.8",
"react-dom": "19.2.8"
},
diff --git a/apps/web/src/app/App.tsx b/apps/web/src/app/App.tsx
index c644908..600dda4 100644
--- a/apps/web/src/app/App.tsx
+++ b/apps/web/src/app/App.tsx
@@ -37,6 +37,7 @@ import { InstrumentHeader } from './InstrumentHeader';
import { ChallengePane } from '../challenges/ChallengePane';
import { OnboardingTour } from '../onboarding/OnboardingTour';
import { CommandPalette, type PaletteCommand } from '../palette/CommandPalette';
+import { Analytics } from '@vercel/analytics/react';
import { useOwnerHues, useRelationHighlights } from './hooks';
import { buildRelationIndex } from './relationIndex';
import { resolveSelection } from './selectArtifact';
@@ -703,6 +704,7 @@ export function App() {
{announcement}
+
);
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 816a57c..824876d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -107,6 +107,9 @@ importers:
'@slotscope/ui':
specifier: workspace:*
version: link:../../packages/ui
+ '@vercel/analytics':
+ specifier: 2.0.1
+ version: 2.0.1(react@19.2.8)
react:
specifier: 19.2.8
version: 19.2.8
@@ -813,6 +816,35 @@ packages:
resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@vercel/analytics@2.0.1':
+ resolution: {integrity: sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==}
+ peerDependencies:
+ '@remix-run/react': ^2
+ '@sveltejs/kit': ^1 || ^2
+ next: '>= 13'
+ nuxt: '>= 3'
+ 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
+ nuxt:
+ optional: true
+ react:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
+ vue-router:
+ optional: true
+
'@vitejs/plugin-react@6.0.4':
resolution: {integrity: sha512-XcCQz0TBpBgljhj0gMuuDj49i6Ytqh5q1osT/Gp5uAVJUCTWxyskk/l1jwYYiu2xcNHHipdMz40EGfM1VdamVg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2114,6 +2146,10 @@ snapshots:
'@typescript-eslint/types': 8.65.0
eslint-visitor-keys: 5.0.1
+ '@vercel/analytics@2.0.1(react@19.2.8)':
+ optionalDependencies:
+ react: 19.2.8
+
'@vitejs/plugin-react@6.0.4(vite@8.1.5(@types/node@24.13.3))':
dependencies:
'@rolldown/pluginutils': 1.0.1