August 2026 · 2 min read
A Git Tree Is Enough: Running a Public Benchmark Without a Database
Ditch the server-side database. Use a structured folder tree in Git as your source of truth and build a manifest for a static SPA.

Replace the database with a file-per-result git tree
Treating a Git repository as your database provides a transparent, immutable record of every benchmark execution. I commit each benchmark output as a distinct file within a predictable path structure like results/prompt/model/harness/date/.
This folder-based organization enforces reproducibility. Any contributor can verify the output by checking the raw file itself. Publishing a new result is a standard commit and push, removing the need for authenticated API endpoints or database write permissions.
I accept that my Git repository grows with every new result. For a solo-maintained project, the simplicity of a single source of truth is better than the complexity of managing server-side state.
Generate a manifest for client-side rendering
A build-time script is the bridge between raw filesystem files and a browseable user interface. My sync script traverses the results tree and writes a static index.json manifest. The client-side application fetches this single file to discover available results and render them in the browser.
Moving logic to a build step removes all server-side dependencies. You host the site on any static provider without needing a database connection or backend runtime. This shrinks the attack surface and ensures consistent performance.
The manifest is the only contract between the data and the rendering layer. When the tree is empty, the site renders empty states. This ensures the SPA remains dependency-free and identical across development and production environments.
The following snippet shows how I structure the manifest discovery in a minimal vanilla TypeScript client.
async function loadManifest() {
const response = await fetch('/results/index.json');
const manifest = await response.json();
return manifest;
}Sources
Related articles
I Built an Open Benchmark for AI Frontend Generation
I replaced marketing-driven AI leaderboards with a verifiable, rendered benchmark that forces models to ship functional frontend code.
Automating Astro Rebuilds via Sanity Webhooks
Link your Sanity CMS content changes directly to Cloudflare Pages deploy hooks to automate your Astro site rebuilds without manual git pushes.