Skip to content

Things I've built

Open-source tools and experiments, mostly born from a real problem at work or at home. Every one of them taught me something worth writing about.

Branch Manager

A web app for managing Azure DevOps branches across many repositories at once. Built because clicking through the portal fifty times per release is not a workflow.

Problem
Azure DevOps has no built-in UI for bulk branch cleanup across multiple repositories, leaving teams to deal with hundreds of stale branches manually.
What I built
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.
Stack
  • Node.js
  • Express
  • Azure DevOps API
  • Entra ID
Branch Manager: A Web UI for Cleaning Up Stale Azure DevOps Branches

Custom AI Chat

A fully self-hosted AI chat stack with local models, image generation and web search. Private by default, no subscription attached.

Problem
I use ChatGPT, Copilot and Claude, but they all run on someone else's infrastructure and none of them work offline. For sensitive work I wanted a model on my own hardware, without a separate subscription for every vendor.
What I built
CustomAIChat, one Docker Compose stack: Open WebUI as the chat, LiteLLM in front of local and cloud models, SearXNG for private web search and Langfuse for tracing. GPU services start one at a time, so it fits on my 8 GB card.
Stack
  • Open WebUI
  • Docker
  • Self-hosted LLMs
My Ultimate Self-Hosted AI Chat Stack

Shelly MCP Server

An MCP server that lets AI assistants control Shelly smart home devices directly. Talking to your house, but in a structured protocol.

Problem
There was no reliable Shelly MCP server I could use to discover, inspect, and control devices consistently while preparing a migration to Home Assistant.
What I built
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.
Stack
  • MCP
  • TypeScript
  • Home Assistant
Why I Built a Shelly MCP Server (So I Could Migrate to Home Assistant)

This website

The site you are looking at. Nuxt 4, Nuxt Content and Tailwind 4, statically generated and served from Cloudflare's edge. Designed and vibe coded in the open.

Problem
My blog ran on Hugo. Every time I wanted more, like theming, transitions or an RSS feed, I was fighting the framework. And AI models knew Hugo's templating only at a surface level.
What I built
A Nuxt site with my Markdown posts in Nuxt Content, live search, tag pages, an RSS feed and a light and dark theme. Built in short loops with AI, in a codebase I understand well enough to keep changing.
Stack
  • Nuxt 4
  • Tailwind 4
  • Cloudflare Pages
From Hugo to Nuxt: Why I Switched to Vibe Code My Blog

The rest of my public code lives on GitHub (opens in a new tab).