The stack I use to run this blog

In this post I describe how I run my blog

The site platform

This site is a static site built using Hugo, the popular static site generator built using the Go programming language.

I want my site to be as dumb as possible, which means less points of failure. A static site satisfies this requirement, and provides many nice advantages as well.

The reason I chose Hugo are:

  • generates plain HTML files, which make it faster than having to process every request server-side
  • a static site is more flexible in terms of deployment and hosting
  • it’s really fast, my local live reloading is instant and I don’t have to wait 10 seconds to recompile
  • it’s simple

I did this choice in 2017.

Would I still pick Hugo in 2022? Absolutely yes.

The theme

I originally used the Ghostwriter theme, tweaked to serve my needs. I changed it so much over time that it’s now unrecognizable, but it was a great starting place. I still recommend that for new blogs.

Where do I host the site

I used Netlify, now I use Cloudflare Pages because they provide unlimited bandwidth.

Don’t write on Medium or on other platforms not on your domain name. Find out why you should focus on your own platform.

The posts

I write the posts using Markdown, in Bear or VS Code. Markdown is a great format because it’s very portable - I could move to any other static site generator in a minute if I want, since using Markdown there’s no lock-in, but I’m very happy with Hugo.

What do I do to promote the posts

Basically nothing now (2022).

I send links to my email newsletter from time to time, that’s basically it.

I think you need to promote posts in the beginning to get some traction, perhaps via Reddit or Hacker News or another place that people are already visiting.

Now search engines (Google, mostly) pick up posts automatically without me doing nothing and most of my “traffic” comes from search. Find out my SEO tips.

My workflow for posting an article

I don’t write every day, but I try to publish every day.

Sometimes I’m working on a project and in a day I have 10 post ideas, things I had to search for on Google and dig the answer.

When this happens, I write posts and leave them in Bear.

Sometimes I go on Bear, find a list of 10 posts or so I already wrote, and I schedule them in the future, one per day.

I try to have a week or so of content ahead of time, so I don’t have anxiety about not knowing what I am going to publish or write about.

This is key: there is nothing that can get in the way of daily publishing.

Almost.

I push all my content to a private GitHub repository, which is synchronized to Cloudflare Pages / Netlify thanks to their Git integration.

Every time I push to GitHub, the site is updated.

I just run an IFTTT webhook every morning at 08:00 CET to automatically trigger a new deploy, which will publish the blog post of the day (I date every post at 7:00 AM, just to be sure).

I might be sleeping or walking the dog at 8 AM, yet the post is published.

It’s nice to have this piece of the infrastructure out of my mind. It’s simple but effective, I just know a post is going to be published.

Post images

I make sure all the post images are optimized using ImageOptim, to avoid useless bandwidth usage and a faster page speed.

The newsletter

I have a newsletter. Sometimes I send an email with the list of the posts I wrote, plus any new resource I create that might be interesting.

I use a self-hosted solution called Sendy and AWS SES.

Find out why you should create an email list.

Books

Over time I wrote some free ebooks, available on my site The Valley of Code. You can read them online or download them. To make the books in PDF/epub/mobi I use a tool called Honkit. I detail my process here: https://flaviocopes.com/how-to-create-ebooks-markdown/.

I wrote 12 so far (I had more but sunsetted a few outdated ones). I plan to make many more in the future.

That’s it!

I might update this post in the future, right now this is all I use and do to run this blog.

Download my free Programming Ebooks!