Updating My Blog Tech Stack Again
I have been working on my blog for the last few days to move it from Jekyll to Ghost. It was a painful migration, but it was a worthy effort. It's still hosted on Azure and fronted by Cloudflare, but it's now much easier to create and publish content than ever before with Jekyll. It was a disheartening process to write a blog post with just a few lines, I ended up not writing anything for more than a year.
Enter Static Pages and Jekyll
A few years ago, I fell in love with the idea of having my blog as a static website. I would write in markdown, have the site itself and the content committed to git repository, and then I would deploy even the content changes via build and release pipelines. After all, I'm a developer in my core, right?
I chose Jekyll as my blog engine, which runs on Ruby. I had no idea what Ruby was, but it was fun to figure things out. The page was fast. Blazingly fast. With Cloudflare and Edge Caching in place, it was like driving a Formula 1 car in my browser.
Then I upgraded my blog engine to get built via a Docker container, which meant my local environment wouldn't contaminate the output. It made so much sense that I also converted my build pipelines to use the Docker container to build the website and deploy it.
But, it was painful to develop content! Markdown is amazing, but when it comes to images, embedded content like YouTube videos and GitHub Gists, files, it was painful. It took me 10 minutes to write a draft post, but took an hour to publish. I would have to write it on my local machine with Docker running, every hit to save button took 30 seconds to refresh the app. All the changes would get committed to Azure DevOps git repo, got built, got deployed to dev website for my approval. When I approved the changes, it would got deployed to production.
What a waste of my time it was. True, it was a good idea to treat my posts as artefacts and keep them under source control. Unfortunately the whole process may work for apps and make them pretty resilient and easy to manage, but it killed my flow with blogging.
I'll spend time later to explain how I got things working with Ghost on Azure, but it's now a breeze to write content. I'm currently writing this in iA Writer, which is hooked up with Ghost to publish it as a draft. Then it will open my draft in the browser, I'll edit the blog post settings, add a few image here and there, and voila! I would publish it right away.
Choose Wisely
At some point it becomes a trade-off: You want speed or control? Jekyll is amazing and gives you insane amount of flexibility and control, but to add an image that gets displayed properly, you have to step into HTML, CSS and Jekyll's Liquid syntax. Every new thing needs to be coded.
On the other hand, a CMS-like engine (which is Ghost in this instance) gives you on-the-fly capabilities and no-code functionality, but you can't automate that with usual things. The posts are kept in a database, not in your source repo.
I did give it a good try with Jekyll, but I'm happy where I am now.