Portfolio
-

HabitOrbit — Offline-First Habit Tracker
I built HabitOrbit, an offline-first habit tracker and streak app, and it lives at habit-loop.kouider.de. This post covers why I built it, how it handles storage and sync, and what makes it different from the usual habit apps. Why I built it Before HabitOrbit I tracked my habits with Loop Habit Tracker, the open-source app…
-

Hermes Agent — My Experience Installing & Configuring It
Hermes Agent is an open-source, self-improving AI agent by Nous Research. What it is, how its learning loop works, and how to install it in under two minutes.
-

GitLab — Self-Hosted at gitlab.kouider.de
I run my own GitLab at gitlab.kouider.de — the instance and its CI infrastructure are fully managed by me, including two GitLab runners with different build strategies. The instance Self-hosted GitLab gives complete control: users and groups, fine-grained project permissions, repositories, and the whole CI/CD pipeline layer. Running it myself means no third-party limits on…
-

MailCow — 3,000+ Mailboxes with a Laravel + Angular Control Plane
I run and manage a MailCow mail server carrying 3,000+ mailboxes, backed by a custom Laravel application with an Angular UI that manages users and configuration through the MailCow API. This post covers the platform and the mail knowledge behind it. The mail platform MailCow is the engine — a Docker-based mail suite (Postfix, Dovecot,…
-

LXC/LXD Homelab — 15+ Containers on a Private Tailscale Network
My homelab runs on LXC/LXD — a self-managed Ubuntu host running 15+ system containers, connected to my cloud VPS over a private Tailscale network. This post is about the architecture and the knowledge behind it. Why LXC/LXD LXC is OS-level containerisation: containers share the host kernel, so they boot in seconds with a fraction of…
-

Webmin & Fail2Ban — Ubuntu Server Management
Webmin is the management layer of my Ubuntu servers, and Fail2Ban is the first line of their defence. This post covers what that stack is and the knowledge behind it — not a tutorial, just how I think about server administration and hardening. Webmin — full OS administration in one UI Webmin administers an entire…
-

Private NPM Registry
A self-hosted NPM registry (Verdaccio) for my private packages — scoped, proxied, and shared by all my projects. This post covers the platform and the knowledge behind it. Why a private NPM registry Internal libraries and shared code belong on a private registry: they stay out of the public npm registry entirely, they’re available to…
-

Private Docker Registry
A self-hosted container registry for private Docker images — on my own infrastructure (Docker Registry v2 with Nginx + SSL), wired into my CI/CD pipeline. This post covers the platform and the knowledge behind it. Why a private registry Not every image belongs on a public registry. Internal builds, client-specific images and in-progress work stay…
-

AI Chat Extension
Open source browser extension (Manifest V3) for Chrome and Firefox — an AI chat assistant in the toolbar backed by the DeepSeek API.
-

Menu Context AI
Android app that analyses restaurant menus with a local AI/LLM (DeepSeek API). Built in Kotlin with AES-256-GCM encrypted storage for conversation history.