Why am I still hand-typing WebSocket structs from an AsyncAPI spec?
You shouldn’t be, because the AsyncAPI spec already says exactly what every message looks like and a machine can retype it better than you. I wrote gen-asyncapi so an AsyncAPI …
Mostly writing code that does stuff…
You shouldn’t be, because the AsyncAPI spec already says exactly what every message looks like and a machine can retype it better than you. I wrote gen-asyncapi so an AsyncAPI …
Every self-hosted chat UI hands you the same thing: a wall of markdown. You ask the model for last quarter’s numbers, it writes you a table in monospace, and if …
You’ve got some app that needs to leave the building through a VPN. A scraper, a browser bot, some agent poking at sites that would rather it came from somewhere …
The first version streamed over SSE. Then something needed the same turn over NATS, and I found out I’d built the framing into the wrong layer. event: / data: / …
The moment that decides what kind of library you’re writing is the one where a human has to approve a tool call. Everything is lovely right up until then. The …
A page falls out of Google’s index. Now you get to find out why. Open Search Console to confirm it’s actually gone. GA4, to see if the traffic died or …
I already wrote the “why I ripped the plumbing out of my own repos and built a base image” rant in the aicodebox post, so I’m not doing it again …
I was neck-deep in an avatar pipeline and needed two unglamorous things at once: a lipsync pass, and a fistful of ffmpeg operations around it, trim the source, mux the …
I already burned a month of my life building mt5-httpapi: a full Windows VM booted under QEMU/KVM inside Docker, just so I could talk to a broker that only ships …
I built claudebox because letting Claude Code run loose on my host was giving me chest pains. It worked. It grew an HTTP API, an OpenAI-compatible endpoint, an MCP server, …