This site is built with Astro. The writing stays as Markdown in the repository, because that keeps the blog simple: every post is versioned, easy to edit, and deployed with the rest of the site.
The public site is hosted on Cloudflare Pages. It is still a static site, but the photo section is a little more dynamic. Photos are stored in Cloudflare R2, and their metadata lives in Cloudflare D1. A small Worker exposes a read-only photo API for the blog, so the page can load the latest photos without rebuilding the whole site every time I upload something new.


I also built a local photo manager for myself. It can read photos from a local folder, resize full and thumbnail versions, edit titles and metadata, upload the files to R2, and write the records into D1. That part is intentionally private and local, because it is only a tool for publishing.



The current shape is a compromise I like: posts stay simple and static, while photos can be updated more freely. I expect the system to change as I use it, but this is enough structure to make the site useful without turning it into a full CMS.