As of the time of this post, I am hosting this blog using Ghost. My only issues are that Ghost takes up a lot of memory (52 MB) on my VPS and page loads are slightly sluggish. In the search of a better platform, I realized that there’s still room for improvement in the blogging atmosphere.

First, some background knowledge:

A Tale of Two Systems

As it stands, there are two existing ways that web blogs work. Pages can either be generated in advance (static generation) or on the fly (dynamic generation). This is a textbook example of Ahead-of-Time versus Just-in-Time generation.

The first of the two, is where a program (or processor) is run ahead of time to generate a set of HTML pages from templates (called views) and content files, which are formatted in Markdown, BBCode, ReStructuredText, or something similar. The advantages of static blog generation is that it’s as fast as reading a file, and scales to accommodate many concurrent users. The tradeoffs associated with static generation are that speed and security are favored over usability and extensibility.

On the other hand, there’s dynamic site generation. The most popular examples of this include Wordpress and Ghost. Both of these platforms are nearly trivial to get running as well as use. In fact, the use of a web-interface makes it trivial to write, edit, and revise content, as well as upload media. As you’d expect, the advantages of dynamic sites are the disadvantages of static sites, and vice versa.

There are people who swear allegiance to the usability of dynamic sites, and there are those that are fervently loyal to the speed of static sites. Both sides are correct in their views, but what if it were possible to combine the speed of static and the usability of dynamic blogging platforms?

A Bicameral System

A better solution is to have a web front-end which manages files and content for a static blogging engine. This allows for the ease-of-use of dynamic engines to be combined with the speed of static engines.

I am creating such a system.

My goal is to create a web front-end to Hugo either using bottle.py or Go (probably the latter). The software will provide a complete interface (better than rango) for writing, revising, and deleting posts. In addition, the web-app will allow the user to edit properties of the site such as the theme, blog title, and other settings which are available in Hugo’s config.toml.

Whenever a user makes a configuration change, the software will automatically rebuild the site using Hugo. The same goes for whenever the user creates content: appropriate commands will be used to automatically update and configure template and YAML/TOML front-matters for each posting on the blog (or site). Ideally, whenever content is added or modified, the engine will only rebuild whatever is necessary.

The goal here is to avoid replicating as much of Hugo in-house as possible, but to actually use Hugo’s built-in commands for the heavy lifting. The only part that’s difficult about this system is presenting content about Hugo posts in such a fashion that the user can reason about.

In fine, my aim is to create a web UI shim on top of Hugo to make it a full-fledged static CMS.

As much as I like this idea, it isn’t revolutionary: I’m just reusing other people’s code.