Blog
What I built, what broke, what it cost.
-
In July I deleted 66,000 lines and turned JobFilter into a public-job corpus API for agents. In September I scaled the service to zero. The pivot fixed what I was building; it never fixed who it was for.
-
A DR drill measured the platform rebuild and found the one backup it couldn't reach was already gone.
-
CRT Shell is live on Codeberg — a Quickshell desktop shell packaged as an installable Nix flake with a documented host contract. The wallpaper is the canvas, the consumer owns the machine-specific parts, and an off-center dog paw was the real test of that seam.
-
dream-memory is live on Codeberg — a CLI and MCP server that reads a git-versioned markdown memory archive. A nightly ingest folds session logs and observations into the store while the agent sleeps; this tool reads that back, bounded and read-only.
-
huemill is live on Codeberg — a CLI that mills a Base16 theme or the current wallpaper into one semantic desktop palette. `palette.json` is the seam: contrast is enforced in one place and every adapter inherits it.
-
My model router left the laptop for a single-replica StatefulSet with a postgres sidecar. The migration was the easy part: routing on effective cost was the lesson.
-
rentfree.site is live — single-tenant static hosting where possession of an SSH key is ownership. git push over SSH is the whole deploy path, no account sits behind a Site, and losing the key orphans the Site for good.
-
Two billion tokens in thirty days for $16.64 — 98% of them on the cheap model. The cheap tier carries the load when the verification loop lives outside the model.
-
The vault already had 1,888 curated links and a creation gate that demanded them. I still added a semantic index — because links and keyword search both require you to already know the words, and the whole point of a second brain is that you don't.
-
JobFilter started as a hosted career platform — CV parsing, matching, cover letters, Stripe billing, the whole product. Four months later we deleted 66,000 lines of it and became a public-job corpus API for agents. The pivot isn't the story; the decision tree is.
-
Agent permissions are usually a runtime discipline — dialogs, approvals, vigilance. I made mine a build-time proof instead.
-
graffa is a terminal interface for exploring the graph inside a Markdown vault — no leaving the terminal, no GUI app, no account.
-
I built a CLI for the bus schedule because I didn't want to leave the terminal. The code is trivial. The habit shift is the point.
-
Goose's ACP protocol lets the agent runtime live on a k3s server while the CLI stays a thin remote — no more lost sessions, and you can run different servers for different jobs.
-
Offloading Nix builds to a homelab server using Nix's built-in SSH-ng remote builder — no CI runner, no daemon, just SSH and a module.
-
First post on the Ronner Development blog.