Vibelog: Blogging Tools - Some Post Authoring Work

I asked Claude to do some work on Blogging Tools.

I wanted a way to schedule the publication of a post. Well, in a manner of speaking. The scheduled post retains it’s original publication date. It just won’t get published until a certain time in the future, nor would it be cross-posted to anything. It’s sort of my attempt at allowing me to write about a topic without anyone else finding out about it. Yes, I know this sort of defeats the purpose of a blog, and that any bit of writing published here is theoretically world readable anyway. But there’s a sense of immediacy about certain topics that, with a bit of temporal distance between when it’s published and when it actually appears, does make it easier to write about. And as posts age, their reason for being changes. They become less about the “joining the conversation” and more a statement of record sitting in the archives. And in my experience, unless the piece gains some traction, very few readers venture into the archives. Or at least, few human readers do; the AI agents are all over there at the moment (hi, bots 👋).

Anyway, this was a perfect enough small thing for Claude to work on unsupervised. I have enough confidence that Claude will find it’s way around the code base. I have a very basic CLAUDE.md file which it tends to honour. So it had no immediate issues making the changes. But when I pushed it to the server, my immediate thought was that Claude can’t do UI design. I asked for a menu, and this is what it gave me:

Auto-generated description: A blog post draft interface is shown with options to save, import drafts, publish at various time intervals, and a post mentioning My Dinner With Skinner related to The Simpsons.

That’s an unstyled disclosure HTML element acting as a menu, with the items being links within an unordered list. It turns out that it was a caching issue, as a day later, when I revisited the page, I got this:

Auto-generated description: A blog post management interface is shown with options to create new posts, import drafts, edit, publish, update, delete posts, and schedule publishing times.

Which is an improvement but not a whole lot better. So I went in and adjusted the CSS to make it look more like a link. It now looks like this:

Auto-generated description: A webpage displays a blog post editor with a draft import section and an explanation of changes made to the UI design and post scheduling functionality. Auto-generated description: A blog post discussing improvements made to the UI design for importing draft posts, explaining the use of hidden classes in HTML and a new publishing schedule feature.

Another request I had was to import a Micro.blog draft into Blogging Tools so I can use this new scheduling feature. This essentially calls Micro.blog’s MicroPub API to fetch the first 10 draft posts, and display them in a list. A pretty elemental feature, but I do have unfounded fears of missing something when I copy and paste things around.

Auto-generated description: A draft blog post discussing Tim Cook's announcement about upcoming price increases on Apple products, including a critical commentary on Apple's financial strategy.

Claude did a better job on the UI design here. I guess it had the existing post list to crib off of. Although each item does have this weird text area. It turns out Claude decided to surround each draft post in a form element which will submit it when the user clicks “Import”. The text area is essentially the draft post sent to the server. It’s a pretty old school way of doing it, but it works. They were simply showing up because Claude forgot to add the class="hidden" attribute, simply adding hidden as the attribute itself. This was another thing I fixed by hand.

So, a simple enough change. Now time for the more recent test. For you see, this post is a good example of the sort of posts I hope to use this scheduling tool for. I will publish it now, and hope to see it appear in four days time. That means it won’t actually be visible until the 29th. But it doesn’t take long for that time to fly by.