Twelve sites and an afternoon of screenshots
4 August 2026/2 min read
A portfolio has a decay problem nobody plans for. You ship a site, you screenshot it, you put it in a grid. Two years later the client has changed hosts, redone the homepage, or gone out of business, and your portfolio is showing something that no longer exists next to your name.
So when I rebuilt this site I made the portfolio a build step instead of a folder of saved images.
Every cover on the work index is a real screenshot, captured headless at 1440 by 900, by a script in the repository. The page counts underneath each one are read from that site's own sitemap on the same run. Nothing is typed in by hand, because anything typed in by hand is a number that will be wrong eventually and nobody will notice.
The hover behavior came out of the same thinking. A static screenshot shows the top of a page. It says nothing about whether the rest of it holds up. So each card holds a full-page capture, and hovering scrolls the whole site through the frame. It is the closest thing to actually visiting without leaving.
Two things I got wrong on the way, in case you build something similar.
Full-page capture ignores the height you set on the viewport. You have to pass an explicit clip region. Without it, one of the sites, which pins sections while you scroll, returned an image sixty thousand pixels tall that was almost entirely black.
And scroll-triggered content captures blank, because the capture never scrolls. Every element that fades in on scroll has to be forced visible before the shot, or you photograph an empty page and do not find out until you look.
The result is a portfolio that gets re-verified whenever I run the script rather than slowly becoming a work of fiction. Which is the point: the whole argument of the site is that the numbers are countable, and a countable number you recount is the only kind that stays true.