My photography portfolio is back

I ran Pullfolio for fifteen years. It turned Flickr accounts into photography portfolios, including my own at images.andrewng.com.

When its EC2 instance died, it felt like a reasonable time to stop maintaining it. I wasn’t particularly interested in resurrecting a Rails application just to keep my own portfolio online.

But I missed having the portfolio.

The public photography portfolio.
The public photography portfolio.

So I spent about two hours with Codex building the first version of the replacement. It’s an Astro site on Cloudflare Pages. Big photographs, white space, a small amount of EXIF, and vi keys because of course it has vi keys.

The important decision was to move the work to build time. Flickr supplies the album membership, and the build prepares responsive copies of the photographs with Sharp. The deployed site serves its own images. Visitors don’t have to wait for Flickr API requests, and there isn’t an application server or database to keep alive.

The photographs stay uncropped. Each album shows one at a time, with a larger viewer when you want to look more closely. Arrow keys and swipes work, along with h and l for photographs and j and k for albums. The EXIF lives behind Details so opening it doesn’t shove the photograph around.

The part that took more care than the initial build was recovering better source images. Some old Flickr copies were only 1024 pixels across. A responsive image pipeline cannot invent detail that isn’t there, so the build can use local originals and Lightroom re-exports instead. The originals stay out of Git; the generated site is what gets uploaded.

That also means production builds happen on the Mac where those files live. This isn’t a case where an empty checkout in GitHub Actions magically has access to my photo library.

There’s something quite nice about replacing an old web application with a directory of HTML, CSS, JavaScript, and JPEGs. Especially when the entire point of the site is to look at the JPEGs.

Portfolio · Original short post

Leave a Reply