For several years I have been using Wordpress as a platform for my blog. However, I never really needed anything dynamic. The amount of comments was very low and apart from that, I did nothing fancy which required dynamic content. Additionally, I was kind of tired to install Wordpress updates over and over again. So I moved this blog to a static site generator to completely get rid of Wordpress, comparable to what I did a few weeks ago with my photography portfolio.

For my portfolio I have used Jekyll as a well known and easily maintainable static site generator. I am quite happy with how things worked out for that site but there were a few things which led me to try out something different for the blog:

  • While everything works very easily with Jekyll, from a modelling perspective, some aspects feel a bit ad hoc and a bit more structure and a clearer data model could be interesting.
  • Jekyll is written in Ruby and I am actually much more fluent in Python, so I wanted to give a Python-based generator a go.
  • I also just wanted to try something different to get an impression of what other static site generators do and are capable of.

With that in mind I explored pythonic static site generators. First stop here was the quite popular Pelican. I didn’t notice any considerable technological improvement compared to Jekyll apart from being implemented in Python. Also, most existing templates looked worse then for Jekyll, so I dropped Pelican.

Having experience with writing technical documentation using the Sphinx documentation generator I had the idea that it might be nice to have a blogging platform based on Sphinx. Sphinx offers a lot of semantic additions to the usual reStructured Text repertoire, which makes it quite appealing on first sight. Indeed, there are blogging platforms based on Sphinx and I started to explore Tinkerer. The problem I had with Tinkerer is that things which are easily possible with e.g. Jekyll were actually a nightmare to realize using Tinkerer because of the much more rigid structure of the processing backend. One example is adding a teaser image per post. This is not directly supported by Tinkerer and I would have had to implement an extension just for this purpose. In Jekyll I can just use an item in the front matter and access it in the post list template. Therefore, I also dropped Tinkerer.

In the end, I decided to use Middleman for this site, a Ruby-based solution again. ;) Middleman provides a lot of flexibility while still being easily usable and maintainable. It is not only intended for blogging and e.g. adding post images was a matter of a few lines of template code. So this works quite well. Sometimes I had to dig a bit deeper into the documentation or the forum to understand some aspects, but generally, the documentation quality is good and the system is quite understandable. I have decided to use kramdown as the markdown engine because of the richer feature set like definition lists.

For theming I decided to start a new theme more or less from scratch instead of using an existing once to avoid a lot of the overhead available in the existing themes. The HTML code uses modern semantic HTML 5 elements like article, section or nav and CSS uses level 3 features. The layout scales to portable devices using CSS media queries. I tried to focus on the article contents and removed a lot of the previously existing sidebars etc.