Blog
Here you'll find everything I've written for this site, all in one place, from newest to oldest. Some posts are deep dives, while others are just quick notes and fixes I wanted to remember. Feel free to dig in, and I hope you find something useful or interesting.
-
My journey designing a Zod-like validation library in Zig. A dive into
comptime, type generation, and the trade-offs for good tooling support. -
I'm sharing my experience building
cmdtest, a Zig package for testing CLI apps. This post covers Zig I/O, comptime vs runtime, andbuild.zigimport quirks. -
My notes on building a VS Code extension using Bun and Mise. Covers build scripts, tasks, and a macOS fix for zsh
PATHissues. -
Vite's bundler was too smart for its own good and kept failing my dynamic import in Astro. This is the one-line trick I used to outsmart it.
-
I hit an 'Import declaration conflicts' error in Astro. My page and a component had the same name. Here's how I fixed it with an import alias.
-
I'm building a custom security research env in VS Code to find more bugs, integrating Foundry and Medusa to make my workflow faster.
-
My takeaways from a Roger Martin HBR video on plan vs. strategy. It showed me I was making to-do lists instead of figuring out how to win.
-
I wanted to see what people search for on my site. Here's how I connected Pagefind to Umami with a simple
MutationObservertrick. -
I just released envfmt v1.0.0. The big change was removing all dependencies to make it a tiny, stable lib. Here are my notes on the update.
-
My site's navbar felt janky with a scroll listener. I fixed it with the Intersection Observer API. Here's how I used it for a smoother scroll effect.
-
My notes on extending Astro's code blocks. I wrote a Shiki transformer to read metadata from the code fence and a rehype plugin to add the UI.
-
I was annoyed that my site's font looked different on my iPhone and Mac. The fix was one simple Tailwind class antialiased. Here's why it works.
-
I'm building a CLI to write better git commits. This is my dev log on getting the first messy, working version up and running with Gemini.
-
Decided to get back to basics with this site. I removed a bunch of old sections and code, and now it's just plain HTML/CSS with system fonts.
-
I got sidetracked building a tool and ended up writing a tiny Rust crate to find XDG paths. These are my notes on how I built xdgdir.
-
I needed to expand environment variables for another project, so I built my first Rust crate. This is my log on envfmt and using traits for testing.
-
Figuring out caching mechanism for my Remix app. This post is my personal cheat sheet for setting SWR headers for real-time, daily, and static data.
-
I ran into a "inflate failed buffer error" with ClickHouse.js. The fix was easy, check if my data arrays have items before trying to insert them.
-
Spent a bit debugging a
bad connectionerror with golang-migrate and ClickHouse. This is my note to self, always check forsecure=truewith cloud DBs. -
Setting up VSCode for a new Foundry project. This is my quick reference for getting remappings, the forge formatter, and the solc compiler version right.