Loading post.
Loading post.
9 July 2026
Reusing Payload and Cloudinary to publish these articles.
I wanted somewhere on the site to write these build logs. Payload (the CMS behind the site's admin) and Cloudinary (where the images are hosted) were already running the photo gallery, so a blog was just one more collection and two routes - a listing page and a post page. Nothing new to build.
A post is a Payload collection - six fields: title, slug, date, excerpt, cover image, and the rich-text body. I wanted writing a post to feel as easy as possible.
Drafts are built in. With native drafts (versions: { drafts: true }), Payload keeps unpublished posts out of public queries itself, so the frontend never has to enforce the boundary.
Blog images are separate. They get their own media-blog collection and Cloudinary folder. By default the editor's image button lets you pick from every image collection on the site - the photo gallery included - so I locked it to media-blog so it shows blog images only.

My initial worry with using a CMS over plain files was lock-in, but it turned out to be a non-issue. Payload exports everything as JSON, and there's an official converter to markdown - if I ever wanted to change my blogging interface, moving out would be an afternoon's export script.
The last item on the build list was to write something real. Now comes the actual writing.