I wanted to set up a blog since quite some time and now it’s finally here. In this post, I go through the various steps and decisions that were involved in the process and some insight into my reasoning. Basically, it’s about all the things you have to think about before you start building you blog.

Static or dynamic?

First, I had to decide whether I wanted a static or a dynamic website. Initially, I wanted to go for a dynamic website using Flask, following this excellent tutorial (that I might have taken some inspiration from for styling as well). In the end, however, I decided for a static site, because of its flexibility when it comes to hosting. To host my app, I would need a VPS or something like Heroku, while a static site can be hosted anywhere. Of course, as soon as you decide for a static website, the next question is how to create that site.

Static Site Generator

Of course you can build a static site by just writing all your pages as html, possibly some templates, and an asset folder containing your css and images and such. This gets tedious very quickly and I think it is a good idea to make use of a Static Site Generator right away. Basically, it does the same thing, only in a more or less automated manner. You usually write your actual pages and posts in markdown which is a lot faster and let’s you focus on the content. Additionally, these generator are used all over the place, so it certainly doesn’t hurt to add a few of them to your toolkit, if you do any kind of web development. There is a huge list of static site generator available (have a look here, for example) so I had come up with some criteria to base my decision on. There are:

  • Simplicity
  • Popularity
  • Customizability
  • Activity

Now, this is probably a pretty general list that most people would agree to, so I will give a bit more detail. Simplicity is pretty self-explanatory, it should be as easy as possible to create new posts, build and deploy. Popularity is important, because the more popular the SSG is, the bigger the community and the easier it is to get support. Customizabilty is important to me, because I don’t want to fiddle too much with the base framework to achieve some layout or styling changes. Finally, by activity I mean whether the SSG is actively maintained. In addition, since I am most familiar with Python, I first checked whether there is anything available written in Python. The best example I found is Pelican, however, in the end I decided against it, mostly because of popularity. Since I learned some Ruby ages ago and because Jekyll seems to be one of the most popular and well maintained, that’s what I end up choosing. Another very interesting project is Hugo and I might try that some time in the future. I mostly went for Jekyll, because the themes seem to more easily customisable. Finally, my decision was also influenced by the hosting options, which brings us to the next section.

Where to host?

There are so many hosting services available that it is difficult to get a good overview. Digitalocean.com, fastcomet.com, and linode.com are interesting services for VPS hosting that I might give a try in the future. All of these are paid though. Heroku.com provides a free VPS service (they call them dynos), however, with the free service you cannot use your own domain. Of course, there’s a myriad of hosters for static websites and, in fact, I already have an account with strato.com, a German hosting provider (which I will change soon though, because it’s pretty expensive and limited).

One of the big advantages of SSGs like Jekyll and Hugo is that you can host such sites for free on either GitHub or GitLab. Both allow you to host a site for your user/organisation as well as one for each project, completely for free. You can even set up your own domain name. Ultimately, I decided for GitLab, because, I did not necessarily want to have my website mixed with all my other repos on GitHub.

Conclusion

This concludes part one, in summary, I decided to use Jekyll as Static Site Generator for my blog and host it on GitLab pages.