June 29, 2026
buckets, blobs, and the day uploads started dying at 3MB
What MinIO and S3-compatible storage actually are, how the blog checks upload types before saving them, and the size-cap bug that took way longer to find than it should have.
Learning to build and self-host things in my spare time, from Lovund, an island off the Helgeland coast.
June 29, 2026
What MinIO and S3-compatible storage actually are, how the blog checks upload types before saving them, and the size-cap bug that took way longer to find than it should have.
June 28, 2026
A Python motion-detection script that watches a webcam feed and emails me a snapshot the moment something moves through frame.
June 26, 2026
Writing posts in a split-pane markdown editor with a live preview, moderating comments, and why the server checks permissions even though the UI already hid the button.
June 25, 2026
Server-side rendering, form actions instead of client fetch calls, the proxy that keeps the access token out of the browser entirely, and sanitized markdown rendering.
June 23, 2026
How the blog service models posts, slugs, drafts and scheduled publishing, a nested comment tree, likes and reports, on top of Postgres migrations.
June 22, 2026
How accounts, password hashing, tokens and cookies, refresh rotation, and rate limiting work under the hood of this blog's login page.
June 21, 2026
The honest, slightly overcomplicated story of why I built and self-host this blog myself instead of using a ready-made platform.