~/ latest posts
Automatic ventilation by PM2.5: a Home Assistant automation
A Home Assistant automation that switches an air purifier/ventilation by PM2.5: threshold + hysteresis (on at 35, off at 15 µg/m³), an optional push …
GitLab CI for Wagtail/Django: Build, Migrations, Deploy
Lean GitLab CI pipeline for Wagtail/Django: test → build → deploy. Code is baked into the Docker image, migrations run deterministically on container start, …
MCP server doesn't survive a deploy: SSE vs. Streamable-HTTP
MCP tools failing with -32602 after every deploy? The cause is the stateful SSE transport, whose sessions die on a container restart. The fix: …
Postgres Backup for Self-Hosted Apps: From pg_dump to PITR
How to back up Postgres properly in a self-hosted setup: logical dumps with pg_dump, incremental WAL archiving for point-in-time recovery and off-site encryption with …
Wagtail Multi-Site: Multiple Sites from a Single Codebase
How a single Wagtail project can carry several completely different sites: the Sites framework, custom page types per domain, shared locales and reverse-proxy routing. …
Claude Code Template Handoff: From Design to Wagtail Layout
How a static claude.ai/design prototype becomes a real, responsive Wagtail template: grid-template-areas for the hero-grid, the code-frame as a fallback, the terminal aesthetic via …
Claude AI Design: Blog Redesign with a Single Sentence Prompt
How I rebuilt devmaker.net with claude.ai/design from a generic Tailwind blog into a Terminal Editorial design – using a single sentence as a prompt. …
Tailwind CSS + daisyUI in Wagtail/Django: Pragmatic Setup Without the Node Nightmare
How I set up Tailwind CSS v4 together with daisyUI in a Wagtail/Django project – with npm watch in dev, a clean build in …