Archive 2026
7
- ./blog.sh — a minimalist blogging system
- Built for one blog on purpose
- No database. One JSON file per post.
- Comments I don't host
- Add your language. It's one file.
- What ./blog.sh doesn't do
- Why not X, and why Threads waits
- A deploy that refuses to nuke your site
- No gems (one asterisk)
- $ ./blog.sh add
- Seven keys
- Why I built this (38 seconds)
- Some posts are conversations
- Fourteen years, and every image came home
8
- ./blog.sh 1.0
- ./blog.sh 1.0.1
- ./blog.sh 1.1
- The post that stays
- Some posts are downloads
- Three drafts, three mornings
- The photo your iPhone won't show anyone
- An old link still knows the way
- The menu got shorter
- The guard that switched itself off
- A blog engine that became an archive
- ./blog.sh 1.2
- Setting up is a conversation now
- ./blog.sh 1.2.1
- Your camera writes down where you were
- Rescuing a blog that died in 2013
- A palette you can look at first
- Most of your Facebook isn't yours
- Walking the archive
- Everything that's wrong, at once
- ./blog.sh 1.3
- The way out ships with it
- Star it to publish it
- What rots quietly
- ./blog.sh 1.3.1
- A skin that survives git pull
- An import only ever adds
- Ten versions back
- ./blog.sh 1.3.2
- My fixtures agreed with me
- Ten smaller things
- The link is the player
- ./blog.sh 1.4
- The card that reads Codeberg
- The same language, spoken differently
- Deploy in your own language
- The other half of check
- What a crash may cost
- Tested like an enemy
- ./blog.sh 1.5
- A slug is an address, not a name
- Two pages the site built out of itself
- Cut before it is written
9
- Posts nobody meant to publish
- An archive you cannot see is not empty
- Everything else in 1.5
- ./blog.sh 1.6
- The time between deciding and the site saying so
- A post handed over as a file
- Written on a train
- Where a reader carries a post
- A badge that says what a post is about
- Everything else in 1.6
- ./blog.sh 1.7
- The post that waited for a terminal
