A while ago a reader asked about my publishing workflows, and I promised I’d write a post about my tools and process. I figure now is as good a time as any, and if it helps others, all the better. I’ll start with how I write, build and host my blog, then I’ll follow up with books and other stuff I create when time and interest permits.
I draft all my posts in Ulysses, a markdown writing-focussed app for macOS and iOS. I settled on this app after a two-year-long process of trialling and reviewing apps, many of which you can find on my blog under the reviews category. My reasons are simple — I enjoy writing in Ulysses, and for me, it has the right balance of features and focus. While most markdown editors feel like they are pitched at developers, Ulysses is built for writers.
The two most crucial features Ulysses provides my publishing process is markdown support and the ability to package content in the textbundle format — I’ll return to these concepts shortly.
After I export the post, I edit the text using Grammarly. I started using Grammarly to save me time. In contrast, before I had to let an article sit for days or weeks (or unsuccessfully badger my wife to proofread), Grammarly significantly reduces my turnaround. It’s not perfect, but I find it sufficient for blogging.
If you’ve thought about using Grammarly, it’s certainly worth a try. Click this link and sign up, and I will get a tiny commission at no cost to you.
Once I’ve edited the post, I’ll drag the file back into Ulysses, and tag it as Published. I like having everything available to me in Ulysses because of how well it syncs across my devices.
Once I export the post to Textbundle format, I copy it to my website’s Git repository. Git is decentralised version control software, most commonly used to manage complex software development projects. It’s ideal for managing text files, like those that make up my blog.
The master repository lives in my private GitHub repo, the world’s largest source control and collaboration service. Github is owned by Microsoft and hosts some of the most important software projects in the world, so I’m confident my content is safe and sound.
As soon as I commit a post to the master branch, it kicks off the publication process automatically with no further actions on my part.
Pelican, a static-site generator
As a brief aside, I develop my blog using Pelican, an open-source static-site generator created with Python. Python is my favourite programming language, and I prefer the speed and security a static site provides. My website cannot be hacked by exploiting SQL or PHP vulnerabilities as Wordpress can, because those things do not exist on my website.
Pelican works with Markdown, a light-weight plain text markup format that’s become the defacto standard for web writers. Plain text is portable, resilient and completely open — beautiful.
My Pelican site config, all content, several plugins and my theme are all contained within the same Git repository. Some may argue against this practice, but I find it convenient for my needs.
An essential plugin I found, then forked and customised provides Pelican with the ability to read and compile the Textbundle files I export from Ulysses. Textbundle is an open-source container format for exchanging markdown files along with any dependent content, such as images. This format is a gamechanger for me, allowing me to move articles from Ulysses to my publishing environment without messing around with relative links for images and so on.
Netlify and continuous deployment
I host my website with Netlify, a genuinely brilliant service, providing serverless, continuous deployment. In plain English, that means reliable and hassle-free hosting. Through a bit of automation magic, the second I push my content to GitHub, Netlify pulls in the changes and builds my website against my Pelican configuration file. Netlify provides me with a LetsEncrypt HTTPs certificate, and a content delivery network that speeds up access time for my readers all over the world.
Oh, and it’s free to use! Yes, free, even for monetised sites like mine.
That’s a very quick but complete overview of my blog publishing process. It’s taken me six years of trial and error to build something that truly works for me. I’m intimately familiar with every line of code and every workflow.
I fully accept that I’m a nerd. For most people looking to start a blog, I recommend using Wordpress — either self-hosted or using one of the many turn-key web hosts out there. While I dislike Wordpress, for non-technical folk it’s probably the best option out there.
If you have any specific questions, shout out in the comments, and I’ll do my best to answer them.
Cover Photo by Patrick Fore on Unsplash