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.
| Model | What members get | Good fit |
|---|---|---|
| Content library | Articles, videos or downloads behind a login | Teachers, coaches, recipe and craft sites |
| Community | A forum, group chat or member directory | Clubs, professional groups, alumni |
| Course | Lessons released in order, often with progress | Skills training, certification prep |
| Perks club | Discounts, early access, members-only products | Shops, local venues, makers |
| Service plan | A set amount of work or support each month | Agencies, 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 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.
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.
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);
});
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.
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.
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.
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.
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.
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.
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.
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.