From 31344f0e30cf1975e64a5536ebfb52e43524f377 Mon Sep 17 00:00:00 2001 From: irparent <134547608+irparent@users.noreply.github.com> Date: Wed, 7 Oct 2026 11:07:30 -0700 Subject: [PATCH] website: iris-eval.com counts page views with Vercel Web Analytics, as its privacy page describes --- CHANGELOG.md | 1 + website/package-lock.json | 43 ++++++++++++++++++++++++++++++++++++++ website/package.json | 1 + website/src/app/layout.tsx | 7 +++++++ 4 files changed, 52 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9914e45..4b11f02b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **A shutdown that has to stop a storage thread says why.** `close()` gives the checkpoint thread and the search thread 5 s to end on their own. When one has not, Iris now writes one line to stderr before stopping it, naming the thread and what it was doing: still starting, in a request this process made (and for how long), or in its own periodic checkpoint. A shutdown that waited was silent before. - **Links to the old roadmap resolve.** `docs/roadmap.md` points at the capability map, which replaced it, so links to it in published posts and on other sites land somewhere current; the editor's notes on three posts link the map directly. - **The homepage's research section leads with published research:** the four-way comparison of Iris, Langfuse, Phoenix and Promptfoo, and each rule's measured precision and recall on /proof, in place of a survey card marked "Coming Soon". The terms add how a hosted or paid service would be offered: under its own terms, published before it starts, with no change to the open-source software's license. +- **iris-eval.com counts page views with Vercel Web Analytics**, as its privacy page describes: cookie-free, no personal data, no cross-site tracking. The script runs under the site's nonce-based Content Security Policy. ### Security diff --git a/website/package-lock.json b/website/package-lock.json index 4b5d50a1..fc84e588 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -12,6 +12,7 @@ "@radix-ui/react-toggle": "^1.1.18", "@radix-ui/react-visually-hidden": "^1.2.11", "@upstash/redis": "^1.39.0", + "@vercel/analytics": "^2.0.1", "clsx": "^2.1.1", "framer-motion": "^13.4.6", "next": "16.3.8", @@ -2550,6 +2551,48 @@ "uncrypto": "^0.1.3" } }, + "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/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", diff --git a/website/package.json b/website/package.json index 122d3032..aee1abef 100644 --- a/website/package.json +++ b/website/package.json @@ -13,6 +13,7 @@ "@radix-ui/react-toggle": "^1.1.18", "@radix-ui/react-visually-hidden": "^1.2.11", "@upstash/redis": "^1.39.0", + "@vercel/analytics": "^2.0.1", "clsx": "^2.1.1", "framer-motion": "^13.4.6", "next": "16.3.8", diff --git a/website/src/app/layout.tsx b/website/src/app/layout.tsx index f05a90da..dfdad5f7 100644 --- a/website/src/app/layout.tsx +++ b/website/src/app/layout.tsx @@ -3,6 +3,7 @@ import { connection } from "next/server"; import { Space_Grotesk, Manrope, JetBrains_Mono } from "next/font/google"; import { OG_IMAGE_URL } from "@/lib/og"; import { FEED_TITLE, FEED_URL } from "@/lib/feed"; +import { Analytics } from "@vercel/analytics/next"; import "./globals.css"; import { ThemeProvider } from "@/components/theme-provider"; @@ -94,6 +95,12 @@ export default async function RootLayout({ page. React hoists a into
wherever it renders. */}