Arrested DevOps is live with our new Hugo-based site!

For background, Arrested DevOps is a podcast focusing on DevOps related topics. We’ve been around for almost 2 years, and are well-known in our space with an excess of 5,000 listens to every episode.

We began life as a Jekyll site (for about two months) before I moved us over to WordPress in the beginning of 2014. Over time, the overhead of running WP was too much, and it was definitely causing challenges with getting show notes imported (especially from other co-hosts who didn’t want to have to learn/futz around with WordPress). One of my co-hosts who joined us in Oct 2014 started asking almost immediately for a change where she could write show notes in Markdown and then submit them via git commits.

About two months ago (I think, maybe less) I decided it was time to move us to a static site generator hosted on Github pages (this saves us the equivalent of $75/month or so in hosting fees which are directly paid by one of our sponsors, so moving off of this means I can charge that sponsor what our other sponsors pay, which is a lot more).

The first commit to our new site repo was on August 29, and we officially went live with it today. I learned a lot about Hugo (and a little about Go) through the process, and we definitely have a long way to go before we have all the fancy features that I want, but we are live with our MVP.

Some notable Hugo features we are using:

  • All guests are stored in data YAML files (we are a panel-based show, so there are different guests for each episode, but there are sometimes repeating guests, so entering the guest info into each episode is not very DRY)
  • Incorporation of nozzle’s hugo-snippets repo for OpenGraph and twitter sharing fancy.
  • Storing all sponsor data as data files as well as in front-matter (sponsors vary from show to show)
  • Storing all hosts bio and contact info in YAML files to dynamically build the “about us” page as well as host pages (note - this probably could be offloaded to the config.toml since we store “author” info there with social, and this might be more DRY)
  • Creating a custom RSS feed to include all the podcast/itunes goodness needed (see this thread for more details, with help from @albush)
  • Heavy use of a new post type called “redirect” to allow us to redirect to our sponsor landing pages but keep our analytics on these clicks.

Any feedback is highly encouraged! Replies here are fine, or just hit me with an issue at

Thanks to the Hugo community, and especially @bep for helping me learn how this stuff works!


A few update since going live:

  1. Using hugo as our tool has been a delight for our contributors (my co-hosts) so that has been a great success

  2. Our audience has been overwhelmingly positive about the redesign and speed of the site

Major issue:

As I mentioned in another thread, the feed size/item limitation that Hugo imposes actually really breaks podcasts hard. Limiting the feed to 16 items doesn’t jive well with iTunes as a listing tool, which is where podcasts must exist. I fully agree that the default behavior should be to conform to the Google standards, but podcasting is an edge case, and limiting us to 16 items means that only 1/3 of our catalog is now available in iTunes (or any other podcast listening app). This is a real problem and I’m going to have to figure out a solution (I may have to fork hugo for our needs to solve this one, which will likely cause problems with our CI use of wercker, since it won’t use my forked hugo for generating the content).

I might see if I can fork hugo and add an option for extending the feed size (that would be “opt-in” in the config perhaps…we’ll see how good my golang-fu is.

Open up an issue on GitHub – then try to resolve it, any problems and there are plenty of people to help you (not many, but plenty :-))

No need to fork. It should just be an option in Hugo. Should be a pretty
minor change.

I blame the early morning posting with my “forking” comment, because I realized shortly after the same thing that @bep mentioned, which was to just make a PR! :slight_smile:

Having an option in the Site Info for “RSS Limit” would be handy, but you can already create your own RSS template to override the default. Check out the docs that show the default rss.xml template (or look in github if you don’t trust the docs).

You just need to change this:

{{ range first 15 .Data.Pages }}

to something like one of the following:

{{ range first 49 .Data.Pages }}
{{ range .Data.Pages }}

Another Option:

You should be able to set a Site Param in your main site config:

RSSLimit = 50

And then update the template to something like this:

{{ range first (sub .Site.Params.RSSLimit 1) .Data.Pages }}

I haven’t tried any of this, but It Should Work™.

Yep. Already tried that. Hugo actually overrides it.

Additional reference:

1 Like

I guess I should have looked at your code first. Try this:

{{ range first 50 (where .Site.Pages "Type" "episode") }}

A couple things to note:

  1. If you range over the first N Pages and afterwards check if eq .Type "episode", you’ll never get what you’re wanting since the range will include random non-episode content. Use the where clause before the first clause.

  2. When using .Data.Pages, I only get 50 results (of any type). I changed to .Site.Pages in order to get the full results. With the above code, I’m seeing 45 episodes in the RSS feed now.

Hope this helps.

Bingo-bango, that did it. Thanks, mate!