Static Comments For Jekyll

Let There Be Static Comments

About aberer.io's new comment system and the struggle to attain it

Phew, this was a lot harder than I imagined. But let me say a few words on the general setup of the website itself.

Jekyll

aberer.io uses the Ruby-based website generator Jekyll. Overall, I am indifferent about Ruby as a language (Python is fine, do we really need 100 more scripting languages?). Although, some experiences implementing the RogueNaRok web service using Ruby-on-Rails still haunt me (cue Ruby-RoR-Gem hell). But I am rather enthusiastic about static website generators.

I used wordpress for my previous blog. And while it is easy to install and to use, wordpress just does not fit the average coder’s workflow. As a Linux/Emacs user, you belong to this exotic group of users who prefer to edit raw text files only. Then, extension and configuration of wordpress is rather opaque. It is hard to establish automated pipelines.

That’s where static website generators come into play. You add some pages and blog posts (written in Markdown), fill in some variables and fields and run the generator. Voilà, there’s your static website (i.e., pure HTML, no dynamic content, thus perfect for caching and generally faster than wordpress sites which are loaded from a database typically). Jekyll is blog-aware, that is, it is particularly well-suited for your personal blog served with some portfolio sites around it.

Compared to wordpress, it is straight-forward to apply a version system to your Jekyll site. Regenerating a Jekyll site can be executed as a hook whenever you commit to your repository. Github even offers hosting for your Jekyll site managed via a git repository.

Naturally, I would prefer a website generator written in Python such as Hyde. However, Hyde appears to be vastly less popular than Jekyll and I do not know if there are many themes available for it at all. At this point, I would like to highlight the diversity of themes out there for Jekyll. Moritz Sauer has done an awesome job providing his theme Feeling Responsive which is the basis of this site.

Comments And Non-Staticity

One of the defining aspects of the Web 2.0 is that information flows both ways: you read an article and you instantly can provide feedback which may have even more impact than the original post. Yet, if you want to have comments, your site cannot be purely static and HTML-only. If you add a comment form, there needs to be something that handles the data.

And that is, where things get surprisingly complicated. Jekyll has a plugin system, so you would expect a selection of comment plugins. Well, it turns out, that virtually every Jekyll site uses external comment engines such as Disqus or Poole. These are convenient as they provide a lot of built-in functionality (e.g., users have to have a Disqus-profile) and are dynamically loaded (i.e., you only have to add 3 lines of Javascript code). However, they should be everything but the default commenting system, since this effectively means that the data wander off to some company and you have zero control over it (what happens, if the company ceases to exit?). Ironic new world.

You could hypothetically use discourse as your comment engine (which in its form is potentially superior to any forum) and if you host it yourself, you would be in full control over the data. For installation, discourse requires docker which effectively runs a virtual machine. Virtualization for a comment engine on an otherwise purely static HTML website? Perfectly reasonable!

Static Comments: What is Available

So we finally, come to the few alternatives that exist for static commenting. For one, there is the purely non-dynamic possibility of having users just send comments to token email addresses (e.g., comment+123eq2983n@domain.com). Actually, from the 80ies bearded unix-guy’s perspective, this just seems right: “Send me a message, if it goes through my spam filter, I’ll put it on my page.” And in fact this is the only purely static solution. The downside is that users are not really interacting with your site any more.

Then, finally, alas, finally, there is Jekyll::StaticComments by Matt Palmer (also announced here). Basically, it boils down to: users send you an email via a comment form. Thus, it requires the entire PHP machinery. In principle, you can pass the comments through your mail spam filter, automatically commit the comment to your git repository and auto-regenerate the website. So far, I like the outcome and the possibilities.

But let me open the <rant>-tag: Although the implementation is not too involved, it strikes me as extremely odd that there does not seem to exist more than one static comment plugin for Jekyll. Unexpectedly, the installation was quite tough and did not work without quite some source code inspection. Code from the original git repository is not maintained intensively, but works for Jekyll version 1. For each of the subsequent Jekyll major versions there exist forks that fix the code for this version (here and here). That brings back the old Gem hell memories. To top it off, the feeling responsive theme (using disqus by default) appears to delete the comments in its Ruby code. After fixing, I literally have the following 2 lines in the code:

payload["page"]["comments"] = comments       # fail
payload["page"]["comments2"] = comments      # Ok

So, here it is. Feel free to comment.

1 Comment

From: Dez
2017-02-25 10:55
Hi, This seems interesting enough for me to give it a spin :) in the meantime I have found Staticman tough for the same subject, so I'll spin up a free hosted version of it for hosting comments for multiple sites I develop/run. Thanks,
Dez

Post a Comment

All comments are held for moderation; Markdown formatting accepted;
By posting you agree to the following privacy policy.

This is a honeypot form. Do not use this form unless you want to get your IP address blacklisted. Use the second form below for comments.
Name: (required)
E-mail: (required, not published)
Website: (optional)
Name: (required)
E-mail: (required, not published)
Website: (optional)