<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on zolty.systems</title><link>https://blog.zolty.systems/posts/</link><description>Recent content in Posts on zolty.systems</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 05 Apr 2026 20:00:00 -0600</lastBuildDate><atom:link href="https://blog.zolty.systems/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Container smoke testing with Goss: stop guessing if your .env works</title><link>https://blog.zolty.systems/posts/2026-04-05-goss-container-smoke-testing/</link><pubDate>Sun, 05 Apr 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-04-05-goss-container-smoke-testing/</guid><description>How to write layered Goss specs that assert your .env values actually resolve to working MySQL credentials — not just that the vars exist.</description></item><item><title>OpenClaw vs Claude Code: An Architectural Comparison</title><link>https://blog.zolty.systems/posts/2026-04-02-openclaw-vs-claude-code-architecture/</link><pubDate>Thu, 02 Apr 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-04-02-openclaw-vs-claude-code-architecture/</guid><description>I compared OpenClaw&amp;#39;s open-source architecture against the leaked Claude Code source. Same problem space, fundamentally different designs. Here is what I found.</description></item><item><title>Self-Hosted AI on a 24GB GPU: OpenClaw + Ollama Setup Guide for Windows</title><link>https://blog.zolty.systems/posts/2026-04-02-openclaw-self-hosted-gpu-guide/</link><pubDate>Thu, 02 Apr 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-04-02-openclaw-self-hosted-gpu-guide/</guid><description>A complete guide to running your own private AI assistant on Windows with Docker Desktop, Ollama, and OpenClaw. Includes model recommendations for 24GB VRAM GPUs and a full VRAM reference table.</description></item><item><title>Running AWS Lens as a Self-Hosted Web App on k3s</title><link>https://blog.zolty.systems/posts/2026-03-30-aws-lens-web-mode/</link><pubDate>Mon, 30 Mar 2026 09:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-30-aws-lens-web-mode/</guid><description>AWS Lens was built as an Electron desktop app. I adapted it into a containerized Express server running on k3s — no desktop required, accessible from any browser on the internal network. Here&amp;#39;s what that involved.</description></item><item><title>Week of March 23: Security Patches, AI Tooling, and Defending the Homelab on Reddit</title><link>https://blog.zolty.systems/posts/2026-03-29-week-retrospective/</link><pubDate>Sun, 29 Mar 2026 22:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-29-week-retrospective/</guid><description>A week of CVE patches, OpenClaw stabilization, Wiki.js fork shipping, PiKey, a self-hosted Actions cache, and a Reddit comment thread that made me document everything properly.</description></item><item><title>Forking Wiki.js to Get Mermaid 11: When Upstream Won't Move</title><link>https://blog.zolty.systems/posts/2026-03-29-wikijs-fork-mermaid-upgrade/</link><pubDate>Sun, 29 Mar 2026 09:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-29-wikijs-fork-mermaid-upgrade/</guid><description>Wiki.js ships Mermaid 8.8.2 from 2020. Upstream defers the upgrade to v3 with no release date. I forked it, upgraded to Mermaid 11.13.0, patched 8 CVEs, and cut Criticals from 8 to 3 — without touching Vue 2 or Webpack 4.</description></item><item><title>Securing Jellyfin when it's exposed to the internet</title><link>https://blog.zolty.systems/posts/2026-03-28-securing-jellyfin-on-the-internet/</link><pubDate>Sat, 28 Mar 2026 10:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-28-securing-jellyfin-on-the-internet/</guid><description>Fail2ban, OAuth SSO, IP block lists, DDNS whitelisting, and why a VPN is the easiest answer to the whole problem.</description></item><item><title>Self-Hosting a GitHub Actions Cache Server on NAS Storage</title><link>https://blog.zolty.systems/posts/2026-03-27-self-hosted-github-actions-cache/</link><pubDate>Fri, 27 Mar 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-self-hosted-github-actions-cache/</guid><description>GitHub Actions cache hits are slow when your runners are local. I deployed a self-hosted cache server backed by NAS NFS storage, flushed the GitHub-hosted caches, and cut cache restore times from minutes to seconds.</description></item><item><title>Two Months of K3s Stability Improvements</title><link>https://blog.zolty.systems/posts/2026-03-27-k3s-stability-improvements/</link><pubDate>Fri, 27 Mar 2026 14:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-k3s-stability-improvements/</guid><description>A rundown of the stability improvements I have made to my k3s homelab cluster over the past two months -- Harbor migration, Grafana SQLite fix, security patches, networking hardening, pve4 recovery, and CI/CD reliability.</description></item><item><title>Building a VPN Mesh for a Tech Collective</title><link>https://blog.zolty.systems/posts/2026-03-27-vpn-tech-collective/</link><pubDate>Fri, 27 Mar 2026 13:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-vpn-tech-collective/</guid><description>Designing a WireGuard hub-and-spoke VPN mesh to connect a tech collective -- shared Jellyfin, CI/CD runners, game servers, and centralized monitoring across multiple sites with privacy-first logging.</description></item><item><title>Planning Authentik: Centralized Identity for a Homelab</title><link>https://blog.zolty.systems/posts/2026-03-27-authentik-identity-platform/</link><pubDate>Fri, 27 Mar 2026 12:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-authentik-identity-platform/</guid><description>Why I am replacing OAuth2 Proxy with Authentik for SSO across 20+ services -- Google federation, group-based RBAC, Traefik forwardAuth integration, and a phased migration plan that does not break anything.</description></item><item><title>Stress Testing GPU Transcoding in Kubernetes with JF_hw_stress</title><link>https://blog.zolty.systems/posts/2026-03-27-jellyfin-hw-stress-tester/</link><pubDate>Fri, 27 Mar 2026 11:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-jellyfin-hw-stress-tester/</guid><description>How I built a headless GPU transcoding stress tester for Jellyfin on Kubernetes -- escalating concurrent streams against Intel UHD 630 VAAPI, JSON reports, and a k3s Job manifest that auto-cleans after 10 minutes.</description></item><item><title>PiKey: A Raspberry Pi That Pretends to Be Your Keyboard</title><link>https://blog.zolty.systems/posts/2026-03-27-pikey-bluetooth-keyboard-emulator/</link><pubDate>Fri, 27 Mar 2026 10:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-27-pikey-bluetooth-keyboard-emulator/</guid><description>How I built PiKey -- a Raspberry Pi Zero 2W that spoofs a Logitech K380 Bluetooth keyboard, jiggles the mouse, and auto-types LLM-generated text to simulate human activity. Three implementations: Python, Rust, and C.</description></item><item><title>This Blog Deploys Itself: Self-Hosted CI/CD on k3s with GitHub ARC</title><link>https://blog.zolty.systems/posts/2026-03-26-blog-cicd-on-k3s/</link><pubDate>Thu, 26 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-26-blog-cicd-on-k3s/</guid><description>How the blog deploys itself using self-hosted GitHub Actions runners inside the k3s cluster — scheduled posts, Bedrock content generation, and Playwright scanning after every push.</description></item><item><title>OpenClaw Multi-User: Privacy, Dual AI Backends, and Per-User Cost Tracking</title><link>https://blog.zolty.systems/posts/2026-03-25-openclaw-multi-user/</link><pubDate>Wed, 25 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-25-openclaw-multi-user/</guid><description>Adding multi-user support with privacy guarantees, dual model providers (Anthropic direct API and AWS Bedrock via LiteLLM), and per-user cost tracking to OpenClaw on k3s.</description></item><item><title>Linkerd Service Mesh: Why I'm Not Deploying It Yet (But Have a Plan Ready)</title><link>https://blog.zolty.systems/posts/2026-03-24-linkerd-service-mesh/</link><pubDate>Tue, 24 Mar 2026 14:00:00 -0500</pubDate><guid>https://blog.zolty.systems/posts/2026-03-24-linkerd-service-mesh/</guid><description>A deep dive into Linkerd, what a service mesh does, its latest features like post-quantum cryptography, and why a 20-workload homelab doesn&amp;#39;t need one yet.</description></item><item><title>OpenClaw on k3s: Replacing Open WebUI with a Lighter AI Gateway</title><link>https://blog.zolty.systems/posts/2026-03-23-openclaw-on-k3s/</link><pubDate>Mon, 23 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-23-openclaw-on-k3s/</guid><description>How I replaced Open WebUI with OpenClaw -- a Node.js AI assistant gateway that is lighter, supports multiple channels, and deploys cleanly on Kubernetes with a custom Docker image.</description></item><item><title>Operation Moonshot: Can Claude Rewrite Linux in Rust?</title><link>https://blog.zolty.systems/posts/2026-03-22-operation-moonshot-linux-in-rust/</link><pubDate>Sun, 22 Mar 2026 23:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-operation-moonshot-linux-in-rust/</guid><description>A thought experiment taken too far: what would it actually take to have Claude rewrite the Linux kernel in Rust, module by module? I scoped the project, estimated the tokens, hit the walls, and learned something useful about AI-assisted systems programming along the way.</description></item><item><title>Using Claude to Start Your Regulatory Compliance Journey</title><link>https://blog.zolty.systems/posts/2026-03-22-claude-regulatory-compliance/</link><pubDate>Sun, 22 Mar 2026 22:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-claude-regulatory-compliance/</guid><description>Regulatory compliance feels like a wall until you start climbing it. Here is how I used Claude to map requirements, identify gaps, generate policy drafts, and build an actionable plan -- without hiring a consultant on day one.</description></item><item><title>Five Projects in One Day: What AI Pair Programming Actually Looks Like</title><link>https://blog.zolty.systems/posts/2026-03-22-ai-pair-programming-five-projects/</link><pubDate>Sun, 22 Mar 2026 21:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-ai-pair-programming-five-projects/</guid><description>A day working across five repositories with Claude as a pair programmer -- stock automation (13K LOC), Harbor registry migration, digital signage auth, cardboard sell signals, and OpenClaw cost optimization. What worked, what broke, and the real throughput numbers.</description></item><item><title>Building a TCG Price Tracker with Selenium and Kubernetes</title><link>https://blog.zolty.systems/posts/2026-03-22-cardboard-price-tracker/</link><pubDate>Sun, 22 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-cardboard-price-tracker/</guid><description>How I built Cardboard -- a trading card game price tracker that monitors 10 TCGs across TCGPlayer and eBay using a three-tier scraping strategy, runs on k3s, and displays historical price data on a Chart.js dashboard.</description></item><item><title>Home Assistant as the Data Hub for Digital Signage</title><link>https://blog.zolty.systems/posts/2026-03-22-digital-signage-ha-proxy/</link><pubDate>Sun, 22 Mar 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-digital-signage-ha-proxy/</guid><description>Why I stopped using separate weather and calendar APIs and built an HA proxy that turns Home Assistant into the single data source for every digital signage widget -- plus API key auth, graceful degradation, and the CI/CD fixes that made it all deployable.</description></item><item><title>Why I Switched from GitHub Copilot to Claude Code Max</title><link>https://blog.zolty.systems/posts/2026-03-22-claude-code-vs-copilot/</link><pubDate>Sun, 22 Mar 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-22-claude-code-vs-copilot/</guid><description>After a year with GitHub Copilot, I switched to Claude Code Max for homelab infrastructure work. The difference is not autocomplete -- it is agency. Here is what changed, what I miss, and the real cost math.</description></item><item><title>Ditching AWS ECR for Self-Hosted Harbor: Why and How</title><link>https://blog.zolty.systems/posts/2026-03-21-harbor-registry-ditching-ecr/</link><pubDate>Sat, 21 Mar 2026 21:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-21-harbor-registry-ditching-ecr/</guid><description>Migrating 13 CI workflows from AWS ECR to self-hosted Harbor and Gitea -- eliminating 12-hour token expiry, Docker Hub rate limits, and per-image AWS costs. The full migration playbook with Ansible, Helm, NFS storage, and promotion workflows.</description></item><item><title>One Month Retrospective: From Bare Metal to Production Platform</title><link>https://blog.zolty.systems/posts/2026-03-21-one-month-retrospective/</link><pubDate>Sat, 21 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-21-one-month-retrospective/</guid><description>A month-by-month timeline of building a production-grade homelab Kubernetes cluster -- from three bare Proxmox hosts to 8 nodes running 15+ applications with full observability, AI-powered operations, and 10GbE networking.</description></item><item><title>Stock Automation: From Empty Scaffold to 13,000 Lines in a Single Day</title><link>https://blog.zolty.systems/posts/2026-03-21-stock-automation-zero-to-platform/</link><pubDate>Sat, 21 Mar 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-21-stock-automation-zero-to-platform/</guid><description>Building a complete swing trading research platform in one session -- 5 phases, 13K lines of Python, 199 tests, paper trading, and a Rich terminal dashboard. What worked, what didn&amp;#39;t, and why local-first beats SaaS for personal investing tools.</description></item><item><title>PETG Filament Settings: Why the Advertised Temperatures Are Wrong</title><link>https://blog.zolty.systems/posts/2026-03-20-petg-filament-settings/</link><pubDate>Fri, 20 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-20-petg-filament-settings/</guid><description>Dialing in PETG settings on the Bambu Lab P1S -- running 265C nozzle and 80C bed instead of the advertised 230-250C, why first layer temps matter, and how Amazon delivered 4KG of filament just before I ran out.</description></item><item><title>The Bambu Lab P1S: Why Every Homelab Needs a 3D Printer</title><link>https://blog.zolty.systems/posts/2026-03-19-bambu-lab-p1s-3d-printing/</link><pubDate>Thu, 19 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-19-bambu-lab-p1s-3d-printing/</guid><description>Adding a Bambu Lab P1S to the homelab toolkit -- printing custom enclosures, cable brackets, rack mounts, and ventilated cases for cluster nodes with minimal setup and impressive quality.</description></item><item><title>Jellyfin HA on Kubernetes: Redis-Backed Transcode Session Failover</title><link>https://blog.zolty.systems/posts/jellyfin-ha-kubernetes/</link><pubDate>Sat, 14 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/jellyfin-ha-kubernetes/</guid><description>How I added high-availability transcoding to Jellyfin with a Redis-backed session store, lease-based pod takeover, and shared NFS storage on k3s.</description></item><item><title>What's Still Broken and What Comes Next</title><link>https://blog.zolty.systems/posts/2026-03-12-jellyfin-ha-whats-broken/</link><pubDate>Thu, 12 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-12-jellyfin-ha-whats-broken/</guid><description>An honest look at what the Jellyfin HA conversion didn&amp;#39;t solve — transcoding limits, SyncPlay, fork rebase burden, and the road to Track B.</description></item><item><title>Scaling to Two Replicas and Failover Testing</title><link>https://blog.zolty.systems/posts/2026-03-11-jellyfin-ha-failover-testing/</link><pubDate>Wed, 11 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-11-jellyfin-ha-failover-testing/</guid><description>Setting replicas to 2, running six failover scenarios, and measuring what actually happens when you kill a Jellyfin pod mid-stream on k3s.</description></item><item><title>State Externalization and the Sticky Session Compromise</title><link>https://blog.zolty.systems/posts/2026-03-10-jellyfin-ha-state-sessions/</link><pubDate>Tue, 10 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-10-jellyfin-ha-state-sessions/</guid><description>Eleven ConcurrentDictionaries hold Jellyfin&amp;#39;s runtime state in memory. Here&amp;#39;s what we externalized, what we deferred, and why sticky sessions won.</description></item><item><title>Storage Refactoring and the SQLite-to-PostgreSQL Migration</title><link>https://blog.zolty.systems/posts/2026-03-09-jellyfin-ha-storage-migration/</link><pubDate>Mon, 09 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-09-jellyfin-ha-storage-migration/</guid><description>Deploying PostgreSQL on k3s, restructuring Jellyfin&amp;#39;s volumes from monolithic PVC to NFS + Longhorn, and migrating years of media metadata without losing playback history.</description></item><item><title>Forking Jellyfin: A PostgreSQL Database Provider in .NET 10</title><link>https://blog.zolty.systems/posts/2026-03-08-jellyfin-ha-postgresql-provider/</link><pubDate>Sun, 08 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-08-jellyfin-ha-postgresql-provider/</guid><description>Building a pluggable PostgreSQL database provider for Jellyfin using EF Core and Npgsql. The deepest code change in the HA project — and where AI agents needed the most correction.</description></item><item><title>Multi-Model Planning: The Same Pattern That Shipped dnd-multi</title><link>https://blog.zolty.systems/posts/2026-03-07-jellyfin-ha-multi-model-planning/</link><pubDate>Sat, 07 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-07-jellyfin-ha-multi-model-planning/</guid><description>Four AI models reviewed the Jellyfin HA plan before any code was written. Here&amp;#39;s what each model caught that the others missed, and how the pattern works.</description></item><item><title>Why Jellyfin Can't Scale (And What We're Going to Do About It)</title><link>https://blog.zolty.systems/posts/2026-03-06-jellyfin-ha-why-it-cant-scale/</link><pubDate>Fri, 06 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-06-jellyfin-ha-why-it-cant-scale/</guid><description>Jellyfin was built for a single process on a single machine. Here&amp;#39;s every architectural reason it can&amp;#39;t run two pods — and the four-phase plan to fix it.</description></item><item><title>Seven Alerts, Three Bugs, One AI Debug Session: A Kubernetes Incident Report</title><link>https://blog.zolty.systems/posts/2026-03-04-ai-driven-incident-response/</link><pubDate>Wed, 04 Mar 2026 22:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-04-ai-driven-incident-response/</guid><description>A complete incident report of a multi-failure Kubernetes debugging session: Longhorn self-healing, stale Jobs, an expired ECR secret, and three nested Python bugs that all had to fall in order before dnd-backend could start.</description></item><item><title>Self-Hosted AI Chat: Open WebUI, LiteLLM, and AWS Bedrock on k3s</title><link>https://blog.zolty.systems/posts/2026-03-04-private-ai-chat/</link><pubDate>Wed, 04 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-04-private-ai-chat/</guid><description>Deploying a private ChatGPT alternative on a homelab k3s cluster using Open WebUI, LiteLLM proxy, and four AWS Bedrock models -- with OAuth2 for access control.</description></item><item><title>Governing AI Coding Tools Across an Engineering Team</title><link>https://blog.zolty.systems/posts/2026-03-03-governing-ai-coding-tools/</link><pubDate>Tue, 03 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-03-governing-ai-coding-tools/</guid><description>AI coding tools have gone from curiosity to default for most developers. Here&amp;#39;s a governance framework that actually works without killing productivity.</description></item><item><title>When the AI Breaks Production: Failure Patterns, Guardrails, and Measuring What Works</title><link>https://blog.zolty.systems/posts/2026-03-02-ai-failure-patterns/</link><pubDate>Mon, 02 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-02-ai-failure-patterns/</guid><description>A catalog of AI-caused production incidents in a homelab Kubernetes cluster, the guardrail architecture built to prevent them, and an honest assessment of what still goes wrong.</description></item><item><title>Two AIs, One Codebase: Using Local Copilot to Direct GitHub Copilot via Issues and PRs</title><link>https://blog.zolty.systems/posts/2026-03-02-llm-github-pr-workflow/</link><pubDate>Mon, 02 Mar 2026 18:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-02-llm-github-pr-workflow/</guid><description>How I shipped a 109-day project in 8 hours: multi-model planning with ChatGPT, Gemini, GPT Codex, and Claude Opus, then Claude Sonnet 4.6 implementing overnight via GitHub Copilot agent PRs.</description></item><item><title>Building an AI Dungeon Master: Full-Stack D&amp;D Platform on k3s</title><link>https://blog.zolty.systems/posts/2026-03-02-dnd-multi-ai-dungeon-master/</link><pubDate>Mon, 02 Mar 2026 08:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-02-dnd-multi-ai-dungeon-master/</guid><description>How I built a multiplayer D&amp;amp;D platform with an AI Dungeon Master powered by AWS Bedrock, a 5-tier lore memory system, and a Dwarf Fortress-style world simulation engine.</description></item><item><title>Environment manifests for AI assistants across every repo</title><link>https://blog.zolty.systems/posts/2026-03-01-environment-manifests-for-ai/</link><pubDate>Sun, 01 Mar 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-01-environment-manifests-for-ai/</guid><description>How I stopped AI assistants from suggesting wrong tool versions and builds by adding a single environment instructions file to every repository.</description></item><item><title>Getting Started with GitHub Copilot: What Actually Works</title><link>https://blog.zolty.systems/posts/2026-03-01-github-copilot-setup-guide/</link><pubDate>Sun, 01 Mar 2026 06:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-03-01-github-copilot-setup-guide/</guid><description>A $20/month Copilot sub is the best AI tooling investment right now. Here&amp;#39;s how to set it up so it actually knows your projects -- instructions, skills, memory, and model selection.</description></item><item><title>Building an AI Memory System: From Blank Slate to 482 Lines of Hard-Won Knowledge</title><link>https://blog.zolty.systems/posts/2026-02-26-ai-memory-system/</link><pubDate>Thu, 26 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-26-ai-memory-system/</guid><description>How the AI instruction system evolved from a 10-line file to a multi-layered architecture of copilot-instructions, path-scoped rules, and a living failure database -- and why every production incident makes the AI smarter.</description></item><item><title>When Monitoring Goes Blind: A Longhorn Storage Corruption Incident</title><link>https://blog.zolty.systems/posts/2026-02-25-monitoring-outage-longhorn-wal-corruption/</link><pubDate>Wed, 25 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-25-monitoring-outage-longhorn-wal-corruption/</guid><description>How a new cluster node triggered Longhorn replica I/O errors that silently corrupted Prometheus WAL and Loki TSDB files, leaving Grafana showing No data for 26 hours.</description></item><item><title>The Cluster That Documents Itself: Self-Hosted Wiki.js as Living Infrastructure Knowledge</title><link>https://blog.zolty.systems/posts/2026-02-24-internal-wiki-autodocumentation/</link><pubDate>Tue, 24 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-24-internal-wiki-autodocumentation/</guid><description>Why I self-hosted Wiki.js as the primary knowledge layer for the cluster, how the AI assistant writes to it after completing work, and how it became the most useful thing I built.</description></item><item><title>When Your AI Memory System Eats Its Own Context Window</title><link>https://blog.zolty.systems/posts/2026-02-23-ai-context-window-audit/</link><pubDate>Mon, 23 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-23-ai-context-window-audit/</guid><description>A multi-repo AI skill audit found 401KB of duplicated content consuming 100K tokens. Here&amp;#39;s how I measured, diagnosed, and fixed context window bloat.</description></item><item><title>Upgrading k3s Across Five Minor Versions: v1.29 to v1.34 on a Homelab Cluster</title><link>https://blog.zolty.systems/posts/2026-02-22-k3s-upgrade-v129-to-v134/</link><pubDate>Sun, 22 Feb 2026 23:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-22-k3s-upgrade-v129-to-v134/</guid><description>Rolling k3s upgrade from v1.29.0 to v1.34.4 across 8 nodes with interleaved Longhorn upgrades, broken SSH, and unexpected Traefik pinning.</description></item><item><title>AI-Assisted Infrastructure: Claude, Copilot, and the Memory Protocol</title><link>https://blog.zolty.systems/posts/2026-02-22-ai-assisted-infrastructure/</link><pubDate>Sun, 22 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-22-ai-assisted-infrastructure/</guid><description>How I use Claude Opus 4.6, GitHub Copilot, and AWS Bedrock to build and operate a production homelab cluster -- and why AI without memory is a liability.</description></item><item><title>Benchmarking Every Subsystem: NVMe, CPU, Memory, and 10GbE on Four Proxmox Hosts</title><link>https://blog.zolty.systems/posts/2026-02-22-cluster-benchmarks/</link><pubDate>Sun, 22 Feb 2026 12:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-22-cluster-benchmarks/</guid><description>Full hardware benchmark results for four Lenovo M920q Proxmox hosts — NVMe SMART health, fio disk IOPS, sysbench CPU and memory bandwidth, iperf3 10GbE throughput, and the dramatic thermal impact of custom 3D-printed cooling.</description></item><item><title>I Am Zolty: Building a Natural Language Media Request System</title><link>https://blog.zolty.systems/posts/2026-02-21-jellyseerr-ai-media-requests/</link><pubDate>Sat, 21 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-21-jellyseerr-ai-media-requests/</guid><description>Connecting Jellyseerr&amp;#39;s API to Claude so I can say &amp;#39;download 100GB of family-friendly anime that I might like&amp;#39; and have the cluster handle the rest — including scheduled runs that queue content automatically.</description></item><item><title>10GbE Networking on a Budget: Mellanox ConnectX-3 and Bricked NICs</title><link>https://blog.zolty.systems/posts/2026-02-20-10gbe-networking/</link><pubDate>Fri, 20 Feb 2026 21:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-20-10gbe-networking/</guid><description>Upgrading the homelab to 10GbE with used Mellanox ConnectX-3 NICs — including the firmware flash that bricked a NIC and the cold boot recovery procedure.</description></item><item><title>Monitoring Everything: Prometheus, Grafana, and Loki on k3s</title><link>https://blog.zolty.systems/posts/2026-02-19-monitoring-everything/</link><pubDate>Thu, 19 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-19-monitoring-everything/</guid><description>A comprehensive look at the monitoring stack powering the homelab: kube-prometheus-stack for metrics, Loki for logs, custom dashboards, alert tuning, and the performance benchmarks I ran to validate the platform.</description></item><item><title>GPU Passthrough on Proxmox for Hardware Transcoding</title><link>https://blog.zolty.systems/posts/2026-02-18-gpu-passthrough/</link><pubDate>Wed, 18 Feb 2026 19:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-18-gpu-passthrough/</guid><description>A complete guide to passing through Intel UHD 630 iGPU from Proxmox to a k3s VM for Jellyfin hardware transcoding — IOMMU, VFIO, VA-API, and all the troubleshooting.</description></item><item><title>Building a Complete Media Stack with Kubernetes</title><link>https://blog.zolty.systems/posts/2026-02-17-media-stack/</link><pubDate>Tue, 17 Feb 2026 20:30:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-17-media-stack/</guid><description>Deploying Jellyfin with GPU transcoding, the *arr suite, automated seedbox sync with rclone, and NFS storage — a complete self-hosted media pipeline on k3s.</description></item><item><title>VLAN Migration: Moving a Live Kubernetes Cluster Without Downtime</title><link>https://blog.zolty.systems/posts/2026-02-16-vlan-migration/</link><pubDate>Mon, 16 Feb 2026 22:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-16-vlan-migration/</guid><description>How I migrated all k3s nodes, MetalLB pool, and load balancer IPs from a flat network to a dedicated Server VLAN — and the etcd recovery procedure I needed when things went wrong.</description></item><item><title>Top 10 Production Failures and What I Learned</title><link>https://blog.zolty.systems/posts/2026-02-15-top-10-production-failures/</link><pubDate>Sun, 15 Feb 2026 19:30:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-15-top-10-production-failures/</guid><description>One week into running a homelab k3s cluster in production, here are the top 10 failures I have encountered and the lessons each one taught me about Kubernetes operations.</description></item><item><title>Building an AI-Powered Alert System with AWS Bedrock</title><link>https://blog.zolty.systems/posts/2026-02-14-ai-powered-alerts/</link><pubDate>Sat, 14 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-14-ai-powered-alerts/</guid><description>How I built an AI alert responder that analyzes Prometheus alerts using AWS Bedrock and suggests remediation actions directly in Slack, plus multi-user dev workspaces on k3s.</description></item><item><title>Deploying a Microservices Architecture on k3s</title><link>https://blog.zolty.systems/posts/2026-02-13-microservices-on-k3s/</link><pubDate>Fri, 13 Feb 2026 21:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-13-microservices-on-k3s/</guid><description>Lessons from deploying a Vue.js frontend with 7 FastAPI backend services, NATS messaging, PostgreSQL, and Redis on a homelab k3s cluster.</description></item><item><title>Self-Hosted CI/CD: Running GitHub Actions Runners on k3s</title><link>https://blog.zolty.systems/posts/2026-02-12-self-hosted-cicd/</link><pubDate>Thu, 12 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-12-self-hosted-cicd/</guid><description>A deep dive into GitHub Actions Runner Controller (ARC) on k3s — from initial setup to scaling, RBAC configuration, and all the gotchas I hit along the way.</description></item><item><title>Migrating a Full-Stack App to Kubernetes: Digital Signage on k3s</title><link>https://blog.zolty.systems/posts/2026-02-11-digital-signage-on-k3s/</link><pubDate>Wed, 11 Feb 2026 19:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-11-digital-signage-on-k3s/</guid><description>Taking an Angular SPA and 7 Flask microservices from local development to Kubernetes — covering MQTT brokers, multi-service deployments, and the joys of container networking.</description></item><item><title>Home Assistant on Kubernetes and Building a Proxmox Watchdog</title><link>https://blog.zolty.systems/posts/2026-02-10-home-assistant-and-watchdog/</link><pubDate>Tue, 10 Feb 2026 20:30:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-10-home-assistant-and-watchdog/</guid><description>Deploying Home Assistant on k3s with hostNetwork and split routing, plus building an automated Proxmox watchdog that power-cycles unresponsive hosts via smart plugs.</description></item><item><title>Deploying First Applications: From Zero to Production in 24 Hours</title><link>https://blog.zolty.systems/posts/2026-02-09-first-applications/</link><pubDate>Mon, 09 Feb 2026 22:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-09-first-applications/</guid><description>Day two of the cluster build: deploying Cardboard (TCG price tracker), Trade Bot (automated trading), a cluster dashboard, monitoring with Prometheus, and dev workspaces — all in one marathon session.</description></item><item><title>Day One: Bootstrapping a k3s Cluster with Terraform and Ansible</title><link>https://blog.zolty.systems/posts/2026-02-08-cluster-genesis/</link><pubDate>Sun, 08 Feb 2026 21:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-08-cluster-genesis/</guid><description>From bare Proxmox hosts to a fully operational k3s HA cluster in a single day, using Terraform for VM provisioning and Ansible for configuration management.</description></item><item><title>Choosing the Hardware: Why I Went with Lenovo M920q for My Homelab</title><link>https://blog.zolty.systems/posts/2026-02-07-choosing-the-hardware/</link><pubDate>Sat, 07 Feb 2026 20:00:00 -0600</pubDate><guid>https://blog.zolty.systems/posts/2026-02-07-choosing-the-hardware/</guid><description>How I chose the Lenovo ThinkCentre M920q as the foundation for a production-grade k3s homelab cluster, and why tiny form factor PCs are the best kept secret in homelabbing.</description></item><item><title>Welcome to zolty.systems</title><link>https://blog.zolty.systems/posts/welcome-to-zolty-systems/</link><pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog.zolty.systems/posts/welcome-to-zolty-systems/</guid><description>Introducing zolty.systems -- a blog about homelab infrastructure, Kubernetes, and the lessons learned from running production workloads at home.</description></item></channel></rss>