Skip to content

Blog

pino vs winston: Choosing the Right Logger for Node.js

Introduction

When building Node.js applications, logging is essential for debugging, monitoring, and analytics. Two of the most popular logging libraries are pino and winston. While both serve the same purpose, they differ significantly in design philosophy, performance characteristics, and feature sets. This post compares pino and winston across several dimensions to help you decide which library best fits your project.

Goodbye Docker Traefik, Hello k3s: Migrating 24 DuckDNS Routes to cert-manager TLS

When your home lab outgrows Docker Compose, the reverse proxy becomes the first casualty. I ran Traefik as a Docker container with its own ACME resolver — issuing per-domain TLS certificates via DuckDNS DNS challenges. It worked for a year. Then k3s entered the picture, and everything broke.

This post documents the real, messy, iterative migration of 24 DuckDNS domains from Docker Traefik to k3s IngressRoutes backed by a single cert-manager Certificate with HTTP-01 challenges. Including the disk pressure evictions, corrupted Traefik images, and ACME email misconfigurations that happened along the way.

Agent Orchestration in Practice: How Nocturna Uses Hermes for Kanban Automation

Most AI agent demos stop at a chat window. Nocturna goes further — it's a full kanban control center that spawns Hermes subagents, runs scheduled tasks via cron, delegates work to peer agents, and manages it all through a real-time board UI. This post walks through the actual integration architecture, with code from the Nocturna repo.

Building Nocturna — The Hermes Kanban Control Center

After months of running Hermes Agent for home-lab automation, I needed a visual way to track, manage, and replay tasks. Nocturna was born: a React + Express kanban board that connects to Hermes in two modes — Gateway (HTTP API to a remote instance) or Local CLI (spawns the hermes binary directly).

Nocturna provides a visual kanban board for Hermes tasks, supporting both remote Gateway API and local CLI modes.

DRM-free at Last: How I Made VRT MAX Watchlist Downloads Work on Raspberry Pi

VRT MAX streams are DRM-protected and notoriously hard to download. After weeks of work involving pywidevine, N_m3u8DL-RE, and a custom _vrt_drm_* field detector, the thuis-v4 downloader now gracefully handles both DRM and non-DRM content. This post covers the full journey — from detecting DRM in the HLS manifest to the fallback strategy that keeps non-DRM downloads fast.

Making my docs readable by AI agents

My documentation hub has always been built for humans: MkDocs, a clean theme, one navigable page per concept. That works well — until you ask an AI agent to find something in it. An agent doesn't browse; it retrieves. And plain HTML pages are a poor retrieval target. This post describes how I made the same knowledge base work for both audiences, running entirely on a Raspberry Pi 5.

Welcome to the blog

This is the first post on the new blog section of the documentation hub. Short notes, release announcements and write-ups that do not belong to a single project's manual will live here from now on.