Book a call
All work
Redso Club (Web My Money)

A members-only challenge platform where the paywall is the funnel.

A 90-day bilingual members-only creator challenge, shipped end to end. Public landing, membership-gated signup, member portal with 12 weekly challenges, evidence upload and a leaderboard, plus an admin console and the whole CRM email journey behind it. Paying members are auto-enrolled into a dedicated group on the client's Circle course platform; non-members are routed into a purchase funnel that has converted 200+ recurring memberships. Past 1,000 users and still growing.

Next.js 16SupabaseMembership GatingCircleStripeffmpeg.wasm

The problem

A large Spanish-language creator membership wanted a 90-day challenge as a retention and engagement product: twelve weekly challenges, members submitting video and image evidence, a live leaderboard, running for a season, in two languages.

The constraint that shaped everything: access had to be decided by membership, and membership already lived in the CRM. Building a second source of truth for "is this person paid" would have guaranteed the two drifted apart, which is exactly the failure I'd spent months cleaning up on this same client's CRM. So the app could not own access.

Second constraint: creators upload video from phones. Raw phone video is enormous, and a members-only portal that times out on upload is a portal nobody uses.

What I did

Next.js 16 with Supabase, shipped end to end: landing page, signup, member portal, admin console, and the CRM and email journey around it.

  • CRM membership is the source of truth for access. Supabase is the portal store. The app never decides whether someone is a paying member; it asks. Supabase holds challenge submissions, progress, and leaderboard state, keyed to a person the CRM has already vouched for.
  • The signup gate fails closed. If the CRM is unreachable, signup denies rather than defaults to letting people in. An outage costs a few signups; the alternative silently gives away paid access and is invisible until someone audits.
  • Client-side video compression via ffmpeg.wasm. Reels get compressed in the browser before upload, so the heavy work happens on the device and the upload that crosses the network is small.
  • Twelve weekly challenges with evidence review and a leaderboard, plus an admin console for the team to review submissions and manage the season.
  • Wired the platform into the tools the client already ran on. Paying members are automatically enrolled into a dedicated group on the client's Circle course platform, so joining the challenge, gaining portal access and landing in the right community cohort are one event rather than three manual steps. Access, community and billing all derive from the same source of truth.
  • A custom conversion funnel for non-member signups. Rather than turning away everyone who wasn't already a paying member, non-members are handed to a dedicated purchase funnel with their details carried across. 200+ recurring memberships converted through it so far.
  • Bilingual throughout, with the Spanish content treated as a fixed token set the operations layer wraps around rather than rewrites.
  • Performance pass on the public landing: the hero image budget came down from 9.5 MB to 2.1 MB.

The detail that mattered: the rejection path is the funnel. When someone who isn't a member tries to get in, they don't hit an access-denied error. They get walked to checkout with the email they signed up with already prefilled, and paying loops them straight back into the portal, already half-registered. A login gate is a security feature, but a gate that only knows how to say no is leaving money on the floor. Every rejection is a person who wanted in. The code is a redirect and a prefilled link. The shift is deciding to route the person instead of protecting the product.

Outcome

  • Live and past 1,000 users, still climbing.
  • 200+ recurring memberships converted from people who arrived at a members-only gate without a membership.
  • Members land in the right Circle community group automatically, with no one moving them by hand.
  • Access state never diverges from billing state, because there is only one source of truth for it.
  • Members upload phone video without the upload being the reason they quit.