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.


Build with Deno's Fresh in Sublime Text 4

Two quick tweaks for a "just works" developer experience using Deno's new Fresh web framework.


A small fix to use `fnm` with Sublime Linter

I switched from 'nvm' to 'fnm', the fix resulted in even simpler Sublime Text config.


Next.js Development with Sublime Text 4

I recently upgraded to Sublime Text 4 and decided to give it another try for use in my Next.js development workflow, including integrations with ESLint, Prettier, and TypeScript.


Fix B2 and Cloudflare CDN Caching

With default settings the Cloudflare CDN will not cache any of the files it serves from a connected B2 bucket. Instead it pulls the files directly every time, slowing responses and eating bandwidth.


Client Side Routing with `single-spa`

Routing with `single-spa` didn't work as I expected it to, instead causing full page refreshes. Thankfully there are a few options to get it working, depending on which routing mode is used.


Choosing a Micro Frontend Framework

Three approaches dominate micro frontend architecture. Read my foundational list of the top most popular frameworks and how I chose my favorite for an upcoming side project.


Variable Web Fonts: 79% Lighter

Fewer round-trip requests and reduced overall network transfer make variable web fonts a total win. Learn how to use and optimize variable fonts to make your next project more beautiful than ever.


Automatic Release Notes in Any Project

Ever felt the anxiety of pushing software to production while not 100% sure what the release contains? I have. In doing so, I also felt the anxiety of some unknown change causing an error. Or worse, crashing a customer-facing production service.