I’m Matthew Hunter, a programmer, sysadmin, and CISSP security officer. I’ve been building software and tinkering with Linux since the late 90s. This site is home to my projects, writings, and occasional musings on gaming, technology, and life.

GMKtec NucBox G9

By Matthew Hunter |  Mar 28, 2026  | hardware, mini-pc, homelab, nas

The GMKtec NucBox G9 is a compact mini PC marketed as a 4-bay NAS solution. It packs four M.2 NVMe slots into a sub-1U chassis with an Intel N150 processor and 12GB of soldered LPDDR5, making it appealing for homelab enthusiasts who want dense SSD storage in a tiny footprint. At around $210, the specs-per-dollar ratio is compelling. On paper, it looked like the perfect low-power Jellyfin host. In practice, the fan developed bearing noise and died after less than a year of lightly loaded continuous operation, and the device had already developed a well-documented reputation for thermal issues before mine failed. The plastic chassis doesn’t help with heat dissipation, and the overall build quality feels budget-appropriate—fine at this price point, but not confidence-inspiring for 24/7 server duty. Not recommended for always-on use.

HUMOR: 35%

By Matthew Hunter |  Mar 27, 2026  | claude-code, humor

In Interstellar, TARS has a configurable humor setting. Cooper runs it at 75%. It’s played for laughs, but it’s also one of the more honest things in the film: personality as a dial, mood as a parameter.

I gave Claude Code the same feature.

My AI coding assistant runs with a UserPromptSubmit hook — a small script that fires on every prompt and injects context into the conversation. It was already injecting the current date and time. I decided to also inject a humor percentage, dynamically computed from the hour of day:

Operational Lessons from 1,500 Memstore Facts

By Matthew Hunter |  Mar 26, 2026  | memstore, mcp, claude-code, information-retrieval

Building a persistent memory system for AI agents is one problem. Operating it at scale is a different one. After two months of daily use, memstore holds around 1,500 active facts across a dozen projects — project architecture, coding conventions, design decisions, cross-cutting invariants, and roughly a thousand symbol-level descriptions generated by running an LLM over every Go function in every codebase I work on. The system works. The recall pipeline surfaces relevant context on every prompt without manual search. But getting from “works” to “works well” required a series of scoring adjustments, noise filters, and feedback mechanisms that the original design didn’t anticipate.

Fact Supersession: Version Control for Knowledge

By Matthew Hunter |  Mar 25, 2026  | memstore, knowledge-management

Most memory systems for AI agents treat knowledge as a key-value store. Write a fact, overwrite it later, old value is gone. That works for simple preferences — “use dark mode” doesn’t need a paper trail. But knowledge that evolves over time is a different problem. When a design decision turns out to be wrong, or a project’s architecture shifts, or a dependency gets replaced, you don’t just want the current answer. You want to know what you believed before, when it changed, and ideally why. Losing that history means losing the reasoning trail, and reasoning is the expensive part. Memstore’s supersession system brings version control semantics to AI memory: facts get replaced, not erased, and the full chain of revisions is preserved.

Traefik

By Matthew Hunter |  Mar 25, 2026  | software, homelab, networking, tool-library

Traefik is an open source reverse proxy and load balancer built for containerized environments. Its defining feature is automatic service discovery: point it at a Docker host, add labels to your containers, and Traefik provisions routes as services come up without manual configuration. I’m using it as the front door for my homelab, handling TLS termination via Let’s Encrypt and routing traffic to the appropriate backends. Getting there involved some genuine frustration. Running it is largely painless. On balance, it’s highly recommended—but go in knowing that “simple setup” undersells the actual process.

Umami vs Plausible

By Matthew Hunter |  Mar 25, 2026  | software, homelab, analytics, tool-library

Both Umami and Plausible are open source, privacy-focused web analytics platforms that run in Docker, collect visitor metrics without cookies, and position themselves as GDPR-compliant alternatives to Google Analytics. I ran both simultaneously on my personal sites to decide which to keep long-term. My conclusion was Umami, and it wasn’t particularly close once I moved past surface aesthetics. The deciding factors were practical: API flexibility, navigational coherence, and—counterintuitively—Plausible’s own setup flow working against it. Plausible is marginally prettier in places, but it squanders that advantage with some genuinely puzzling navigation decisions.

Uptime Kuma

By Matthew Hunter |  Mar 25, 2026  | software, homelab, monitoring, tool-library

Uptime Kuma is an open source, self-hosted monitoring tool that tracks the availability of your services and alerts you when something goes down. After a few weeks of running it via Docker Compose to monitor both my homelab services and sites running on external hosting, my overall impression is quite positive—but there are some structural concerns that may send me looking for alternatives down the road.

Setup and First Impressions

Getting Uptime Kuma running is straightforward. A single service in a Docker Compose file, a volume for persistence, and you’re at the web interface within minutes. There’s no separate database server to configure, no complex dependency chain—it uses an embedded SQLite database and handles everything through the browser.

Proactive Context Injection with Claude Code Hooks

By Matthew Hunter |  Mar 24, 2026  | claude-code, mcp, memstore

Claude Code sessions start with amnesia. Every conversation begins cold — no memory of what you worked on yesterday, what invariants matter in the file you’re about to edit, or what tasks are still pending from last week. CLAUDE.md helps by injecting static project context, and MCP tools let the model search for facts on demand. But both of those require something to go right first: either the static file happens to cover the relevant topic, or the model decides to search before acting. In practice, the model often doesn’t search. It plows ahead with what it has, and the most valuable context — the constraint you documented last Tuesday, the task you left half-finished — stays in the database unsurfaced. This post is about closing that gap with hooks: small scripts that fire at specific points in the Claude Code lifecycle and inject relevant context automatically, before the model even knows it needs it.

Building Persistent Memory for AI Agents

By Matthew Hunter |  Mar 23, 2026  | memstore, mcp, claude-code, sqlite

AI coding assistants are goldfish with a PhD. They can solve complex problems within a single session — refactoring a module, debugging a race condition, designing an API — but the moment the conversation ends, everything they learned about your project evaporates. After months of building software with Claude Code, I found myself re-explaining the same project conventions, the same architectural decisions, the same mistakes we’d already caught and fixed, at the start of every session. CLAUDE.md files help, but they’re static and they don’t scale. You can’t stuff a dozen projects’ worth of design context into a single markdown file. So I built memstore: a persistent memory system that gives AI agents durable, searchable knowledge across sessions, projects, and machines.

Ubiquiti Mission Critical Switch

By Matthew Hunter |  Mar 13, 2026  | networking, ubiquiti, unifi, hardware

The Ubiquiti USW Mission Critical is a rare device that combines several features you’d normally need separate hardware for: a managed 1GbE PoE switch, an integrated UPS battery backup, and two remotely controllable AC power outlets—all in a single 1U rackmount chassis. The intended use case is keeping your cameras recording and your internet connection self-healing during power outages, and it does that well. In my setup, eight cameras draw only about 23% of the 240W PoE budget, leaving substantial headroom. The AC outlets can be power-cycled remotely or automatically if internet drops—handy for rebooting a flaky modem. The main drawbacks are the unit’s unusual depth, which can cause clearance issues in shallow racks, and the lack of automated graceful-shutdown support for connected devices when the battery runs low.

About
Navigation