You've successfully subscribed to Mailing List Hackers
Great! Next, complete checkout for full access to Mailing List Hackers
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.

Creating a member-supported blog, using Ghost and Stripe

Kristian Freeman
Kristian Freeman

Business and technology writer Ben Thompson's blog Stratechery is an incredibly successful example of membership-based content at work: Ben is reported to be earning over $200k in revenue a year from the site.

In this guide, I'll show you how to set up a member-supported blog like Stratechery, allowing you to share both free and paid content with readers. To do this, we'll use the free and open-source publishing platform Ghost. It's what powers this site, and we're huge fans of how easy it is to work with.

How Stratechery works

At its core, Stratechery is a fairly simple WordPress site. Like any WordPress site, it features a number of posts, but the addition of "gated" posts, available only to members, is what makes it unique.

Stratechery's publishing schedule is simple, too -- a weekly article available to all readers, and three daily updates per week that are available to subscribers.

As for pricing, Stratechery offers two options for new members: a monthly plan at $12, and an annual plan at $120.

More recently, Ben has added an additional subscription to his offerings: access to the podcast Dithering, a collaboration with John Gruber of Daring Fireball fame.

Setting up your Ghost blog

To set up your Ghost blog to replicate Stratechery's format, we need to do a few things:

  1. Set up Ghost's "Members" feature
  2. Install a members-compatible theme
  3. Publish a members-only post

To set up the Members feature in Ghost, you'll need access to your Ghost blog's administrator panel. Once in your Ghost admin panel, navigate to the "Labs" section, and enable the "Members" feature.

The Members section of your Ghost admin panel

Before you can use Members on your site, you'll need to configure two things - a way to process payments, using Stripe, and a valid Mailgun configuration, which your Ghost blog will use to send emails to subscribers.

Setting up Stripe

To begin, select the "Sign in with Stripe" option in the newly populated "Members" section of the Labs page. If you haven't created a Stripe account before, you'll need to provide information about you, where you live, and your bank account information - once this is completed, you should be able to log in with your account and receive a secret key from Stripe to paste back into your Ghost instance.

Paste that key into the "Stripe private key" field, and hit save. When the page reloads, your blog will be configured to use Ghost, and you can now accept payments from subscribers! Next, we can set up our payment plans - by default, Ghost has support for both monthly and yearly plans, and like Stratechery, we can set prices in the $12/$120 range as a good starting point for our publication.

Setting up Mailgun

When members attempt to sign in to our blog, they'll receive a "magic sign-in link" via email. To support this, we'll need to set up Mailgun, an email sending service. For more instructions on how to do this, check out our guide "Setting up Mailgun for Ghost", and when you've completed it, return to this guide!

How to set up Mailgun for your Ghost blog
In this (hopefully short!) tutorial, I’ll show you how to set up Mailgun [https://www.mailgun.com/] on your Ghost blog. A number of Ghost features, including inviting authors, resetting passwords, and more recently, handling login for Ghost’s Members functionality -- as detailed in our “Setting up a…

Installing a compatible theme

By default, all Ghost blogs ship with the Casper theme, which doesn't provide the necessary pages and templates for a membership based site. Because of this, you'll need to install a different theme that does support memberships in Ghost.

Ghost does provide two themes for free that work well with memberships -- Pico, developed by Paul Jarvis and Jack Ellis, and acquired by Ghost in early 2020, and Lyra, which looks like a variation on Casper with membership features added.

In this tutorial, we'll use Pico -- it's super minimal and looks great, and also has really clear and functional membership templates. Visit the Pico GitHub page, and click the link under the "Instructions" section titled "Download this theme" to download a ZIP file of the theme.

In your Ghost admin panel, navigate to the "Design" section, and scroll down to "Installed themes". Click the "Upload theme button" and either drag the newly downloaded Pico ZIP file from your computer into the new modal, or select it manually on your computer. Once the theme has been uploaded, you can activate it, and if you navigate to your blog in browser, you'll see the theme is active!

Activating the Pico theme

We have one more step to do before the theme is completely installed. Unzip the Pico ZIP file locally on your computer -- on a Mac, you can do this by simply double-clicking the ZIP file, and navigate back to the "Labs" section of your Ghost admin panel. Find the "Upload routes.yaml" section, and click the "Select a file" prompt. Inside of the newly-unzipped Pico theme folder, select routes.yaml, which contains a number of route directives that will correctly set up your member routes on your blog.

Finding the "Upload routes YAML" button

Once the file has been uploaded to your Ghost blog, you should be able to navigate back to your blog and select the "Log in" or "Subscribe" buttons to check out your blog's new member workflow.

Creating your first members-only post and understanding the publish workflow

With that, your blog is now set up to handle paid subscriptions! Before we wrap up the guide, we can take a quick tour of the publishing workflow inside Ghost and understand how to publish content, both gated (members-only) and public.

To begin, navigate back to the Members section of your Ghost admin panel on the Labs page. Here, you can set a "Default access type" for content on your site. There are three options: "Public", which makes content available to all users, "Members only", which makes content available to subscribed users, and "Paid members only", which makes content available to users subscribed to a paid plan. For now, I'll stick with "Public", but depending on your content, you may want to adjust accordingly here.

With the correct default set, highlight the "Posts" section in the sidebar, and click the "+" icon to create a new post. Write a quick title and sentence to give it some content, and then click on the Gear icon on the top-right of the page. The Access dropdown in your post options allows you to configure the visibility of your content on a post-by-post basis, so if you'd like to publish a members-only "Daily Update", Stratechery-style, you can select "Paid members only" before publishing the post.

Setting the "Access" dropdown for a post

Do this now, and then click on the "Publish now" prompt next to the Gear icon. Here, you can select a scheduled publish date, or publish immediately, which we'll do for now. Once your post has published, you can visit your blog and click on the post to see that it has been closed off to casual readers of the site.

In order to test what this flow looks like, we can set up a test member that will allow us to interact with our site like future readers. Back in the Ghost admin panel, click the "Members" section - it should be blank if no members have signed up yet, and you can click the "Add yourself as a member to test" option to create your site's first member with your username. When the page refreshes, click your user to navigate to the page for your test member.

Select the "Complimentary premium plan" button at the bottom of the page, and then the "Save" button at the top right of the page, to give your new account a paid member subscription — this will allow you to test functionality as if you were a paid member of the site.

Up at the top right, select the "Impersonate" button. This will create a magic sign in link via a popup that you can use to log in as any member of your site, allowing you to view it from their perspective.

Impersonating a user

Copy the link and paste it into a new tab in your browser, and then navigate back to the gated post we created earlier. You should be able to see the full post content as a paid member of your site.

With that, you've created a Stratechery-style blog with support for memberships! If you enjoyed this guide, check out some of the other content on Mailing List Hackers, where we're building a community of people excited about mailing lists, building audiences online, and more! In particular, you may enjoy the next part of our larger series on building a full mailing list and paid subscriber publication in Ghost, where we'll use the Newsletter feature to send out updates to subscribers when new posts arrive.

Come join us in the Mailing List Hackers Discord, where we chat about this stuff and dive deep into the day-to-day of running and growing mailing lists, by becoming a member here!

Join our chat community
Our chat server is where Mailing List Hackers hang out and talk shop about what they’re working on, help each other with mailing lists, and share our wins as we grow our lists! Sign up as a member to get your invite.
GuidesGhost

Kristian Freeman

I'm a programmer and writer — I also founded Mailing List Hackers! I love to teach, write, and make stuff online.