Skip to content

Paid memberships with Stripe integration #23

Description

@nwwatson

Summary

Prose has no monetization features. Creators cannot charge for content, offer membership tiers, or accept payments. This is the single biggest missing feature for creator adoption — it's the primary reason creators choose Ghost (0% platform cut) or Substack (10% cut) over alternatives.

Who Has This

  • Ghost — Native Stripe integration, membership tiers, 0% platform cut
  • Substack — Built-in paid subscriptions, 10% platform cut
  • Buttondown — Paid newsletters via Stripe
  • WordPress — Via plugins (WooCommerce, MemberPress)

Why This Matters

Monetization is the #1 feature creators evaluate when choosing a platform. Without it, Prose cannot serve professional creators, journalists, or anyone looking to build a sustainable publishing business. Ghost's 0% cut model is the gold standard — Prose should match it.

Recommended Implementation

Phase 1: Stripe Integration

  • Add stripe gem
  • Store Stripe API keys in SiteSetting (encrypted, like AI keys — key presence enables feature)
  • Stripe Connect onboarding flow for site owners
  • Webhook endpoint for Stripe events

Phase 2: Membership Tiers

  • Create MembershipTier model (name, price_cents, interval, stripe_price_id, description, benefits)
  • Create Membership model linking Subscriber to MembershipTier (status, stripe_subscription_id, current_period_end)
  • Checkout flow using Stripe Checkout Sessions
  • Customer portal for subscription management

Phase 3: Content Gating

  • Add visibility field to Post (public, members_only, paid_only, specific_tier)
  • Content teaser/paywall component for gated posts
  • Subscriber-aware content rendering in views
  • Email notifications respect content visibility

Phase 4: Admin Dashboard

  • Revenue dashboard (MRR, churn, growth)
  • Member management (view, cancel, comp memberships)
  • Tier management UI

Key Files to Modify

  • app/models/MembershipTier, Membership, extend Subscriber
  • app/controllers/MembershipsController, WebhooksController
  • app/views/posts/show.html.erb — Content gating UI
  • config/routes.rb — Membership and webhook routes
  • Gemfile — Add stripe gem

Key Decisions

  • Stripe Checkout vs. custom payment form (recommend Checkout for PCI compliance simplicity)
  • Platform cut model (recommend 0% like Ghost — differentiator for self-hosted)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNet-new functionalitytier-1-highTable stakes features competitors consider standard

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions