Backblog: Lowering The Barrier To Blogging

Screenshot of Backblog usage description

Lowering The Barrier To Blogging

I can't seem to get posts out for all of the cool stuff I do. But I keep doing cool stuff, so it must be that the writing about it is what's too hard, right?

So, I wrote Backblog. ... in 2021.

...2021?

Yes, I wrote a script in 2021 for this. I think some of the articles created by it were even published, but I couldn't tell you which at this point. The premise was this:

  • Create a directory
  • Toss a bunch of image files into it
  • run the script
  • Replace "LOREM IPSUM" everywhere with actual content, rearrange the images, and rebuild the Pelican static site

This is article 24, and I still have 4 unpublished "backblogs" from that system:

Article Subject Images
11 basket_stacker 11 photos (Feb 21-24, 2022)
12 weird_tubes 8 photos/screenshots (Feb 19-20, 2022)
13 wgj238 (Weekly Game Jam) 0
14 commitexploder 0

if I ever get around to publishing those, I'll keep the article numbers, but revise the publishing date...

What Changed?

Since last year, I make voice notes. I'll talk to an audio recording app on my smartphone, sometimes for an hour at a time. With the help of local Whisper and LLMs, I turn those giant audio files, including all the background noise and interruptions of playtime in the backyard, into outlines for whatever's on my mind. I don't do one every day, but I get several in a week sometimes. There are 102 *.m4a.transcript-cleaned.txt files in my processing directory right now, from June 2025 to yesterday.

Month Transcripts
undated 2
June 13
July 18
August 12
September 5
October 22
November 23
December (through the 15th) 8

Well, I decided to use that growing pile of data to reflect on how I'm doing - as an independent developer, as a person.

Claude Opus 4.5 opines:

You built a ClientPortal specifically to "address burnout through systematic stakeholder management and project prioritization." It's marked critical_priority. It's been untouched for 3 months. You built a scheduling system (JohnTask). You built a work tracking concept (JohnWork). You built voice notes processing. You built Goblin Corps to parallelize development. And yet you describe today: "I feel like my brain is a mess. I don't feel like I've presented this in a very organized way at all." The tools exist. The systems are built or designed. The gap is in actually using them to constrain scope and force completion.

...

The 40+ projects aren't the problem. The problem is the gap between building systems to help yourself and actually submitting to them.

so I feel called out my by own automation...

To fix things I'm dusting off anything I can, pushing things out the door, and trying to compress "doing a thing" down to doing EXACTLY what the thing is.

This includes:

  • A secret thing that I'll tell you about later. DONE!
  • Updating the home page at ffwf.net. DONE!
  • Update this blog. DONE!

..."Update this blog" is not technically done until YOU can read this post. It's a bit of a lie as I'm writing the draft. So, to truly finish my to-do list for using my systems, I'll have to use backblog to completion, and republish kn4obl.net. So let's review my mental model for Doing The Thing:

Automate Everything That Isn't The Thing

For writing a blog post, "The Thing" is writing the words that will go on the post. Resizing images, tinkering with the static site build, uploading the files are not "The Thing", and the thought of all the "Not The Thing"s I have to do to do things stops me from doing anything.

Blog posts have this workflow now:

  1. inbox: creates a new empty folder by naming the article. I can throw my images in here.
  2. scaffolded: automatic via scripts/scaffold.py - resizes images, creates a markdown file that displays all of them with some outline headings.
  3. drafting: This is "The Thing". Write the actual text.
  4. review: scripts/validate.py - basically checks for LOREM IPSUM to make sure it was actually filled out; more of a tech demo for what backblog could eventually be capable of. But validate also makes sure that the frontmatter is correct for Pelican (though, the template includes a valid one, so it usually is).
  5. ready: I can review this document at the end of the workflow for unpublished posts, then publish them to Pelican, where the ordinary static site build process takes over.

How it works

Let's just look at the help output:

$ backblog -h
usage: backblog.py [-h] {new,status,advance,validate,set,publish,stages} ...

Manage blog article drafts through a configurable pipeline.

positional arguments:
  {new,status,advance,validate,set,publish,stages}
    new                 Create a new article
    status              Show article status
    advance             Advance article through stages
    validate            Validate article (dry run)
    set                 Manually set article stage
    publish             Publish article to Pelican
    stages              List configured stages

options:
  -h, --help            show this help message and exit

Examples:
  backblog new "My Cool Project"    Create a new article
  backblog status                   List all articles by stage
  backblog status 0024              Show details for article 0024
  backblog advance 0024             Advance article through stages
  backblog validate 0024            Dry-run validation without advancing
  backblog set 0024 drafting        Manually set stage
  backblog publish 0024             Publish to Pelican
  backblog stages                   List configured stages

When advancing, a transition from "new" to "scaffolded" executes a script, that can automatically advance the article to "drafting":

$ backblog advance 0024
Running scaffolded script...
Scaffolding: 0024_backblog-20-lowering-the-barrier-to-blogging
  Processing Screenshot from 2025-12-15 13-37-04.png -> image00.png
  Processed 1 images
  Generated article.md
Scaffolding complete.
Advanced to 'scaffolded'
Advanced to 'drafting'

While somewhat basic now, it's already totally workable, and has resulted in the blog post you see here.

Backstory

I actually have been looking into regaining "access" to this blog site for a few weeks. I had misplaced the git repo after reformatting my laptop, so I couldn't regenerate the static site. To compound the issue, my git remote was missing content that was live: rebuilding the site from the last commit would have lost like a third of the articles. I looked into re-writing the markdown from the output HTML, but this is quite messy. Ultimately I went through a quest into my backups to find the repository.

I found it! No data loss at all.

I put Claude on the job to fix up the theme after getting a new Pelican version. Fixing the pagination by overriding the new Pelican paginator in the theme briefly destroyed all styles: One Smashing Magazine example asset seems to have befallen similar issues, and the style that this site has is no longer visible on the example page. We rearranged the existing theme to fit new Pelican directory organization. Am I really using a Pelican theme from 2009..?! Well, I still like it. Thanks, Enrique!

I'm not sure if this is even detectable as a reader of the blog, even when inspecting the HTML, but in markdown I can now use {attach} as part of image URLs to keep separate blog posts in their own directories. Previous images are all in one directory with articleX_ as a prefix on the filenames.

Future Potential

Having arbitrary scripts execute as stages of a workflow gives me a lot of ideas. Maybe automatically searching my phone's photos for relevant images to include? I could start with a prompt for timeframe and what the images are, then let AI pick images. I can review by just deleting stuff that shouldn't be there before advancing to the next stage.

I hope that backblog will now quietly be an element in the background of all future posts here. I'll even leave the default backblog footer in:


This article was scaffolded with backblog.

links

social