diff --git a/package-lock.json b/package-lock.json
index c9af061..d9dd93c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
"@prisma/client": "5.22.0",
"@simplewebauthn/browser": "^13.3.0",
"@simplewebauthn/server": "^11.0.0",
+ "@vercel/analytics": "^2.0.1",
"argon2": "^0.44.0",
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
@@ -3395,6 +3396,48 @@
"win32"
]
},
+ "node_modules/@vercel/analytics": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-2.0.1.tgz",
+ "integrity": "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==",
+ "license": "MIT",
+ "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
+ }
+ }
+ },
"node_modules/@vitest/expect": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
diff --git a/package.json b/package.json
index e06ef09..681831e 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"@prisma/client": "5.22.0",
"@simplewebauthn/browser": "^13.3.0",
"@simplewebauthn/server": "^11.0.0",
+ "@vercel/analytics": "^2.0.1",
"argon2": "^0.44.0",
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index f7607f3..e424483 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,6 +5,7 @@ import { SiteChrome } from "@/components/site-chrome";
import { getSessionFromCookies } from "@/lib/auth/session";
import { localeFromCookieValue } from "@/lib/i18n/locale-cookie";
import { FMS_LOCALE_STORAGE_KEY } from "@/lib/i18n/types";
+import { Analytics } from "@vercel/analytics/next";
/** Avoid Prisma at build time when DB is unavailable (CI / local build without Postgres). */
export const dynamic = "force-dynamic";
@@ -99,6 +100,7 @@ export default async function RootLayout({
{children}
+