Posts

gobadger: SVG badges for private GitLab repositories

A small Go CLI that generates SVG badges as artifacts, designed for private GitLab projects where shields.io can't reach

You know the colourful little badges on the top of every README — coverage, build status, version, all of that? Most of them come from shields.io, which works beautifully when your repo is public. The moment your project is private and lives on a self-hosted GitLab, those services can’t reach in. gobadger is the tool I wrote to solve that.

Tools golang gitlab ci

gocrypt: a tiny AES-GCM file encryption CLI

A small Go command-line tool to encrypt and decrypt files with AES-128 or AES-256 in GCM mode

Sometimes you just need to encrypt a file. Not set up a key management system, not learn the gpg command line again, not pull a heavy dependency — just turn secrets.txt into secrets.bin with a key you control. That’s the niche gocrypt fills for me.

Tools golang encryption aes

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.

Golang golang channels concurrency

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.

Tools golang http debugging

httpfileserver: serve a directory over HTTP, the boring way

A tiny Go binary (and scratch Docker image) to expose a directory over HTTP, with optional basic auth and configurable timeouts

Once in a while I need to throw a directory online. Share a build artifact with a colleague, expose a folder of files inside a Kubernetes cluster, mount a release directory behind an internal nginx — the kind of task where a full web server is overkill and python3 -m http.server is too primitive.

That’s the niche httpfileserver fills: a single static Go binary (or a scratch-based Docker image) that serves a directory, with the few quality-of-life features I always end up wanting.

Tools golang http docker