Your Linux Data Center Experts

We've been working to completely revamp the tummy.com website and as part of that have reviewed a number of different options.

Trying the Big Boys

The old site was built using a tool-chain I built a decade ago, and there are much more modern choices that take care of a lot of things I had to build in that system. So I started looking at fairly off-the-shelf systems including:

  • Wordpress is really a best of breed blog system, I've been using it for my personal blog and it's really fantastic. But I spent some time playing with it for a site publisher and it really felt more oriented towards a blog than a site.
  • Mezzanine is a Python-based content management system, so it would be something I could dig into the code if need be. But I really wanted something I wouldn't have to dig into. The reason I kept looking here was that it has a separate front page and content pages, and they use different markup, and I wanted several pages the same, like the front page, and didn't want to have to manage them in different markup. Plus, it seemed like a very big, complex system.

Static Site Generators

After looking at these I started thinking I might be able to get away with something extremely simple. For some of our dynamic content, we can do Javascript rather than server-side, and everything else is basically static, except for blog feeds and comments.

Our site has a lot of blog entries (~450) but also has articles (30), software pages (13), presentations (40), and our company information (30 pages). The company pages are the primary reason for this site, so a solution that put the blogs in #1 spot was not an option.

So I started looking at static site generators, including some like Jekyll, but mostly I looked seriously at these:

Nikola

Nikola generates a wonderful looking blog, but it is really targeted at making a blog first. The main page always seems to be the blogroll, where I wanted my site top page and many other pages, and a blog as well. I did install and run some trials with it, and loved the look of the blogs.

Nikola had a lot of configuration and tools available for it, which was good. But it really felt targeted towards a blog site or a blog site with some stories.

It uses the Mako template engine which I've used in the past and been happy with. I've always been able to do what I needed to do with Mako where Jinja2 I sometimes run into issues with if I wan to include a template that includes another template, for example.

In the end, I decided Nikola probably wasn't for me. For a straight up blog site, it is probably really good. I could always fall back to using Nokola, or even Wordpress, for just the blogs component of the site.

Pelican

Pelican has quite a lot of activity on github. More than Nikola by quite a bit. It also has a lot of features, but again is targeted towards primarily a blog. While you can supply your own template pages to get installed (and you have to list every such page you want to install), if you install a top-level index.html, it is going to overwrite the main blog page and you lose it.

Compared to Mynt, which publishes all the files you give it in your documents directory, the listing of the pages (they call them templates) in the config file seemed obtuse. I had always figured I'd just write a snipped of Python code, since the config file is Python code, that would dynamically generate it.

I was basically able to get the site working entirely in Pelican, except that the blog pages would get overwritten.

Another thing I ran into is that in the templates, Pelican exposes fairly little functionality to you. The templates seem to just be meant for theme creators and the blogs, and it doesn't expose things like date formatters which Mynt did.

I probably could have fixed these issues, but in the end I made a decision that of the three Mynt just fit better for publishing a site rather than a blog.

Mynt

Mynt has very little github activity, less than either of the above. I almost gave up on it right at the beginning because the documentation for getting started is pretty thin. It shows you how to install, create posts, and build the results. However, as I started digging deeper there wasn't much deeper you could go.

While I can't find it now, I ran into this part of the documentation that said something to the effect of “You shouldn't need documentation, if you do I haven't done my job.” I almost wrote the whole thing off, but I decided “Ok, let's put this claim to the test…” I looked in the directory that was created as part of the quickstart guide, and it all seemed pretty obvoius.

So I started modifying it and adding pages. The top level index.html is a Jinja2 template, which accesses a layout defined in the “templates” directory (all “special” directories start with a leading underscore). Posts are just a data structure handed to the template, for example.

I will say the layout feels a little more rudimentary than Pelican or Nikola. The abilities are more limited, for example it doesn't understand blogs with multiple authors (we are just having the author be a tag for the posts). It also can't generate feeds for arbitrary tags without this patch to apply feeds for every tag.

I implemented our customer testimonials using Javascript, and the comments we've outsourced to Disqus, which is what all of the static site generators seem to use. Though Mynt doesn't directly support Disqus like the others do, it was trivial to add to the templates.

Customizing and theming were all done manually, which in some ways is better than Pelican where the theme is not something you can really touch. For my custom theme, this worked out great. If you want to have someone else in charge of theming, or use only an existing theme, one of the others might be better. Though Pelican and Nikola didn't have that many themes.

While there are some places where it feels limited, in general if you are building a site, rather than just a blog, I think Mynt is the best choice of the three.

comments powered by Disqus

Join our other satisfied clients. Contact us today.