I like making things.
And sometimes breaking them too 👀
Recent Photos





Projects
Recent Posts
Integrate Backblaze B2 with TinaCMS media library
Through a couple twists, I figured out how to setup the media manager for TinaCMS to work with Blackblaze B2 (and any S3-compatible provider). The media library is a critical part of its goal to allow users to control their content, and B2 provides scalable, cost-efficient storage.
Relative timestamps in Astro JS
Migrating to Astro required rethinking how to handle relative timestamps on the client side while dealing with a highly static website. It's doable, but I had to work around a minor Astro quirk.
Rebuild cached static website Docker layers in Easypanel
Self-hosted PaaS like Easypanel make serving continuously deployed websites a breeze. Unfortunately, they don't integrate so easily with external data used during a static website build process.