How I Built WatchMeCode’s Subscription / Streaming Service

In my last post, I talked about the events leading up to and the events of launching WatchMeCode‘s new subscription service for JavaScript screencasts. In that post, I very briefly mentioned using WordPress and some plugins and add-ons to get the service up and running in a matter of hours – what would have taken me weeks or months to do if I were writing all of the code from scratch. Several people have asked about this setup, so I wanted to share more detail about what I’m using.

Hosting

I chose DigitalOcean as the hosting for the service. It’s cheap and seems to be very robust. I’m using it for both this site (DerickBailey.com) and WatchMeCode, both with separate server instances. John Sonmez says that he runs around 100,000 visits a month from the $10/mo server with DigitalOcean. I believe it. I also set up the $10/mo platform, using Ubuntu

NewImage

I’m served up about 5,000 views during my launch week for WatchMeCode, and here are my stats for bandwidth, disk and CPU usage for that week.

NewImage

As you can see launch day had a MASSIVE spike in CPU at 4.89% … this is definitely a rock-solid setup. I highly recommend DigitalOcean for a setup like this.

WordPress + StudioPress

The core of the site is built on top of WordPress. I’ve used WordPress in the past, but not extensively. To get me rolling, I used John Sonmez screencast on how to set up a WordPress blog with DigitalOcean, from his How To Market Yourself As A Developer course. I know there are plenty of blog posts and other things out there, but this was a resource I had and I was able to follow it step by step to get everything done. 

In addition to WordPress, I chose to buy a theme from StudioPress. After doing some research, I found the Genesis framework to be particularly appealing. It adds a lot of things that I want to a core WordPress install, and makes it easy to buy custom themes that can be further customized very easily. 

The site design and content are managed through pages and blog posts for the most part, with a few things being hard coded in to Text widgets – but not much. 

Restricting Content To Subscribers

To manage subscribers for the site, and to allow me to easily show and hide content for subscribers vs non-subscribers, I chose Restrict Content Pro. Through a simple set of short codes, combined with various settings on each individual post and page, I can restrict what content shows up in the RSS feed, show certain things to subscribers and other things to non-subscribers, and easily customize the way this works. 

NewImage

I bought the big $ package of RCP so that I could get the Stripe integration, and it was well worth the extra money. Paypal is nice, and a lot of my subscribers use Paypal. But I really do prefer Stripe. 

Hosting And Playing Video

The majority of my videos are hosted via Amazon S3. I bought the S3 Media Maestro plugin to handle these (you can see the “s3video” short code in the above screen shot). S3MM also gives me the file download links.

This is a great plugin because it lets me have secure (private) files in S3 storage, but still make it possible for subscribers to watch the videos. S3MM handles creating the pre-signed URLs for the media, and provides the MediaElement.js player as the video player for the files. 

My free videos are uploaded directly to YouTube and I use a YouTube plugin for WordPress to embed them in the pages.

Other Plugins

There are a handful of other plugins that help to make things simple, as well. Here is my complete list. You can get the idea of what each of these other plugins does for me, just through the description.

NewImage

Definitely Worth The Time And Money

In spite of my initial hesitations (months worth of hesitation… ), I found my experience in building this setup to be quite enjoyable. It took me less than one day of work to go from nothing to having a complete subscription service with my first screencasts secured and available. Of course it took a lot longer than that to finish filling in all my content, tweak the site design and add the videos… but that was the work I wanted to be doing. I didn’t want to spend weeks or months building a service that would handle these things. I wanted to get the service launched, have it done well, and be able to focus my time and attention on the content and videos. Having a WordPress setup with all of these plugins available made that possible.


Get The Best JavaScript Secrets!

Get the best kept secrets of JavaScript, and the most important career advice you'll ever hear!
Don't miss out: join my list to get all the inside info!

  • Antonio

    Thanks for sharing. Just an FYI. Not sure what your criteria was for YouTube embeds, but wanted to throw out that WordPress supports embedding of media content natively, without the need for a plugin. https://codex.wordpress.org/Embeds

    • http://mutedsolutions.com Derick Bailey

      nice! wasn’t aware of that. thanks, yo :)

      • Antonio

        No worries. Thank you, for all the awesome!

  • http://flavors.me/ftassi Francesco Tassi

    Great post, thank you for sharing this. In the past I’ve used woothemes+woocomerce for similar setup, but I’ll give studiopress a try.

  • Merwan Luck

    Is there any difficulty hosting videos using google drive?

    • http://mutedsolutions.com Derick Bailey

      You would be subject to Google’s terms of service, which may not allow a large amount of bandwidth use for video downloads. I wouldn’t do it, personally. The risk of having my Google Drive shut down for abusing traffic would be too much for me. nnnAlso – i don’t know how you would secure the files and allow them to be downloaded. Does Google Drive have an HTTP based API for doing that, like Amazon S3?

      • Merwan Luck

        Thanks for getting back Derick. I’ve been thinking about this, what exactly do you mean by securing the files? we are actually not going to provide a download option for clients at this time. We would like to do strictly streaming, however the archive is around 100 or 200 gigs of material. Also any reason you chose RCP over Paid membership Pro? Thanks for the help!

        • http://mutedsolutions.com Derick Bailey

          if you want to prevent people from downloading the files, you have to secure it. you have to make it unavailable via unauthenticated http requests.nnnIf you want to only do streaming, you need to have a streaming media server. Otherwise it’s too easy for people to download the file anyways, by grabbing the URL from the media player that you are using.nnnregarding RCP vs PmP: I based my decision on the reviews that I read, looking for a subscription service that was very capable, very flexible and easy to write blog posts in WordPress that have secure and non-secure content. I don’t remember looking at PmP though. Maybe it does everything RCP does. I don’t know.