September 2, 2026
a pixel mountain
Drawing Lovundfjellet as pixel art for the header, and the fight to get the shape and the favicon right.
September 2, 2026
Drawing Lovundfjellet as pixel art for the header, and the fight to get the shape and the favicon right.
September 1, 2026
The old blog design was too generic, so I started over with green and a Lovund feel.
July 3, 2026
What actually broke during the first full walkthrough of the finished blog, the comment 413 mystery that never quite resolved, and what building all of this actually taught me.
July 1, 2026
What a reverse proxy actually is, why every service sits behind one Caddy instance, auto-TLS I haven't tested for real yet, and getting healthchecks to actually mean something.
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 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.