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 i-shipped-a-library-now-what.md
I Shipped a Component Library. I Have No Idea If Anyone Actually Uses It.
› 2026-04-17Rabbit Holes⏱ 4 min read
After a deep code review with my AI agent, I realised the code wasn't the problem. The problem was I couldn't figure out how to show anyone what I'd built.
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 dogfooding-projex-devto.md
Dogfooding Projex: My Own Library Broke on the First New Feature I Tried
› 2026-04-15↻ 2026-04-15Rabbit Holes⏱ 4 min read
I built Projex to showcase projects on my site. The first time I tried using the dev.to integration, nothing worked. Tests passed. Types checked. Stats were completely broken.
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 npm-package-json-vs-package-lock-json.md
I Updated a Package and package.json Didn't Change. Turns Out That's Normal.
› 2026-04-12↻ 2026-04-15Rabbit Holes⏱ 3 min read
I ran npm update, verified the new version was installed, but package.json still showed the old version. That sent me down a rabbit hole trying to understand how npm actually manages versions.
luke@terminal:/blog$ cat opencode-subagent-permissions-ordering-trap.md
My Subagents Kept Asking Permission for Everything: The Config Ordering Trap
› 2026-04-11↻ 2026-04-15AI⏱ 3 min read
I set up granular bash permissions for my OpenCode subagents, but every command still prompted for approval. Turned out to be three separate issues stacked on top of each other.
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 syncthing-obsidian-vault-sync.md
Dropping Obsidian Sync for Syncthing: What I Learned Setting Up a Headless Linux Sync Hub
› 2026-04-08↻ 2026-04-14Homelab⏱ 3 min read
Obsidian Sync costs $120 a year. I wasn't paying for yet another subscription. So I set up Syncthing with my always-on NucBox as the hub. Here's what I learned about the bits most guides skip.
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 fixing-velite-watch-mode-irony.md
I Fixed Velite Watch Mode Problem (And Immediately Broke It Again)
› 2026-03-23↻ 2026-03-31Rabbit Holes⏱ 3 min read
The irony of debugging Velite watch mode: I restored code that was intentionally removed to fix double builds. Here's what happened.
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 velite-draft-filtering-not-working.md
Draft Posts Still Showing in Production: My Velite Filtering Journey
› 2026-03-22↻ 2026-03-30Rabbit Holes⏱ 5 min read
Velite's draft filtering wasn't working in production. Here's what I tried, why it failed, and what finally fixed it.
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 git-corrupt-object-recovery.md
Git Said My Objects Were Corrupt - How I Recovered Without Losing Anything
› 2026-01-08↻ 2026-03-30Rabbit Holes⏱ 5 min read
Got 'fatal: loose object is corrupt' when running git log. Three empty object files, repository broken. Here's how I recovered everything using git fetch and why moving files instead of deleting them was right call.
luke@terminal:/blog$ cat adding-draft-posts-to-velite.md
Adding Draft Posts to Velite: Why 'draft: true' Isn't Enough
› 2026-01-05↻ 2026-03-30Rabbit Holes⏱ 7 min read
I wanted to hide draft posts in production. Thought I could just add draft: true to frontmatter. Turns out Velite needs explicit schema definition AND filtering logic.
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 claude-code-accept-edits-claude-directory.md
Why Claude Code Still Prompts for Edits to .claude/ Files (Even with Auto-Accept On)
› 2026-01-03↻ 2026-01-14AI⏱ 3 min read
I thought auto-accept edits mode was broken. Turns out it's a security feature protecting Claude Code's configuration files - and here's why that's actually brilliant.
luke@terminal:/blog$ cat ai-debates-itself-to-review-my-ai-instructions.md
I Built an AI to Debate Itself So My AI Instructions Don't Bloat
› 2025-12-28↻ 2026-03-29AI⏱ 7 min read
I wasn't updating my CLAUDE.md file enough. When I asked Claude to do it, I got bloat. So I built a multi-agent debate system where AI argues with itself to keep instructions lean.
luke@terminal:/blog$ cat building-multi-agent-blog-review-system.md
I Built a Multi-Agent System to Review My Blog Posts (And It Actually Works)
› 2025-12-28↻ 2026-03-30AI⏱ 18 min read
How I created a four-agent workflow system to transform raw notes into authentic blog posts - complete with debates, convergence protocols, and real expert frameworks.
luke@terminal:/blog$ cat tailwind-typography-plugin-troubles.md
Installing @tailwindcss/typography Was Not The Solution I Needed
› 2025-12-09↻ 2026-03-29Rabbit Holes⏱ 5 min read
Added @tailwindcss/typography to fix bullet points. It worked, but suddenly headings and code blocks looked terrible. Here's why plugins aren't always the answer.
luke@terminal:/blog$ cat asus-router-setup-journey.md
Setting Up an Asus Router Behind an ISP Modem: My Unexpected Gotchas
› 2025-11-27↻ 2026-03-28Homelab⏱ 5 min read
I bought an Asus RT-BE88U router to replace my ISP's Fritzbox WiFi. What I thought would be simple turned into a two-hour networking adventure. Here's what tripped me up.
luke@terminal:/blog$ cat unraid-docker-label-fix.md
Fixing Unraid Docker Containers After Upgrading - The Missing Label Problem
› 2025-11-26↻ 2026-03-26Homelab⏱ 3 min read
After upgrading Unraid from 6.9 to 7.0.1, all my Docker containers became unmanageable - marked as '3rd party' and locked out of updates. Here's how I fixed it without recreating everything.
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 adding-syntax-highlighting-shiki.md
Adding Shiki for a pop of colour in my code blocks was a struggle
› 2025-11-23↻ 2026-03-28Rabbit Holes⏱ 4 min read
I wanted to add syntax highlighting to my Velite/Next.js blog using Shiki. Seemed straightforward - install packages, configure, done. Wrong. Here's what went wrong and how I fixed it.
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.