Adding date-based pagination to my site (1 mins read).

Announcing support for date-based pagination on my site, and the end of very long paginated lists of content.
Adding date-based pagination to my site (1 mins read).

Announcing support for date-based pagination on my site, and the end of very long paginated lists of content.
Lukewarm recommendations for improving AI agents' interactions with your projects (7 mins read).

A few small recommendations we've found with Renovate to improve how AI agents contribute to the codebase.
Being more explicit with the limited AI usage in my blog posts' content (2 mins read).
Adding more user-facing structured metadata for the ~0.2% of my posts that include any AI content.
Writing to AWS S3 from Fly.io (in Go) (4 mins read).

How to use OpenID Connect to authenticate to AWS from Fly.io, without long-lived credentials in Go.
Making an optional, required, status check with GitHub Actions (7 mins read).

Avoiding the dreaded Expected β Waiting for status to be reported when trying to make a status check optional.
Reattaching tmux to your Xorg session (2 mins read).
How to stop Can't open display: (null) errors blocking you interacting with Xorg in tmux, for instance after an X crash.
Adding Pushover notifications to Claude Code (2 mins read).
Writing a custom hook to convert a 'Claude is waiting for input' to a Pushover push notification.
Logs as UX (12 mins read).
Looking at how logs being the main interface for understanding how tools work can be a blessing and a curse.
Minifying JSON with jq (1 mins read).
How to take a pretty-printed JSON string and replace it with a minifed JSON string using jq.
Gotcha: GitHub Custom Properties are public (2 mins read).

A known documented, but maybe lesser known, fact about GitHub Custom Properties' values and descriptions being available to anyone with read access.
A DECADE of writing on this blog (4 mins read).
Celebrating another massive milestone in my blog, and a short reflection.