I take full responsibility for the design, code, copywriting, and everything else here at

This site has outlived numerous static site generators including Metalsmith, Wintersmith, Assemble, and the Serve gem. It is now constructed from a generator script I wrote in Node.js, using EJS templates and front matter. The script is not elegant but its dependencies are minimal, so it will likely last longer than I will.

I author my CSS in Sass. The most recent iteration of this site uses components from Harry Roberts’ inuitcss framework and is organized around the Inverted Triangle CSS structure. I name things using BEM (“block, element, modifier”) syntax, which feels overly verbose when written, but turns out to be incredibly helpful when revisiting code you haven’t looked at in years. In fact, the definition of a web portfolio is “code you haven’t looked at in years.”

Originally coded as a static-width website in 2009, I added a mobile-first, responsive design to in 2015, using “responsive modifier” BEM classes to apply unique layouts and widths at wider and wider breakpoints.

This site renders down to static HTML, CSS and JavaScript that I host on Amazon S3. I register my domains and host my DNS at Cloudflare. When I need a real web server, I spin up an Ubuntu instance on Digital Ocean. I wrote a cloud-init script to help with that.

I do my work on a 2016 13-inch MacBook Pro, the one with the virtual escape key, defective butterfly keyboard, and four loose Thunderbolt ports. I use Visual Studio Code for writing and coding, Zeit Hyper as my terminal, and Zsh/oh-my-zsh as my shell. I find I use Node.js for just about everything, and I use nvm to keep just about everything sane.

— Last updated: November 2019