/slashes

My Writing and Publishing Workflow

Sunday, 12 January 2025

David McCullough:

Writing is thinking. To write well is to think clearly. That’s why it’s so hard.

When I rebooted this blog a couple of months ago it was with the aim to write more, everyday. For me this means the process needs to be as friction-free as possible. I also wanted the underlying services that power the blog to be as easy to manage as possible.

In the years that I have owned this domain name this blog has gone through many iterations, ranging from custom CMSs to statically-generated sites, each with different hoops to jump through to publish content.

After a many iterations of the underlying code I think I’ve finally reached a setup that I can live with for a while. There is no content management system or database backend - instead every post is stored as a plain-text file, formatted using Markdown. Publishing a new post is simply a case of adding a new file to the Github repository and pushing it up to my server.

I have iPad Pro and want to use it as much as possible outside of my work, which meant finding a workflow that works with the unique limitations of the device / OS. Yes there are Git and Terminal apps for iPadOS (I already have Working Copy and Termius installed), but I didn’t want publishing new content to involve launching two additional apps.

Micropub on iA Writer

I do all of my writing in iA Writer, and have done for years. I have it installed on all of my devices (2x MacBook Pros, iPhone and iPad) with my library synced over iCloud.

iA Writer has built-in capabilities for publishing a file to a number of different online services (WordPress, Ghost, Medium etc) as well as supporting the Micropub protocol.

This means that I am able to push content from iA Writer to my website with just a couple clicks. Whilst the inner workings of iA Writer’s Micropub implementation are a little opaque, I was able to set up the site to accept and process this content into a new post.

There are limitations to iA Writer’s implementation that I have had to get a little creative with - namely the fact that iA Writer will not publish any frontmatter (or metadata) in your Markdown document.

One thing it does handle well is the ability to upload any images in your content. Whilst I don’t intend for this blog to be particularly image-heavy, it is something I want to be able to use should I need it, without having to jump through extra hoops to upload images separately. It is for this reason that I decided to stick with iA Writer and embrace its limitations.

My Process

I have three main folders in my iA Writer library:

  • Drafts
  • Published
  • Slash Pages

When I get an idea for a new post, or come across a link to a site or article that I want to share, I will create a new file in the Drafts folder with a title and some quick notes about my intentions.

Since I have iA Writer installed on all devices and can do this from pretty much anywhere.

Everyday I will scroll through the Drafts folder and ‘tend’ to the posts by fleshing-out the content. I have my library configured to order files by most recently modified, so the posts I’m most active on are at the top of the list.

When I’m ready to publish I just need to use the iA Writer ‘publish’ mechanism to push the content to my site (I’ll write a separate post about how the site handles it from there).

I will then manually move the file to the Published folder for reference.

My site also has a number of pages (which I refer to as ‘slash pages’) for slightly more static content. The local content for these pages live in the Slash Pages directory. The process for authoring and publishing content is the same as my regular posts - however the server will treat this content differently and I do not move the slash page files to the Published folder.

I’ve found that this workflow has really worked for me as I can work on content at my own pace, in my preferred tools, and offline if necessary.

Changes I Would Like To Make

If I need to update a post (perhaps I spot a spelling mistake post-publishing) I need to do this within the code itself. This involves jumping into Working Copy, pulling the latest changes, editing the file, committing and pushing back to Github, and then finally SSH-ing onto my server to pull the changes (phew!). Not exactly the seamless editing experience I’ve been looking for.

For this reason I am planning on updating my Micropub implementation to support updating existing posts, in the same way that I can update slash pages.

Email a comment