← All projects
Web App2025

She Said What!? — Podcast Membership & Subscription Platformhttps://she-said-what.vercel.app

A subscription membership platform built around a podcast, letting fans pay to unlock exclusive episodes and content. Members register, subscribe through Stripe, and stream premium episodes via a custom audio player, while the hosts publish new episodes themselves through an admin panel — no developer required. Built on Next.js 15 and React 19 with Firebase (auth, Firestore, storage), Stripe subscriptions with webhook-driven access control, and Zod-validated forms.

Role
Full-Stack Developer
Timeline
2 moths · End-to-end build
Client
She Said What!? — Ali & Aimee (Australia)
↗ Live URL
0
code changes to publish an episode
100%
membership-gated premium content
1-click
episode publishing for hosts

The Problem

The hosts had a growing podcast and an engaged audience, but their content lived entirely on free public platforms with no way to monetise directly or offer fans something exclusive. They needed their own home: a place to publish premium, members-only episodes, charge a recurring subscription, and manage everything themselves — without calling a developer every time they wanted to release an episode.

The Approach

I built a membership platform that wraps the podcast in a subscription. Fans register, log in, and subscribe through Stripe Checkout; once paid, they unlock the premium episode library and stream it through a custom audio player. Access is controlled automatically — Stripe webhooks update each member's status on successful payment, cancellation, or failed renewal, so there's no manual gatekeeping. Crucially, the hosts run the content themselves: an admin panel lets them upload an episode's audio, which streams straight to cloud storage while its duration and metadata are captured and saved, publishing the episode instantly.

Architecture

The app is built on the Next.js App Router with clear route separation: public marketing pages, an auth group, member-only podcast routes, and an admin area. Firebase handles authentication, with signed JWT sessions (jose) verifying access on protected pages and API routes. Firestore stores users, subscription state, and episode metadata; Firebase Storage holds the audio files, uploaded via resumable uploads from the admin panel so large files transfer reliably. Stripe powers recurring billing — Checkout for purchase, and a signed webhook endpoint that handles checkout completion, subscription cancellation, and failed payments to grant or revoke access in real time. Form inputs are validated with Zod schemas, and a custom audio player handles playback of the gated content.

Client
Next.js 15 (App Router)
Web
React 19
UI
TypeScript
Type safety
Tailwind CSS
Styling
Auth & Sessions
Firebase Auth
Sign-in
jose (JWT)
Session security
Zod
Form validation
Data & Media
Firestore
Users, subs, episodes
Firebase Storage
Audio files (resumable upload)
Billing
Stripe Checkout
Subscriptions
Stripe Webhooks
Access control
checkout.completed → grant
subscription.deleted → revoke
invoice.payment_failed → revoke
Admin
Episode upload
Self-serve publishing
Custom audio player
Gated playback

Outcome

Delivered a fully self-sufficient membership platform: the hosts publish premium episodes on their own through the admin panel, and fans subscribe and stream exclusive content behind a Stripe paywall. Access management is fully automated end to end — payments, cancellations, and failed renewals all update member access without manual work. The podcast now has its own direct-to-audience revenue channel, independent of free public platforms.

Tech Stack

Next.jsReactTypeScriptFirebaseFirestoreStripeZodTailwind CSSSaaS

Have a project like this?

I build multi-tenant SaaS, real-time systems, and mobile apps end-to-end.

Get in touch →
She Said What!? — Podcast Membership & Subscription Platform — Case Study · Faridul · Faridul