← All posts
build-notes1 min read

How this site is built

A static site, a self-hosted newsletter and no ports open to the internet. Here's the whole setup.

Every post on this site is a note in my Obsidian vault. When I deploy, the site rebuilds into plain HTML and gets served from a tiny nginx container. There’s no database behind the blog, so there’s nothing to patch and nothing to break.

Writing a post

A new post is one note. Its properties set the date and tags, and setting status to published puts it live.

---
description: Astro, Listmonk and one small VPS.
date: 2026-11-07
tags: [build-notes]
status: published
---

Every post on this site is a note in my Obsidian vault...

The newsletter

The signup box sends your address to Listmonk, a self-hosted mailing list manager. It emails you a confirmation link, remembers which lists you picked, and puts an unsubscribe link in every email.

No open ports Nothing on the server listens on a public port. Cloudflare Tunnel carries the traffic in, and the admin side is only reachable over my private Tailscale network.

[Continue the post…]

Enjoyed this? Get the next one by email.

App releases, feature updates and build notes. No spam, unsubscribe any time.

Double opt-in. Unsubscribe in one click. Privacy