Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

Lessons Learned from Building a Podcast Platform in 2 Weekends


I wanted to launch quickly but also have the site be technically sound from day one. Jekyll and DigitalOcean helped me do that.

Quick Jump: Bootstrapping the Site as Fast as Possible | Doing Everything Out in the Open | Figuring Out How Podcast Distribution Works | Getting Verified on Various Podcast Platforms

After deciding I was for sure going to start a podcast I began thinking about how to build the platform. My goal was to get it up as quick as possible but not rush it with poor technology choices. I also knew nothing about running a podcast or how episodes are distributed.

Bootstrapping the Site as Fast as Possible

After thinking about it for a while I came to the conclusion that a static site is a great fit. All I really need to do is list podcast episodes and interviews, have an easy way to post them, automatically create RSS feeds and serve the MP3s.

I already use Jekyll to build this site and Jekyll is a static site generator. In fact the first interview on the new Running in Production site is how I’m using Jekyll and nginx to serve 100,000+ monthly page views on a $5 / month DigitalOcean server.

I wrote that interview to test my set of interview questions and also give folks who want to get interviewed an example interview to look at. It’s also something I wanted to write about for a while so it felt like a perfect match to put it there.

Another feature of the site is to have a way for folks to become a guest on the podcast or get interviewed by email in a seamless way. For that, I just used Google Forms and linked to it on the site. This works really well. When people submit the form I get notified by email and that gets the ball rolling.

As for developing the site, the 4 days it took were roughly broken down like this:

  • 30 minutes to think of and buy the runninginproduction.com domain name
  • 1 hour to try and find a theme (which ultimately failed)
  • Half a day to wire up a custom Bootstrap 4 theme and think of the site’s structure
  • 2 full days just hacking away on the site’s features (mostly Jekyll related)
  • A few hours to come up with the copy / titles / meta descriptions for all of the pages
  • A few hours to research RSS feeds and iTunes compatibility
  • A few hours to come up with podcast / interview questions
  • A few hours to write the first interview and record a short preview episode
  • Half a day polishing things while tweaking the layout before putting it up

I didn’t have to spend much time on the deployment process because I use Ansible. All it took was adding a few lines of YAML to my existing set up and running a command. In less than a minute the site was live with Let’s Encrypt certificates all ready to go.

Doing Everything Out in the Open

One thing I wanted to do is be as transparent as possible from day 1. That means open sourcing the podcast platform and also blogging about the process on this site whenever an interesting topic comes up.

You can find the site on GitHub at https://github.com/nickjj/runninginproduction.com.

Feel free to use the source as an example on how to build a customized Jekyll site of your own, tell me how much my code sucks or contribute bug fixes / features for the site itself.

For example right now I’m using the default HTML5 audio player which gets the job done but it’s pretty limited when it comes to features. It doesn’t even let you control the playback speed. So a really nice improvement would be to write a custom audio player. I’ve opened an issue for that feature if you want to take a stab at that or provide feedback.

Although it’s worth mentioning my site isn’t the only place to listen to the episodes. It’s distributed to a bunch of popular podcast platforms that each have their own audio player and you can also download and listen to each episode locally and offline.

Figuring Out How Podcast Distribution Works

I had a few questions such as:

  • Will I need to sign up to some type of podcast distribution service?
  • Will I need to manually sync every podcast episode to every podcast platform?

Looking at Podcast Distribution Services

There’s a few of them where you upload your MP3s to them directly and then they host / serve that MP3 from their site. They also distribute your episodes to popular platforms like iTunes, Overcast, Spotify and many others.

That seems pretty nice but I didn’t like the idea that they would be the single source of truth for where my podcast episodes would be hosted, streamed and downloaded from.

The main one I looked at was https://libsyn.com/ but ultimately I decided against it.

It was like a form of vendor lock in and I never heard of any of these companies before. I’m sure they’re reliable but it makes me uneasy to trust something as important as that to a third party company.

Most of them were in the $20 / month range, which I guess is reasonable given the amount of “work” that needs to get done. I mean just hosting the files through their CDN has some cost to it on their end.

It’s All about the RSS Feeds for Episode Syncing

As it turns out, it’s not bad at all! Everything is driven by RSS feeds. As long as your site creates an RSS feed in a certain format that is compatible with iTunes then you’re golden. Pretty much every major podcast platform uses the same format as iTunes.

I will make a separate blog post on RSS feeds another time, but for now you can check out my feed as an example. In the end Jekyll creates the feed for me automatically.

Every time I add a new episode or interview, a new RSS feed gets generated. You can see how it all works since the code base is open source.

Huge shout out to changelog.com because I used their feed as an example.

For most of these platforms all you have to do is submit your RSS feed and then claim ownership of it by verifying a link they send to you by email. For most places that’s it. Once you do that, within 1-2 days you’ll be a part of their platform and indexed.

Once I learned that, I was really happy because it means I could for sure write off using a distribution service like LibSyn. As it turns out they create and host your RSS feed too. Now that I know your RSS feed is the lifeblood of your podcast, I very much enjoy having control over it.

Getting Verified on Various Podcast Platforms

As mentioned before, generally speaking you need to submit your RSS feed to all of the podcast platforms you plan to use, do some type of verification process and then wait.

Here’s a list of platforms I submit my podcast to:

Let me know in the comments if I missed any popular podcast platforms. This is a list I came up with after Googling around on the topic for a bit.

Some other places like Podcast Republic automatically picked up the feed from iTunes without having to explicitly submit anything.

I made a mistake here because I didn’t realize how long this was going to take.

For example it took about a week for Apple to verify my podcast on iTunes and a bunch of places directly pull from your iTunes page, so they depend on it existing on iTunes.

However it took closer to 2 weeks to get approved on Google Podcast, but that’s mainly because of a “maybe” bug with the Jekyll-Sitemap plugin I am using.

In order to get listed on Google Podcast (which is different than Google Play by the way) your RSS feed needs to be indexed by Google. That’s straight forward enough but the Jekyll-Sitemap plugin ignores XML files when generating a sitemap.xml file.

So while I launched my site for about a week, Google had no idea about my RSS feed since it wasn’t crawled. I was able to fix that by going to Google Webmaster Tools and manually submitting the RSS feed to the crawler.

Once I did that it took around 3-4 days for it to get listed.

A couple of weeks ago I opened an issue on GitHub about this but unfortunately the author hasn’t replied. I might end up just forking the project or look for ways to eliminate that plugin as a dependency.

I’m reluctant to make a hasty decision because the fix is really easy. It involves adding the XML extension to the list of file types it looks for but since that’s such an easy fix I have to wonder if there’s a reason why XML files aren’t included already.

In any case, it’s all working now but this verification process delayed announcing the site for 2 weeks. If I were to do it again I would have done this:

  1. Create the RSS file in the format iTunes expects
  2. Create a preview / coming soon podcast episode
  3. Put up a basic “coming soon” page for the main domain name
  4. Submit the RSS feed to all of the podcast platforms
  5. Start developing the podcast site itself

This way by the time #5 is done you’re already verified and now you can announce your podcast on your own terms without having to wait an extra amount of time.

What are some things you’ve learned from running a podcast? Let me know below.

Never Miss a Tip, Trick or Tutorial

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.