Yet another rewrite

Published: 7/6/2022

This used to happen at most once a year. I started with Jekyll, tried Middleman, and gave Hugo a solid go. Eventually I moved on to Gatsby, and there I stayed for a long while.

The I moved to NextJS, like so many others.

It is simply a pleasent dev experience. Over time I grew to love noodling on my site, adding features and learning new concepts. The latest of these concepts has been Typescript.

This is actually the second iteration of my site written in Typescript.

The first one was a bit of a cheat.


This time around I Learned to Stop Worrying and Love the Types. And soon I was wondering why I hadn't done this sooner.

Here is a brief rundown of what is new:


Borrowing from the Braid Design System my components provide minimal whitespace for themselves. To quote Brad Woods, whose digital garden clued me into this:

A well-built component should not affect anything outside itself.

In order to facilitate spacing, I opted to create layout wrappers that use gap rules in order to set the spacing and direction.


Type-safe, locally scoped CSS. Vanilla-Extract is simply awesome, and I have barely scratched the surface.


I am using Capsize along with Vanilla-Extract to trim extra whitespace from my typography. This plays into the Layouts concept, providing more consistency.

Typography system

This has become a new passion of mine, stemming from one of the first engineering projects I embarked on at work. I took all of the typography styles in our brand guide, and built a prop driven component that could deliver consistent brand approved typography across all of our web properties.

At the time this writing, the typography version for this site is still a work in progress. It uses Vanilla-Extract and Capsize in conjunction to provide consistent styling.

I do intend on rewriting this component to better leverage the conditional variants construct withing Vanilla-Extract.


I am a big fan of Segment and Amplitude. I use them every day at work, and have advocated for their use on multiple teams, but I have to admit—they were absolute overkill for my site. I removed both, opting for the self-hosted (and wonderful) Umami.