Skip to main content
luke@terminal:/$ ls
luke@terminal:/blog$ ls -la posts/

BLOG

Pillar:
luke@terminal:/blog$ cat gh-issue-view-failing-ubuntu-deprecation-apt-pin.md

gh issue view Kept Failing Because Ubuntu's ESM Outranks GitHub's Repo

2026-08-14 2026-08-14Rabbit Holes 5 min read

Ubuntu 24.04's ESM pin (priority 510) outranks GitHub's apt repo (500), so Ubuntu's broken 2.45.0 kept winning the candidate slot. Three layers of failure: a GraphQL deprecation message that was actually the error, GitHub's repo URL, and the ESM pin itself.

luke@terminal:/blog$ cat hermes-profiles-to-docker-part-two.md

My Docker Containers Were Working. The Bug Was in a Python Loop.

2026-07-20 2026-08-07Homelab 8 min read

Container isolation wasn't actually working. Sage was running two Hermes instances, cron jobs vanished into the wrong database, Telegram refused to send. I fixed all of that. Then the real bug turned out to be a Python loop that was never Docker's fault.

luke@terminal:/blog$ cat hermes-profiles-to-docker.md

Why I Ditched Hermes Profiles for Docker Containers

2026-07-19 2026-08-07Homelab 3 min read

I ran three Hermes gateways as separate profiles on the same machine. Replies came from the wrong profile, Telegram connections fought each other. Here's why I containerised each one — and why that was only half the story.

luke@terminal:/blog$ cat setting-up-camoufox-with-hermes.md

Camoufox Tab Creation Kept Timing Out on Hermes

2026-07-19 2026-08-07AI 2 min read

Hermes couldn't load half the links I sent it. Found Camoufox through a Reddit thread, then hit a Firefox sandbox issue that killed tab creation before I got anywhere.

luke@terminal:/blog$ cat projex-cli-config-editor.md

I Got Tired of Editing the Projex Config File So I Built a CLI

2026-04-16 2026-04-17Rabbit Holes 4 min read

Projex is my internal tool for managing my projects page. Its config file is TypeScript. Hand-editing it was only a matter of time before I broke something. So I built a CLI instead.

luke@terminal:/blog$ cat fluorescent-office-essay.md

The Essay Everyone Is Sharing Left One Thing Out

2026-04-14Reflections 2 min read

An essay making the rounds argues that 'follow your passion' is bad advice. But it conflates accepting your circumstances with choosing them, and that distinction matters.

luke@terminal:/blog$ cat building-straico-api-proxy.md

Straico Has Great Models But No Streaming, So I Built a Proxy

2026-04-13AI 7 min read

Straico's API gives me access to 90+ AI models through one key, but it doesn't support streaming or function calling. OpenCode needs both. I built a proxy to bridge the gap and it turned into way more than I planned.

luke@terminal:/blog$ cat building-projex-retrospective.md

I Built Projex and Never Wrote a Word About It

2026-04-10Rabbit Holes 7 min read

209 commits. A rename mid-flight. Publishing pipelines that broke for two days straight. And zero blog posts while any of it happened.

luke@terminal:/blog$ cat the-hobby-isolation-paradox.md

The Hobby Isolation Paradox

2026-04-09 2026-04-14Reflections 2 min read

Some hobbies give you community. Some hobbies break the promise of community entirely. I've been thinking about why.

luke@terminal:/blog$ cat same-content-different-job.md

Same Content, Different Job

2026-04-07 2026-04-14Reflections 3 min read

Most build-in-public advice stops at 'just keep showing up.' But what you're building with that consistency matters as much as the consistency itself.

luke@terminal:/blog$ cat building-a-reading-companion-for-my-vault.md

Building a Reading Companion for My Vault

2026-04-06 2026-04-14AI 4 min read

I built a skill that enriches book passages with historical context, pop culture connections, and thematic insight. Here's how it works and why I keep using it.

luke@terminal:/blog$ cat the-day-i-achieved-nothing.md

The Day I Achieved Nothing

2026-04-05 2026-04-14Reflections 3 min read

On reactive days, invisible work, and protecting time for thinking.

luke@terminal:/blog$ cat posting-into-the-void.md

Posting Into The Void

2026-04-04 2026-04-14Reflections 3 min read

The specific kind of demoralizing that comes from building something, sharing it for free, and getting nothing back.

luke@terminal:/blog$ cat anthropic-open-source-walled-garden-clawdbot-opencode.md

Anthropic, Open Source, and Why I Cancelled My Subscription

2026-04-03AI 5 min read

Anthropic contributed MCP to the world while locking down Claude subscription access and sending legal letters to open source projects. I use one of the tools they targeted.

luke@terminal:/blog$ cat why-i-started-this-blog.md

Why I Started This Blog

2026-04-02 2026-04-02Reflections 2 min read

I've had blogs before. Let them die. This one's about documenting what I build and what breaks along the way.

luke@terminal:/blog$ cat opencode-tmux-getting-used-to-keybindings.md

Trying to use opencode inside tmux was a struggle

2026-04-01 2026-04-16AI 2 min read

First time really trying to use opencode inside tmux on WSL2. Hit Esc to interrupt an agent and nothing happened. Couldn't scroll properly. Couldn't copy to clipboard. Here's what finally worked.

luke@terminal:/blog$ cat nuking-x-history-zerowork-taskbot.md

I Nuked My X History with a ZeroWork TaskBot

2026-03-22 2026-03-22Homelab 3 min read

I wanted to start fresh on X, but my history was flooded with content I no longer cared about that I had retweeted years ago. Sketchy deletion tools wanted my credentials. So I built a ZeroWork TaskBot to delete everything instead.

luke@terminal:/blog$ cat opencode-nested-slash-commands-architecture.md

OpenCode Nested Commands: $1 Solution, -102 Lines

2026-01-13 2026-03-30AI 2 min read

I tried to make a slash command call another slash command in OpenCode. It doesn't work. Here's what I discovered and how I consolidated two duplicate commands into one.

luke@terminal:/blog$ cat premature-optimization-multi-agent-prompts.md

I Broke My Blog Review System Trying to Beat Session Limits

2026-01-04 2026-03-30AI 7 min read

I broke my entire blog review system trying to reduce prompt overhead so I could fit more messages into Claude's session limits. My 'optimization' saved 1,100 tokens but cost me 5 hours of debugging. Here's what I learned about premature optimization in multi-agent systems.

luke@terminal:/blog$ cat building-my-career-timeline.md

Building my career timeline

2025-11-24 2026-03-26Reflections 6 min read

I added a career timeline to my About page. Not for a resume, but because building it taught me something unexpected about both code and career. Here's what I learned.

luke@terminal:/blog$ cat setting-up-velite-nextjs-revised.md

Setting Up Velite with Next.js 16

2025-11-16 2026-03-06Rabbit Holes 6 min read

Spent hours debugging Velite with Next.js 16 - wrong imports, watch mode not working with Turbopack, async params, and more.

luke@terminal:/blog$ cat the-entrepreneurial-conundrum.md

The Entrepreneurial Conundrum

2024-08-13 2026-04-14Reflections 4 min read

I keep having business ideas and not executing on them. Then someone else ships the same thing. The Noah Kagan quote that made me cringe.

luke@terminal:/blog$ ls tags/
Browse all tags →