Tutorials

Build a Stripe-Billed SaaS in a Weekend with GenMB

A complete walkthrough — generate the app, wire Stripe Checkout to plan gating, deploy to a custom domain, and add scheduled reporting.

GT

GenMB Team

Editorial

8 min read

The plan

By the end of this weekend you'll have a working SaaS with:

  • Email + Google auth
  • Two plans (Free, Pro) with Stripe Checkout
  • Plan-gated features in the UI
  • Cancellation handled via Stripe webhooks
  • A custom domain on Pro
  • A daily MRR report emailed to you

We'll move fast. The whole thing fits in 8 hours of evenings.

Saturday morning — generate the app

Open /chat/new and write the spec. Be specific about the data model:

"A SaaS for tracking client invoices. Users sign in with Google. They can create clients, invoices with line items, and a status (sent/paid/overdue). Pro plan unlocks: PDF export, email reminders, recurring invoices."

GenMB generates a multi-file React + TypeScript project, provisions a Postgres schema (clients, invoices, line_items), and wires Google auth. Click around the preview, fix anything you don't like via chat refinement.

Saturday afternoon — wire Stripe

In integrations, enable the Stripe plugin. Paste your test secret key. GenMB injects:

  • A checkout session endpoint
  • A webhook handler at /api/stripe/webhook
  • A "Subscribe to Pro" button component
  • Plan-state stored on the user row

The plugin handles webhook events: checkout.session.completed flips the user's plan to "pro"; customer.subscription.deleted flips it back to "free."

For plan gating, use the useSubscription hook GenMB injects:

```tsx

const { isPro } = useSubscription();

if (!isPro) return <UpgradePrompt feature="PDF export" />;

`

Test locally with the Stripe CLI: stripe listen --forward-to localhost:3000/api/stripe/webhook.

Saturday evening — deploy

Click "Publish" → pick a subdomain. Live URL in 30 seconds.

For a custom domain, upgrade to Pro inside GenMB, point your CNAME at the deployment, and add the domain in app settings. SSL provisions automatically.

Sunday morning — recurring revenue reporting

You shipped the app, but you're flying blind on usage. Build a workflow:

  1. Schedule trigger → daily at 8am
  2. Database query → count active subscribers grouped by plan
  3. AI generate → "Summarize: \{rows}\. Highlight changes from last week."
  4. Send email → you@yourcompany.com

You now have a daily MRR + churn brief landing in your inbox without ever opening Stripe.

Sunday afternoon — automate cancellation winbacks

Build another workflow triggered by a webhook:

  1. Webhook trigger → exposes a public URL
  2. Condition → if event.type === 'customer.subscription.deleted'
  3. Delay → 7 days
  4. Send email → "We miss you" with a 30%-off promo

Configure Stripe to POST to your workflow webhook. Now every cancellation gets an automatic winback nudge — without writing a separate billing service.

What you'd build manually

  • ~3 days: scaffolding (auth, ORM, UI, deploy pipeline)
  • ~1 day: Stripe checkout + webhooks
  • ~0.5 day: plan gating
  • ~1 day: reporting dashboard
  • ~0.5 day: cancellation winback service

Total: about a week. With GenMB it's a weekend, and you still own the source — export the ZIP whenever you want.

Try it

Start from the Stripe SaaS template for a working scaffold.

Share this post
GT

GenMB Team

Editorial

Award-winning AI author and speaker. Building the future of app development at GenMB.

Follow on LinkedIn

Ready to start building?

Turn your ideas into reality with GenMB's AI-powered app builder.