[{"data":1,"prerenderedAt":26},["ShallowReactive",2],{"projects-posts":3},[4,10,16,22],{"path":5,"title":6,"problem":7,"outcome":7,"cover":8,"locale":9},"\u002Fblog\u002Fai\u002Fultimate-selfhosted-ai-chat","My Ultimate Self-Hosted AI Chat Stack",null,"\u002Fimages\u002Fblog\u002Fai-stack\u002Fai-stack-infographic.avif","en",{"path":11,"title":12,"problem":13,"outcome":14,"cover":15,"locale":9},"\u002Fblog\u002Fdevops\u002Fbranch-manager-azure-devops","Branch Manager: A Web UI for Cleaning Up Stale Azure DevOps Branches","Azure DevOps has no built-in UI for bulk branch cleanup across multiple repositories, leaving teams to deal with hundreds of stale branches manually.","A self-hosted Node.js web app that connects to Azure DevOps, lets you filter and review branches across all repos, and deletes them in bulk with a single confirmation.","\u002Fimages\u002Fblog\u002Fbranch-manager-azure-devops\u002Fbranch-manager-login-light-mode.avif",{"path":17,"title":18,"problem":19,"outcome":20,"cover":21,"locale":9},"\u002Fblog\u002Fhomelab\u002Fshelly-mcp-server-home-assistant-migration","Why I Built a Shelly MCP Server (So I Could Migrate to Home Assistant)","There was no reliable Shelly MCP server I could use to discover, inspect, and control devices consistently while preparing a migration to Home Assistant.","I built and published shelly-mcp-server so I can discover devices, enrich metadata, and control Shelly hardware from MCP clients as part of my migration workflow.","\u002Fimages\u002Fblog\u002Fshelly-mcp\u002Fshelly-mcp-cover.avif",{"path":23,"title":24,"problem":7,"outcome":7,"cover":25,"locale":9},"\u002Fblog\u002Fweb\u002Ffrom-hugo-to-nuxt-vibe-coding","From Hugo to Nuxt: Why I Switched to Vibe Code My Blog","\u002Fimages\u002Fblog\u002Ffrom-hugo-to-nuxt\u002Fcover.avif",1794424573966]