Step one
The queue
Write thirty pieces on a Sunday. Publish one a day for a month, without touching anything.
The hard part of a daily blog is not the writing. It is the daily. Miss three days and the habit is gone; miss ten and the site is dead, except that it does not look dead, because a static site with nothing new on it looks exactly like a static site that is doing fine.
So the writing and the publishing are separated. Every file in content/posts/ carries a publish: date. The build writes out only the pieces whose date has arrived. Everything else sits in the queue, on disk, in git, invisible.
That means a productive Sunday buys a quiet month. You write six pieces, date them across the next six days, commit, and close the laptop. The scheduled workflow runs every night, finds the one that came due, builds it, verifies it and deploys. Nothing is released early, because the build has no way to release it early.
Why the release hour matters
A piece dated the fifth does not go live at midnight. It goes live at the hour named in site.json, in the timezone named there too. Six in the evening, local, is a reasonable default: it is when people read.
The awkwardness is that GitHub's scheduler speaks only UTC and does not observe daylight saving. Six in the evening in California is one in the morning UTC for half the year and two for the other half. The workflow therefore fires at both hours, and the release gate in the build makes whichever one is wrong into a no-op. One of them always lands.
Python zoneinfo, the standard library module doing the timezone work →
What happens when it runs out
A cron job that publishes nothing still reports success. That is the failure this system cannot otherwise show you: the queue empties, the workflow goes green every night, and the blog quietly stops.
So the last step of every run is build.py --require-queue 7, which exits non-zero when fewer than seven pieces remain. The publish has already happened by then, so nothing is blocked. All it does is turn silence into a red run and an email.
••••••
No. 1 in How It Works, a series of 3.