How to Make a Membership Website That Actually Locks the Door

A membership website needs three working parts: accounts so people can sign in, recurring payments so they are billed each month or year, and a server check that only shows paid content to members whose subscription is active. Hiding pages with a script in the browser is not enough, because anyone can read the page source.

Common membership models
ModelWhat members getGood fit
Content libraryArticles, videos or downloads behind a loginTeachers, coaches, recipe and craft sites
CommunityA forum, group chat or member directoryClubs, professional groups, alumni
CourseLessons released in order, often with progressSkills training, certification prep
Perks clubDiscounts, early access, members-only productsShops, local venues, makers
Service planA set amount of work or support each monthAgencies, consultants, repair services

Updated

Sketch up to three tiers with a monthly price and the number of members you expect. The planner shows monthly revenue and an estimate of card fees at Stripe's published US rate of 2.9% plus 30 cents per charge, as of October 2026. It is a planning aid, not a forecast, and everything stays in your browser.

Tier revenue planner

Tier 1: Basic, $9, 80

Tier 2: Plus, $19, 30

Tier 3: Pro, $49, 5

Monthly revenue: $1535.00

Estimated card fees: $79.02

After card fees: $1455.98

Fees use 2.9% + 30¢ per monthly charge. Taxes, refunds and platform costs are not included.

The access check, on the server

Whatever platform you use, the rule should look like this: look up the member's subscription status, which your site keeps in step through payment webhooks, and decide before any content is sent.

Express route that only serves members

getSubscriptionStatus stands in for your own database lookup. Statuses are the ones Stripe uses.

const ALLOWED = new Set(["active", "trialing"]);

app.get("/members/:page", async (req, res) => {
  if (!req.user) return res.redirect("/login?next=" + encodeURIComponent(req.originalUrl));
  const status = await getSubscriptionStatus(req.user.id);
  if (!ALLOWED.has(status)) return res.redirect("/join");
  res.render("members/" + req.params.page);
});

Gating patterns, from weakest to strongest

A shared password on a page keeps out casual visitors but cannot tell members apart, and everyone keeps the password after they stop paying. Individual accounts fix that: each person signs in, and the site checks that person's subscription before sending the page.

The strongest pattern checks access on every request on the server and stores files such as videos and downloads where only signed-in members can reach them, so a copied link alone does not work.

What actually needs a backend

Sign-in, storing who has paid, and deciding what to send all need a server or a hosted service. Payments need a provider such as Stripe, which keeps each subscription's status and tells your site when it changes through webhooks, messages sent to your server.

A static site alone can sell a one-off download link, but it cannot run a real members area. Be wary of any plugin that promises otherwise.

How it works

  1. Choose one model from the table and write down the single thing members pay for.
  2. Set your tiers in the planner and see whether the numbers cover your time and tools.
  3. Pick a platform that handles accounts and recurring billing, or a payment provider plus a site with real sign-in.
  4. Make the server, not the browser, decide who sees members-only pages, based on the subscription status.
  5. Give members a self-service way to update their card and cancel, then launch to a small group first.

Tips

Frequently asked questions

Can I make a membership site without coding?

Yes, if you choose a builder or platform with member accounts and subscription billing built in. The coding question only appears when you join a separate payment provider to a site that has no sign-in of its own.

Why is a JavaScript password or hidden div not enough?

Everything a browser receives can be read by the visitor through view source or developer tools. Members-only content must never be sent to someone who has not been checked on the server.

Which subscription statuses should keep access open?

In Stripe, active and trialing are the safe states to grant access. Stripe's docs say to revoke access when a subscription is unpaid, and canceled is a final state.

How do members cancel or change their card?

Stripe offers a hosted customer portal where customers can update payment methods, change or cancel subscriptions and download invoices. Most membership platforms have an equivalent account page.

Should I charge monthly or yearly?

Offer monthly to lower the first commitment and yearly at a small discount for people who already trust you. The planner shows how the per-charge fee adds up on monthly billing.

Related: Membership site builder, Stripe webhooks, Accept payments on your website, Password protect a website, Stripe vs PayPal.

Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.

More in Guides

We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.

Product

Who It's For

Features

Resources

Company

View Sitemap