skip to content
Posts ·

How this blog is built


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.

Architecture diagram for Siann's BlogArchitecture diagram for Siann's Blog
The blog stays mostly static, while photos and post images are served from Cloudflare storage and metadata APIs.

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.

Upload flow diagram for the photo managerUpload flow diagram for the photo manager
The local manager prepares files, uploads objects to R2, and writes metadata into D1 so the blog can render the latest content.
Photo manager upload screen
The local photo manager is where I prepare gallery photos and post images before publishing them.

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.