<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Homelab Adventures</title><link>https://hai.wxs.ro/</link><description>Documenting the journey of building and maintaining a 3-node Proxmox homelab with Kubernetes, 90+ ArgoCD apps, and AI-assisted development</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://hai.wxs.ro/index.xml" rel="self" type="application/rss+xml"/><item><title>Git Worktrees</title><link>https://hai.wxs.ro/guides/git-worktrees/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/guides/git-worktrees/</guid><description>Multiple branches checked out side-by-side, and why it pairs perfectly with AI coding.</description></item><item><title>The one vendor platform on my open-source stack: Spectro Cloud Palette</title><link>https://hai.wxs.ro/infrastructure/spectrocloud/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/infrastructure/spectrocloud/</guid><description>A year running my homelab Kubernetes on Spectro Cloud Palette. Easy to get started with, deep when you need it: next-next-finish cluster profiles for day one, raw pack values and targeted replace() overrides for power users, and the uncanny Claude afternoon that wrote the Terraform</description></item><item><title>Prepuller Action: GitOps-native Image Caching, as Code</title><link>https://hai.wxs.ro/custom-tools/prepuller/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/custom-tools/prepuller/</guid><description>A Forgejo Action for Flux-based GitOps repos that generates DaemonSets to pre-pull container images for labeled HelmReleases, keeping critical images warm on every worker node.</description></item><item><title>s3bkp: Backup-as-Code for Kubernetes PVCs</title><link>https://hai.wxs.ro/custom-tools/s3bkp/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/custom-tools/s3bkp/</guid><description>How I built a Kyverno-injected sidecar to back up and restore PVCs to S3 during blue/green cluster reinstalls, and why I eventually replaced it with VolSync.</description></item><item><title>From s3bkp to VolSync</title><link>https://hai.wxs.ro/migrations/s3bkp-to-volsync/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/migrations/s3bkp-to-volsync/</guid><description>How a YouTube video made me realize my custom backup tool was a reinvented wheel, and the migration to VolSync that followed.</description></item><item><title>Reinventing the Backup Wheel</title><link>https://hai.wxs.ro/failures/reinventing-the-wheel/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/failures/reinventing-the-wheel/</guid><description>I built a 2,400-line bash backup tool for Kubernetes before realizing a well-maintained open-source operator already existed. Not a total loss, but a lesson in doing your research first.</description></item><item><title>Co-Authored with AI</title><link>https://hai.wxs.ro/ai-stuff/co-authored-with-ai/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/co-authored-with-ai/</guid><description>A growing log of upstream OSS contributions I made with Claude Code that I could not have made without it</description></item><item><title>The KubeCon Power Outage</title><link>https://hai.wxs.ro/failures/kubecon-power-outage/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/failures/kubecon-power-outage/</guid><description>Left for KubeCon Amsterdam 2026, power went out at home, and a cascade of failures left my wife without WiFi, water, or any way to fix it</description></item><item><title>My KubeCon Survival Guide</title><link>https://hai.wxs.ro/guides/kubecon-guide/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/guides/kubecon-guide/</guid><description>Lessons from attending every European KubeCon since 2023, plus practical tips for first-timers and veterans alike</description></item><item><title>AlertManager Slack Notifications That Don't Suck</title><link>https://hai.wxs.ro/kubernetes/alertmanager-apple-watch/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/kubernetes/alertmanager-apple-watch/</guid><description>Making Prometheus AlertManager Slack alerts readable on Apple Watch and macOS instead of raw label dumps</description></item><item><title>Arc Browser MCP</title><link>https://hai.wxs.ro/ai-stuff/arc-devtools-mcp/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/arc-devtools-mcp/</guid><description>Controlling Arc Browser from Claude Code using the Chrome DevTools Protocol MCP server</description></item><item><title>RTK: Cutting Token Waste in Claude Code</title><link>https://hai.wxs.ro/ai-stuff/rtk/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/rtk/</guid><description>A Rust CLI proxy that filters noisy tool output before it hits the context window, saving 60-90% of wasted tokens</description></item><item><title>Supercharging Claude Code Permissions with Dippy</title><link>https://hai.wxs.ro/ai-stuff/dippy-permissions/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/dippy-permissions/</guid><description>How I migrated 191 scattered permission rules to a single, readable config with guidance messages</description></item><item><title>Why Crossplane: Building an Internal Developer Platform on Kubernetes</title><link>https://hai.wxs.ro/crossplane/why-crossplane/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/crossplane/why-crossplane/</guid><description>From the Kubernetes Resource Model to Crossplane compositions, how I build platform abstractions that let developers self-service without waiting on ops</description></item><item><title>k8s-cleaner: Finding Orphaned Resources in Kubernetes</title><link>https://hai.wxs.ro/tools/k8s-cleaner/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/tools/k8s-cleaner/</guid><description>Using k8s-cleaner to detect unused ConfigMaps, Secrets, PVCs, non-GitOps deployments, and orphaned CNPG resources with Lua-based scan policies</description></item><item><title>Commands vs MCP vs Skills</title><link>https://hai.wxs.ro/ai-stuff/commands-vs-mcp-vs-skills/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/commands-vs-mcp-vs-skills/</guid><description>Understanding the three ways to extend AI coding agents: slash commands, MCP servers, and skills</description></item><item><title>Claude Code Action for Forgejo</title><link>https://hai.wxs.ro/ai-stuff/claude-code-action-forgejo/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/claude-code-action-forgejo/</guid><description>Forking Anthropic's Claude Code GitHub Action to work on Forgejo, the adapter pattern, and keeping it synced with upstream</description></item><item><title>Custom Claude Code Status Line</title><link>https://hai.wxs.ro/ai-stuff/claude-statusline/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/claude-statusline/</guid><description>A two-line status bar for Claude Code with per-session colors, session topics, context/quota bars, and Kubernetes context</description></item><item><title>From KCL to Custom Go Functions: An 800x CPU Reduction</title><link>https://hai.wxs.ro/crossplane/kcl-to-go-functions/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/crossplane/kcl-to-go-functions/</guid><description>How replacing Crossplane KCL compositions with custom Go functions slashed CPU usage by 800x and memory by 31x — a lesson learned the hard way</description></item><item><title>KCL Compositions to Go Functions</title><link>https://hai.wxs.ro/migrations/kcl-to-go-functions/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/migrations/kcl-to-go-functions/</guid><description>Migrating Crossplane compositions from KCL to custom Go functions for dramatically better resource usage</description></item><item><title>Krew — Homebrew for kubectl</title><link>https://hai.wxs.ro/tools/krew/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/tools/krew/</guid><description>The kubectl plugin manager that turns your CLI into a Swiss Army knife. Here are the plugins I use daily to manage Kubernetes clusters.</description></item><item><title>CLAUDE.md</title><link>https://hai.wxs.ro/ai-stuff/claude-md/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/claude-md/</guid><description>How I use CLAUDE.md files to give Claude Code persistent project context and instructions</description></item><item><title>Radar - A Kubernetes UI I Actually Like</title><link>https://hai.wxs.ro/tools/radar/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/tools/radar/</guid><description>A local-first Kubernetes visibility tool that runs on your laptop, supports all your contexts, and doesn't need to live on your cluster</description></item><item><title>Tailscale in an LXC Container on Proxmox</title><link>https://hai.wxs.ro/guides/tailscale-lxc-proxmox/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/guides/tailscale-lxc-proxmox/</guid><description>Set up a dedicated Tailscale LXC container as a subnet router and exit node on Proxmox VE</description></item><item><title>ArgoCD to Flux</title><link>https://hai.wxs.ro/migrations/argocd-to-flux/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/migrations/argocd-to-flux/</guid><description>Migrating from ArgoCD to Flux — the why, the how, and what I learned</description></item><item><title>What is MCP?</title><link>https://hai.wxs.ro/ai-stuff/mcp-intro/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/mcp-intro/</guid><description>Model Context Protocol — the open standard that lets AI assistants use external tools and data</description></item><item><title>RSS Readers</title><link>https://hai.wxs.ro/tools/rss/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/tools/rss/</guid><description>Why RSS is still the best way to consume content in 2026, and how I use FreshRSS + Fiery Feeds to escape algorithmic feeds</description></item><item><title>dot-ai MCP Server</title><link>https://hai.wxs.ro/ai-stuff/dot-ai/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/dot-ai/</guid><description>Viktor Farcic's AI-powered Kubernetes operations tool — what it does and how I use it for custom prompts</description></item><item><title>Vertical Pod Autoscaler</title><link>https://hai.wxs.ro/kubernetes/vpa/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/kubernetes/vpa/</guid><description>Using VPA to automatically right-size memory requests based on actual usage</description></item><item><title>AI Tips</title><link>https://hai.wxs.ro/ai-stuff/ai-tips/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/ai-tips/</guid><description>Hard-won lessons from months of AI-assisted development</description></item><item><title>People &amp; Sites</title><link>https://hai.wxs.ro/recommended/people-and-sites/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/recommended/people-and-sites/</guid><description>Blogs, newsletters, and creators worth following</description></item><item><title>PriorityClasses</title><link>https://hai.wxs.ro/kubernetes/priority-classes/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/kubernetes/priority-classes/</guid><description>Using Kubernetes PriorityClasses to control pod scheduling and eviction during resource pressure</description></item><item><title>Articles &amp; Videos</title><link>https://hai.wxs.ro/recommended/articles-and-videos/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/recommended/articles-and-videos/</guid><description>Individual pieces worth bookmarking</description></item><item><title>Chat Prompts</title><link>https://hai.wxs.ro/ai-stuff/chat-prompts/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/chat-prompts/</guid><description>Quick one-liner prompts for AI conversations</description></item><item><title>Saved Prompts</title><link>https://hai.wxs.ro/ai-stuff/saved-prompts/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/ai-stuff/saved-prompts/</guid><description>Custom AI prompts that encode domain expertise for Kubernetes, CI/CD, and infrastructure tasks</description></item><item><title>The Stack</title><link>https://hai.wxs.ro/infrastructure/the-stack/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/infrastructure/the-stack/</guid><description>A detailed look at the homelab infrastructure — hardware, software, and services</description></item><item><title>Building This Blog: Hugo + Forgejo CI + GitHub Pages</title><link>https://hai.wxs.ro/guides/building-this-blog/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/guides/building-this-blog/</guid><description>How I built a zero-maintenance blog using Hugo, Forgejo CI, and GitHub Pages</description></item><item><title>Crossplane Composition and Function Versioning</title><link>https://hai.wxs.ro/decisions/crossplane-composition-versioning/</link><pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate><guid>https://hai.wxs.ro/decisions/crossplane-composition-versioning/</guid><description>Why GitOps-synced manifests with automated CI beat OCI package distribution for Crossplane compositions and functions</description></item></channel></rss>