diff --git a/website/next.config.ts b/website/next.config.ts
index 7729e1a1..7f409b0a 100644
--- a/website/next.config.ts
+++ b/website/next.config.ts
@@ -24,7 +24,7 @@ const nextConfig: NextConfig = {
headers: [
{
key: 'Content-Security-Policy',
- value: "default-src 'self'; script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' https://img.shields.io https://goreportcard.com https://*.shields.io data:; connect-src 'self' https://*.sentry.io; worker-src 'self' blob:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'",
+ value: "default-src 'self'; script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' https://img.shields.io https://goreportcard.com https://*.shields.io data:; connect-src 'self' https://*.sentry.io https://vitals.vercel-insights.com; worker-src 'self' blob:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'",
},
{
key: 'Strict-Transport-Security',
diff --git a/website/package-lock.json b/website/package-lock.json
index 13287f60..1bc97fb9 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -16,6 +16,7 @@
"@sentry/nextjs": "^10.43.0",
"@tailwindcss/typography": "^0.5.19",
"@vercel/analytics": "^2.0.1",
+ "@vercel/speed-insights": "^2.0.0",
"codemirror": "^6.0.2",
"framer-motion": "^12.36.0",
"fuse.js": "^7.1.0",
@@ -3403,6 +3404,44 @@
}
}
},
+ "node_modules/@vercel/speed-insights": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-2.0.0.tgz",
+ "integrity": "sha512-jwkNcrTeafWxjmWq4AHBaptSqZiJkYU5adLC9QBSqeim0GcqDMgN5Ievh8OG1rJ6W3A4l1oiP7qr9CWxGuzu3w==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "@sveltejs/kit": "^1 || ^2",
+ "next": ">= 13",
+ "nuxt": ">= 3",
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "svelte": ">= 4",
+ "vue": "^3",
+ "vue-router": "^4"
+ },
+ "peerDependenciesMeta": {
+ "@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/@webassemblyjs/ast": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
diff --git a/website/package.json b/website/package.json
index 2d4f9ceb..697f875b 100644
--- a/website/package.json
+++ b/website/package.json
@@ -13,13 +13,14 @@
},
"dependencies": {
"@codemirror/lang-sql": "^6.10.0",
- "@lezer/highlight": "^1.2.3",
"@codemirror/state": "^6.6.0",
"@codemirror/theme-one-dark": "^6.1.3",
"@codemirror/view": "^6.40.0",
+ "@lezer/highlight": "^1.2.3",
"@sentry/nextjs": "^10.43.0",
"@tailwindcss/typography": "^0.5.19",
"@vercel/analytics": "^2.0.1",
+ "@vercel/speed-insights": "^2.0.0",
"codemirror": "^6.0.2",
"framer-motion": "^12.36.0",
"fuse.js": "^7.1.0",
diff --git a/website/src/app/layout.tsx b/website/src/app/layout.tsx
index 4f790987..aea88246 100644
--- a/website/src/app/layout.tsx
+++ b/website/src/app/layout.tsx
@@ -3,6 +3,8 @@ import { instrumentSans, jetbrainsMono } from '@/lib/fonts';
import { Navbar } from '@/components/layout/Navbar';
import { Footer } from '@/components/layout/Footer';
import { ServiceWorkerRegister } from '@/components/ServiceWorkerRegister';
+import { Analytics } from '@vercel/analytics/next';
+import { SpeedInsights } from '@vercel/speed-insights/next';
import './globals.css';
export const metadata: Metadata = {
@@ -91,6 +93,8 @@ export default function RootLayout({
{children}
+
+