There’s an xkcd (there always is) about automating menial tasks, proposing a breakpoint where you’re spending more time designing the automation than you save by automating. For certain types of brains, mine included, it’s a nice reminder to rein in the neurotic optimization tendencies before they start getting in the way.
It makes sense, and my rational mind accepts the logic, but mindless repetition eats away at my soul. It stresses me out—and the primate part of my brain, the part that tells me “microwaving scrambled eggs is technically fine”, wants to avoid stress. More often than not, that’s what ends up happening, and I end up avoiding the entire process altogether.
I’m not just losing 45 seconds of interface grind—I’m crossing a threshold that causes me to lose entire days, where I almost sit down and work but decide to do something else instead. That’s a lot of time.
I guess this is my entirely graceless segue into the “actual purpose” of this article, which is that I’ve abandoned Ghost after 2 years in favor of Jekyll. While working on a side project, an FFXIV guide site called novice.network, I gave it a spin out of curiosity—since spinning up a second Ghost instance turned out to be an unexpected pain in the ass.
(Please imagine a pause here as I get up to kill a bigass spider on my wall. This actually happened.)
Ghost met my needs for a long time, but almost all of the added features have ended up getting in my way, Woes about automatic image optimization, changes in theme structure, issues with file types and permissions on uploads, database migrations and Node versions trainwrecking upgrades…you know, the usual. It also made some assumptions about post content that turned out to be a little too rigid for me. Plus databases fucking scare me. Please, please give me a folder full of files. I don’t need a database, I’m too dumb for them, please do not let me have this.
The tipping point was the new WYSIWYG editor, which had some features outright removed, most notably footnote support.1 The old Markdown editor could still be used, but inside a “card” in the new editor—which would stall for 5+ seconds whenever you switched focus in or out of it, hijacked scrolling behavior, and was generally just a huge pain in the ass.
So, fuck it. Bye, Ghost. It was generally not unbearable knowing you.
I was able to port my Handlebars templates to Liquid pretty easily, then immediately restyled half of them because I’m an indecisive bitch. Small differences in Markdown flavors were easily resolved with 80% bad code and 20% Ctrl+F. The posts were the tricky part. Data in a Ghost site is “portable”, but the export it gave me was laced with HTML entities, even though all my posts are written in Markdown. jekyll_ghost_importer helped get everything into a new site, but some files had their encoding clobbered, and I had to write an unbelievably shitty script to convert inline footnotes2 to a format that more common Markdown parsers would understand.
As for Jekyll? So far, it’s turned out to be pretty lean and surprisingly capable. Ghost’s “partials” were only accessible on a theme level, whereas Jekyll encourages you to use its templating features in individual posts, which I think will help a lot with common patterns I use while writing. It also optionally supports Markdown formatting inside HTML tags, and let me fuckin’ tell you, I’m tired of switching to HTML styling just because I happen to be inside an
<aside>. Ruby is weird, but I’ll get it figured out before long.
The whole process took a few days. Ghost’s issues never cost me more than a few minutes per post, so I’d have to write several encyclopedias of posts to “justify” the time I spent on the migration. But I don’t have to deal with software I’ve grown to resent (a huge relief), and this post already feels like it’s coming easier than the drafts I had in progress. Plus, in the process of setting this up, I learned some stuff:
- What the fuck
try_fileseven does in nginx (to preserve my permalinks)
- A little bit of SCSS (to deal with spotty CSS variable support)
- A primer on Ruby syntax/structure (I can just write plugins?)
- Yet more flexbox nonsense (to align the new layout)
- HTML form elements (for a draft of a nav UI that I didn’t end up using)
- A refresher on C# file I/O (Purging unused media, footnote conversion)
- Some regex quirks (Parsing Ghost’s weird export, despite advice)
- git post-receive hooks (deploying without an SFTP client)
- What a gemfile is, I think? Okay, this one is still in progress
So I’m gaining time by reducing stress and remaining motivated. I’m gaining more time by learning things that can be used to solve future problems. And…I’m having fun?
I work in intense bursts because I don’t like leaving projects unfinished, so it’s often easy to forget this at the end of a sprint, but…I genuinely like doing this stuff. Working with all these interlocking parts creates an infinite number of satisfying brain-teasers, with a tangible payoff at the end of every one of them, even if I’m also screaming to anyone in earshot about how “version control is bullshit” or whatever.3
I’ve managed to convince myself that, in the long run, I’m saving time with this sort of thing. But even if I’m not…who cares? Isn’t the entire point of saving time to do more things that you enjoy? I think that’s how it works.
So, meet the new site, same as the old site. Nothing’s changed, really, except that I think I’m getting slowly better at this. I’ll leave you with the wisdom of Past Me:
Of course, I’ve once again memed myself into dealing with more technological bullshit. I love working with computers, but I generally hate fighting other peoples’ software, and Ghost’s own Wonderful Quirks will probably reveal themselves in due time. Plus I’m going to end up obsessing about tags for the next 500,000 years. But for now, I’m pretty content—though I do have to get to work repointing the rest of the site once I’m done with this.
You know I can’t help myself when it comes to these things. It lets me write in the same way I organize my thoughts, which is “not at all” ⤴
body text^[footnote text]as a valid footnote format. Almost all Markdown parsers prefer the footnote reference on its own line instead. ⤴
My housemates are saints and pretend to care. ⤴