Add eval.news frontend (packages/web)#30
Conversation
Fork-only branch. Configurable Vite base (mode=pages → /awesome-evals/) plus a Pages workflow, so PR benchflow-ai#30 has a live demo link without touching the upstream diff.
🚀 Deploying the portalBoth options build the same static SPA from Vercel — recommended (production target)The package is ready to deploy as-is (
→ ships to GitHub PagesProject Pages serve from a subpath ( // packages/web/vite.config.ts
export default defineConfig(({ mode }) => ({
base: mode === 'pages' ? '/awesome-evals/' : '/', // '/' stays Vercel/local-safe
plugins: [react()],
}))Then build with Admin steps: Settings → Pages → Source = GitHub Actions, then add a build+deploy workflow (happy to provide the exact 🔎 Live reference deploy (from my fork, current code): https://vu1n.github.io/awesome-evals/
|
Fork-only branch. Configurable Vite base (mode=pages → /awesome-evals/) plus a Pages workflow, so PR benchflow-ai#30 has a live demo link without touching the upstream diff.
Fork-only branch. Configurable Vite base (mode=pages → /awesome-evals/) plus a Pages workflow, so PR benchflow-ai#30 has a live demo link without touching the upstream diff.
37248ae to
8ca9954
Compare
The Frontier of Evals — a Vite + React + TypeScript reading portal for the awesome-evals library, ported from the Claude Design source: reading path, searchable catalog, landscape map, and a ten-part curriculum, with localStorage read/bookmark progress and an "Open in LLM" teacher mode on every entry and section. Hash-routed; deploys on Vercel (root packages/web), no env vars or secrets. Additive only — no existing files touched. Dataset comes from this repo's README.md two ways: a prebuild parser regenerates src/data/evals-data.json (so each deploy reflects merged main), and at runtime the app re-fetches README.md from GitHub main and live-swaps only if it changed. A single shared parser (src/lib/parseReadme.js) runs in Node and the browser; the only editorial layer — 10 section titles/subtitles — lives in src/data/editorial.json. "Open in LLM": ChatGPT/Claude deep-links prefill a teach-style prompt (Socratic, calibrated, retrieval-practice — distilled from Matt Pocock's teach skill), with a universal Copy button for any LLM / Codex / Claude Code. Gemini has no URL prefill, so its chip copies the prompt and opens Gemini. Sections also offer a NotebookLM two-step dialog (copy sources, copy prompt), since a multi-source notebook fits a whole section better than a lone article. Interface details: tabular-nums counter, staggered enter, scale-on-press.
8ca9954 to
50f3714
Compare
Fork-only branch (demo/gh-pages). Recreated from the squashed feature HEAD + this single demo-config commit: configurable Vite base (mode=pages → /awesome-evals/) plus a Pages workflow. Not part of PR benchflow-ai#30's diff.
Add eval.news frontend (
packages/web)The Frontier of Evals — a Vite + React + TypeScript reading portal for the awesome-evals library, ported from the Claude Design source. Reading path · searchable catalog · landscape map · ten-part curriculum, with
localStorageread/bookmark progress and an "Open in LLM" teacher mode on every entry and section. Hash-routed; deploys on Vercel (Root Directorypackages/web), no env vars or secrets.The dataset comes from this repo's
README.md— two waysprebuildstep parses the in-repoREADME.md(GitHub-raw fallback) intosrc/data/evals-data.json, so every deploy reflects mergedmain. The JSON is committed too, so dev/offline loads work immediately.README.mdfrom GitHubmainand live-swaps the dataset only if it changed since the deploy (best-effort; silent fallback to the bundled data).A single shared parser (
src/lib/parseReadme.js) runs in both Node and the browser. The only layer that isn't derivable from the README — the 10 section titles/subtitles (editorially rewritten for the portal) — lives insrc/data/editorial.jsonand is merged in."Open in LLM" — teacher mode
Every entry (in the detail drawer) and every Learn section offers a one-click teaching session: deep-links that pre-fill a teach-style prompt into ChatGPT / Claude, plus a universal Copy prompt for any LLM / Codex / Claude Code. The prompt is Socratic and calibrated to the learner (retrieval practice over summary, ending in an applied "mission"), distilled from Matt Pocock's teach skill. Gemini has no URL-prefill param, so its chip copies the prompt and opens Gemini to paste.
Reviewer guide
~2k lines of hand-written code; ~6.7k of the 8.7k diff is generated. Read in dependency order:
Data pipeline
src/lib/parseReadme.js— README → dataset parser (+flattenEntries,datasetIssues)scripts/build-data.mjs—prebuildgenerator ·scripts/check-readme-sync.mjs— drift checksrc/lib/dataset.ts— reactive store (useSyncExternalStore) + ingest/lookupssrc/lib/useLiveUpdate.ts— runtime GitHub fetch → live swapUI
5.
src/App.tsx— layout shell, hash routing, view + selection state6.
src/components/— Masthead · Home · ReadingPath · Catalog · MapView · Learn · DetailDrawerLearn-with-LLM
7.
src/lib/teachPrompt.ts— teach-prompt builders + provider deep-links8.
src/components/LearnWithLLM.tsx— the control (wired into DetailDrawer + Learn)Skip — generated / mechanical
src/data/evals-data.json(~4.8k lines — parser output)package-lock.jsonOne commit
Squashed into a single additive commit; read the files in the dependency order above.
Verify
Risk
Additive only — a brand-new package; no existing files are touched (rebased onto current
main, diff ispackages/web/only). The runtime GitHub fetch and the LLM links are best-effort and degrade gracefully (bundled dataset offline; Copy-prompt backstops every provider).Known follow-up
The landscape Map is a fixed 1180px canvas (desktop-first, faithful to the design) — it needs a responsive pass before mobile.