Vibe Bench
Image-gen model leaderboard with 3D orbital visualization, ELO rankings, and a Gemini-powered vibe judge.
An AI Studio export that looked like a toy turned out to have real engineering under the hood — custom GLSL shaders, structured Gemini API output, and a data model covering 11 image-gen models across 5 providers. The catch: it shipped with React 19 but every dependency pinned to React 18, so the app was DOA. One recon session diagnosed the version civil war. One shipping session upgraded the entire Three.js + Recharts + Lucide stack to React 19 compatibility, cleaned the AI Studio scaffold cruft, captured screenshots with a real browser (headless couldn't render WebGL), and pushed it as a single commit. The result is a leaderboard you can actually use — sort by ELO, expand model details for radar charts, toggle to scatter plots, or paste a prompt and let Gemini judge its vibe on six axes.
Timeline
Dropped into an AI Studio export and found a leaderboard with a 3D solar system, custom GLSL shaders, and a Gemini-powered vibe judge — that crashed on load. The app had React 19 in package.json but every dependency pinned to React 18-era versions. R3F 8.x tried to access ReactCurrentOwner — an internal that React 19 removed — and the entire canvas went black. Recharts 2.x declared ^16 || ^17 || ^18 in its peer deps. Lucide 0.344 same story. The import map in index.html pointed at CDN URLs for React 18, creating a second React instance. It was a React version civil war and the app was the casualty. All that 3D work — simplex noise vertex shaders, instanced particles, orbital mechanics — sitting behind a blank screen. Took 74 steps and produced a clear verdict: ambitious concept, broken plumbing. Fix the versions or move on.
Shipped an AI Studio export to GitHub in one session — but the 'fix somethings' turned into a React ecosystem upgrade. R3F 8→9, drei 9→10, recharts 2→3, lucide 0.344→1.28, all to get React 19 compatibility. Clean install, zero peer dep warnings, zero vulnerabilities. The app ranks 11 image-gen models — Gemini 3 Pro, Imagen 4 Ultra, GPT Image 1, Hunyuan, Seedream, Wan — by ELO and a six-axis 'Vibe Score' (chill, intellect, creativity, basedness, humor, safety). The hero is a Three.js scene with a noise-displaced icosahedron core orbited by model planets, 1,000 instanced particles, and connection lines. The Vibe Check tab sends prompts to Gemini 2.5 Flash with a structured JSON schema that forces scores on all six axes. 1,415 lines of code. One commit. The whole thing fits in your head if you squint — but the GLSL vertex shader alone is 60 lines of simplex noise.