For a while, I ran this blog using Ghost. Ghost is a great blogging platform, with a great theme and developer ecosystem. I cannot laud the Ghost team enough for how well-designed the UI is (IMHO). My only issue with Ghost is how badly it hogs resources (due to the fact that it’s written in a dynamic, interpreted language).

Node.js used a ton of memory on my itty-bitty VPS, and it’s sometimes it’s slow and apt to crash. So, because of strained resources and stubbornness, a few weeks ago I decided to write my own blogging platform.

With this post, I am announcing that I am running shim, a blogging platform built on the static site generator hugo. Right now, Shim is in a very deep alpha, and there are frequent breakages and refactors. I will continue developing shim and fleshing it out until it is somewhat polished. I wrote about my rationale for writing shim in a previous post.

Shim is a very dumb program at the moment. In fact, Shim is so bare-bare bones that I have a hard time convincing myself to use it. Despite this, I have to dog food my own programs if I want anyone else to even consider using it in the future.


Right now I’m using Hugo for Shim’s site generation, but in the future I may change to something that is fully-compatible with Ghost themes, or even roll my own rendering engine. As I’ve started to play with Hugo’s theme templates, I’ve that everything is horribly inconsistent in Hugo.

For example, I’m using a modified version of hugo-theme-casper to emulate the theme I used for my Ghost version for this blog, Prosper (a dark-themed fork of Casper). In this theme, the author uses site parameters like githubName and twitterName to allow authors to link to their Github, Twitter, LinkedIn, and other accounts. This isn’t bad, except for that the default theme for Shim uses GithubID and TwitterID for the same things! Oh, and there’s also another theme that uses a whole different slew of social.WHATEVER values such as social.github, social.twitter, and social.youtube for the same things!

The ecosystem for Hugo themes is incredibly inconsistent. There is dire need for some standards that allow interoperability for authors on Hugo. The majority of themes are broken with various setups, because they reference stylesheets, javascript, and other links with either {{ .BaseURL }}/path/to/style.css, (which implies the site’s base url has no trailing slash) or {{ .BaseURL}}path/to/style.css (meaning the base URL does have a trailing slash). This leads to major headache and many pains.

Another big issue with Hugo is that links to images don’t obey a site’s baseurl. For example, if you specify ![my image](/files/image), Hugo completely discards the site’s base url and simply uses the (incorrect) absolute path. While, this is probably related to blackfriday (the markdown processor hugo uses), it still is some basic, broken functionality.

There are many more ways that hugo needs to be changed, but that’s a blog post for another time.