How This Website Is Built

Motivation

Two weeks ago, I suddenly had two urges. One was to write a blog.

I didn’t know where to host my blog. The complexity of WordPress scares me. Medium promotes paid content. Tumblr, Blogger, and Reddit were similarly out of the question. The other urge was to build another side project. So naturally, I decided to create my blog to share my thoughts with the Internet.

The Goal

I wanted simplicity. After all, why would I want to make another website that is hard to navigate, read, and generally over-engineered? I want a website to write my thought down. I do not want a website to sell my readers things, gather their data, or achieve any other morally ambiguous business.

So I came up with this setup.

My website setup

Disclaimer, this blog is not sponsored by any of these services. I’m not related to any of them. With that out of the way, let’s dive a bit deeper.

Hugo

A place to discuss thoughts shouldn’t be slow. A website accessing three micro-services, which in turn get data from a Redis cache and a PostgreSQL database, to get a simple blog post, is anything but fast. So there shouldn’t be any of that complex setup here.

There’s also the fact that I’m most likely the only writer for this blog. So a simple setup that allows me to write a blog is better than a headless CMS with an “easy” and “intuitive” what-you-see-is-what-you-get editor.

Finally, I’m not a front-end developer by trade, so anything easy to pick up and get a site running is good.

The conclusion is: I needed a static site generator. Hugo was the first one I found that worked for me. And it’s fast!

Cloudflare

On the topic of speed, a CDN caches pages at many different locations in the world. That makes them fast. Cloudflare is a popular CDN. So if I host my already fast Hugo website on Cloudflare, it’ll be fast for everyone everywhere. Also, it has built-in DDOS protection. That’s one less thing for me to worry about.

CloudFlare Pages, where this website is currently, is free and can serve static websites. It can handle 100 000 requests per day. Only in my wildest dream will I ever have more than that.

I also happened to be using CloudFlare for another side project. It just makes sense not to waste my energy on another PaaS.

Umami

Let’s preface this section with this: I strongly dislike intrusive telemetry. Even though I love GDPR and what it stands for, the cookie popups are such a painful side effect.

But I want to see how many people read my blog and what they want to read.

So I picked Umami which is a cookie-less GPDR-compliant self-hosted solution. This website sends Your anonymous, PII-free data to https://umami.kimikima.com. I host this Umami instance on my home server. The location is in the EU. For added visibility, here’s a picture.

My server

My workflow

Now that everything is in place, if I finish writing a blog, all I have to do is to:

  1. Put the writing in the appropriate Hugo folder and commit it to git
  2. Run Hugo to generate the static site
  3. Upload the static site to CloudFlare pages
  4. Repeat step 1.

I don’t know how to write a conclusion yet, so here’s the U.S. Navy design principle: “Keep it simple, stupid”.