Writing, or coding
I was setting up this blog at the beginning of 2021 and excitedly told a few developer friends about the plan. The discussion naturally revolved around blogging platforms and tech choices, until one of them asked:
Do you actually want to write content, or do you want to code a blog?
It's a great question. I wasn't sure about it, so I set up a rule for myself: write three complete posts before publishing the blog. It was a good decision, because it took almost a year to reach three blog posts. So, what took so long?
Turns out I wanted to code a bit more — at least in the beginning. I spent way too much time building an over-engineered React site, considering the goal was to write content. But so what? A hobby project should be inspiring and free of rules, not a KPI-driven piece of work. Unless that's your thing of course. For me, implementing the site from scratch felt like a necessary fuel for my writing inspiration. I didn't want to code everything just for the sake of it though. I'll try to explain.
For years, I've gone back and forth with different blogging platforms. Medium for a few testing-related posts, Blogger for macOS configuration posts, WordPress for a business website, Github repo with
.md files, and many open-source solutions like Jekyll, Ghost, Hugo, and Hexo.
Let's talk about the hosted platforms first.
What nobody wants
The goal of this blog is to share my thoughts and ideally help other people. To achieve that, there's no need to ask for users' locations, ask if they want to receive notifications via service workers, or anything like that. There's just the content in a minimal digital frame.
Talking about content — it should be accessible, searchable, open, and permanent. Not many hosted services share these ideologies. That's completely understandable because they have a business model to sustain.
What about open source solutions?
Self-hosted open source blogging tools are very polished and felt tempting, but I had a feeling that hacking existing solutions wasn't interesting enough.
If I start a blog, the platform shouldn't come in the way of expressing ideas.
In addition to the subjective arguments and feelings, I gathered a list of other requirements:
- Custom domain
- Permanent URLs for posts (10+ years)
- Technically flexible for possible crazy ideas in the future: code highlighting, SVG animations, interactive charts, and any custom components that help understanding concepts
I wanted to write, but also see what kind of page I can put together. So DIY it was. It felt like the most interesting and fun approach. Since the posts would have dynamic components and visualisations, I chose React and MDX. They were familiar tools.
If you've agreed with my decisions until this point, that's nice! However, reinventing the wheel is only about to start.
Lately, I've been obsessed with web performance. It's starting to get normal for a website to download 15 MB of uncompressed files to display simple information. I wanted to make this site as minimal in size as possible (sidenote: perf score suffers from tiny CI instances) while considering the vision of interactive and dynamic content.
Alright, I kind of get what you're saying. Will you be using Gatsby or React Static then?
After a lot of initial hesitation between do-it-yourself or
npm i gatsby, I started implementing a Gatsby-like static site generator. It sounded like a huge time sink but I wanted to know how minimal it can get. The benefits of a custom static site generator compared to Gatsby would be most probably microscopical, but why not? This project was supposed to be an inspiring and fun project after all!
While crossing the implementation finish line, I realised that the content isn't just the last 10% — it's the last 95%. The realisation killed my writing motivation for a while. There weren't any CSS transitions to tweak anymore, just the half-written blog posts waiting. But when days go by, more and more thoughts are bubbling up. Now I finally have the domain, tech stack, repository, and existing
.mdx files craving to get some juicy content.