The old portfolio looked thin. Eleven cards, six of them with gradient placeholders instead of real screenshots. Anyone landing on it could count the gap between the headline ("180+ builds shipped") and the visible evidence (eleven tiles) in about three seconds.
I had screenshots of twelve niche demos sitting in a Notion page that I'd never gotten around to wiring in. Friday afternoon I decided to ship the whole thing over the weekend.
Saturday morning: pulled the demo URLs into a single JSON file. Wrote a small Playwright script that took a viewport screenshot at 1280x800, JPEG q82. Spawned four parallel agents so the twelve demos captured in roughly ninety seconds instead of twenty minutes.
Saturday afternoon: ran the captures through a sharp Node script that resized to 800x500 and stripped EXIF. Total batch came out to under 4MB across twelve files. Committed them to /public/portfolio/ and updated the portfolio data file with the new entries — slug, label, category badge color, and the screenshot path.
Sunday: rebuilt the index page to render category badges (Real Client / Flagship / Niche Demo) with three different gradient strips. Killed the old portfolio.html embed entirely. Updated the headline from "11 builds shipped" to "23 builds shipped."
Shipped Sunday night. Vercel auto-deploy was flaky as usual, so I ran one manual `npx vercel --prod --yes` and aliased it. Done.
The whole arc — capture, resize, wire in, redesign — took maybe nine hours of actual work spread across two days. The reason it could move that fast: Playwright for parallel scraping, sharp for resize, Claude Code as the IDE with full repo context, and a willingness to NOT over-engineer the data file. JSON in, screenshots out, ship.



