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.
|
First: apologies this sat a month without a reply. It's a serious piece of work and deserved a faster response. I've now read it properly. The code is good — 2 runtime dependencies, no postinstall hooks, every lock entry resolving to the npm registry with integrity hashes, install scripts only on esbuild and fsevents. The parser is shared cleanly between Node and browser, This isn't a quality review, though — it's a scope decision, so let me be direct about the tradeoffs. The one hard finding. I ran your own That's scan PR #33, merged two days after you opened this. One month, one merged scan, already drifted — and The deeper coupling worries me more: Where I've landed: I'd rather this live in its own repo.
If you'd prefer it merged here instead, make the case — it's not unreasonable, it just needs: Two other things worth knowing: Leaving this open for your response. Whichever way it goes, thank you for building it — and for the live demo on your fork, which is genuinely useful right now. |
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.