Skip to content

Add per-model pages and explorer deep links#70

Open
MaxGhenis wants to merge 1 commit into
site-perf-seofrom
site-model-pages
Open

Add per-model pages and explorer deep links#70
MaxGhenis wants to merge 1 commit into
site-perf-seofrom
site-model-pages

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Stacked on #61 (base site-perf-seo). Retarget to main after #61 merges. Supersedes draft #23, rebuilt on the split-data stack.

Why

The site is one page with one shareable parameter (?country=). Benchmark sites spread through deep links — "look at this model", "look at this cell" — and per-model pages are where search traffic for " tax accuracy" can land. The visual design stays exactly as is; this is an information-architecture change.

What

Per-model pages (/model/[id], statically generated for all 13 models in the snapshot):

  • Country rank + within-1% pills in the header; exact/bounded/parse-rate/eligibility-flag pills per country
  • Per-program score table sorted hardest-first (from the heatmap rows)
  • "Hardest cases": the model's worst misses on positive references plus unparsed responses, each deep-linking into the explorer at that exact cell
  • Server components over the bundled summary — zero extra client JS; per-page metadata + canonical URLs + sitemap entries
  • Leaderboard rows and the explorer detail dialog link to them

Explorer deep links: ?scenario=scenario_007&cell=snap~claude-opus-4.7 opens that household with that dialog. State mirrors into the URL via replaceState on every selection; country switches clear the country-specific params; deep links to non-frontier models disable the frontier-only filter so the linked column is visible.

Bug found by verification: the lazy explanation fetch (from #61) was viewport-gated, but <dialog>.showModal() makes the background inert — so a deep-linked dialog could never trigger the fetch and sat on "Loading explanation text…" forever. Opening any detail dialog now starts the fetch directly. Screenshots in the thread show before/after.

Verification

19 bun tests pass (6 new for the page selectors), lint clean, production build generates all 19 static routes, and headless screenshots confirm: model page renders both country sections, and the deep link opens the dialog with derivation + reasoning text fully loaded.

🤖 Generated with Claude Code

Every model gets a statically generated page at /model/[id]: country
ranks and headline pills, per-program scores sorted hardest-first,
binary eligibility-flag accuracy computed from prediction rows, and the
model's worst misses on positive references, each linking into the
scenario explorer. Pages are server components over the bundled
summary, so they ship no additional client JS, and each carries its own
metadata for social previews. Leaderboard rows and the explorer's
detail dialog link to them; the sitemap lists them.

The explorer now mirrors its state into the URL (?scenario=...,
?cell=variable~model) via replaceState, applies deep links on mount
(turning off the frontier-only filter when the linked model needs it),
and clears both params on country switch since ids are
country-specific.

Deep-linking exposed a latent UX bug: the explanation sidecar fetch was
viewport-gated, but an open dialog makes the background inert, so a
deep-linked dialog could never trigger the fetch and showed "Loading
explanation text" forever. Opening any detail dialog now starts the
fetch directly.

Supersedes the stale draft #23, rebuilt on the split-data stack.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
policybench-site Ready Ready Preview, Comment Jun 10, 2026 1:30pm

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant