Posts
How Go Channels Work: The Behavior Matrix
A practical guide to Go channels — receive, send, and close behavior across nil, unbuffered, buffered, and closed states
Channels are Go’s primary tool for coordinating goroutines, but their behavior changes drastically depending on their state. A channel can be nil, unbuffered, buffered, or closed — and the same operation (send, receive, close) does something different in each case. Getting this matrix wrong is how deadlocks and panics happen.
http-echo: a verbose HTTP echo server for debugging anything
A small Go HTTP server that prints every detail of an incoming request — handy for proxies, webhooks, and Kubernetes networking puzzles
Every few months I find myself stuck on the same kind of question: what exactly is hitting my service? A reverse proxy is mangling a header, a Kubernetes ingress is rewriting a path, a webhook provider is sending a body in some shape I didn’t expect. The fastest way to answer is to point the traffic at something that will tell me, in painful detail, what arrived.
That’s why I wrote http-echo: a tiny Go server that responds to any HTTP request by dumping a structured, human-readable report of everything it saw.
jwt-cli: encode and decode JWTs without a browser tab
A small Go CLI to encode, decode and inspect JWT tokens with HMAC, RSA and ECDSA signing
Every time I needed to inspect a JWT, I ended up doing the same thing: paste it into a website I half-trust, squint at the payload, then close the tab feeling vaguely guilty. I wanted a local tool, scriptable, that could both decode tokens and mint them for testing. So I wrote jwt-cli.
postgresql-mcp: a read-only PostgreSQL bridge for Claude Code
An MCP server that lets Claude Code inspect schemas, run SELECT queries, and explain plans against your PostgreSQL databases — safely
A surprising amount of debugging boils down to “let me check the database.” Schema lookups, sample row counts, “is this index actually being used,” EXPLAIN plans. None of that is hard to do in psql, but pulling Claude Code into the loop means copy-pasting schemas and query results back and forth, which gets old.
postgresql-mcp is an MCP server that gives Claude Code direct, read-only access to PostgreSQL. Claude does the inspection, you keep the conversation flowing.
pplx: a CLI (and MCP server) for Perplexity AI
An unofficial command-line client for the Perplexity API — query, chat, profile-driven config, shell completions, and a built-in MCP server for Claude Code.
I maintain a Go library for the Perplexity API (perplexity-go). Once it existed, it was almost a sin not to wrap it in a CLI. So pplx is what I reach for when I want a cited, web-aware answer from the shell — and now also a Model Context Protocol server I plug into Claude Code.