• Blog
  • Documentation
  • Courses
  • Changelog
  • AI Starters
  • UI Kit
  • FAQ
  • Supamode
    New
  • Pricing

Launch your next SaaS in record time with Makerkit, a React SaaS Boilerplate for Next.js and Supabase.

Makerkit is a product of Makerkit Pte Ltd (registered in the Republic of Singapore)Company Registration No: 202407149CFor support or inquiries, please contact us

About
  • FAQ
  • Contact
  • Verify your Discord
  • Consultation
  • Open Source
  • Become an Affiliate
Product
  • Documentation
  • Blog
  • Changelog
  • UI Blocks
  • Figma UI Kit
  • AI SaaS Starters
License
  • Activate License
  • Upgrade License
  • Invite Member
Legal
  • Terms of License
  • Global Configuration
    • Environment Variables
    • Feature Flags
  • Server Actions
    • Sending CSRF Token to Actions
    • Server Actions Error Handling
  • The Makerkit SDK
    • User SDK
    • Organization SDK
    • Organization Subscription SDK
    • Data Loader SDK
  • Architecture and Folder Structure
    • Structure your Application
    • Data Model
    • Adding API Routes
    • Change Authentication strategy
    • Fetching the signed in User
    • Reading Records from Postgres
    • Creating a Record
    • Seeding Local Data
    • Introduction
    • Configuring Plans
    • Project Configuration
    • Updating the Navigation menu
    • Adding a new translation string
    • Supabase is not starting
    • Calling API Routes from the client
    • Adding Pages
    • Updating the Sidebar menu
    • Setup oAuth
    • Fetching the selected Organization
    • Resetting the local DB
    • Running the Stripe Webhook locally
    • Branding
    • Setting a Default Language
    • Supabase is not stopping
    • Dark Theme
    • Theming
    • API Routes vs Server Actions
    • Generating Database Types
    • Updating the Logo
    • Adding a new language in the Next.js Supabase SaaS Kit
    • Tables/Functions not found
    • Updating the Fonts
    • Adding Pages
    • Adding a new translation file
    • Contentlayer gets stuck
    • Guarding Pages
    • Using Lemon Squeezy instead of Stripe
    • Updating the Favicons
    • Using the Language Switcher
    • Dynamic server usage error
    • Environment variables
    • Detect current Locale
    • 403 error with API/Actions
    • Setting up Emails
This documentation is for a legacy version of Next.js and Supabase. For the latest version, please visit the Next.js and Supabase V2 documentation

Configuring your SaaS Stripe Plans in your Makerkit Next.js Supabase App

Learn how to configure the Stripe plans in your SaaS application with Makerkit

When taking payments from Stripe, you're required to configure your subscription's plans.

Your plans need to be configured in two places:

  1. Stripe - first, you need to define your products and plans in Stripe itself. This requires you to have an account in Stripe.
  2. Configuration: - then, you will copy your plans data in the Makerkit configuration, which is used to render the Pricing table and display the prices metadata

Pricing Table Configuration

Below is the default Pricing Table configuration of the kits. The PricingTable component will automatically generate the pricing table based on the Stripe plans you have created and added to the configuration (see below).

We have 3 products (Basic, Pro and Premium), each with 2 plans (monthly, yearly). By default, the Pro plan is set as the recommended plan.

Of course, the below is simply an example. You will need to customize this according to your application's plans.

tsx
stripe: {
products: [
{
name: 'Basic',
description: 'Description of your Basic plan',
badge: `Up to 20 users`,
features: [
'Basic Reporting',
'Up to 20 users',
'1GB for each user',
'Chat Support',
],
plans: [
{
name: 'Monthly',
price: '$9',
stripePriceId: '<price_id>',
trialPeriodDays: 7,
},
{
name: 'Yearly',
price: '$90',
stripePriceId: '<price_id>',
trialPeriodDays: 7,
},
],
},
{
name: 'Pro',
badge: `Most Popular`,
recommended: true,
description: 'Description of your Pro plan',
features: [
'Advanced Reporting',
'Up to 50 users',
'5GB for each user',
'Chat and Phone Support',
],
plans: [
{
name: 'Monthly',
price: '$29',
stripePriceId: 'pro-plan-mth',
trialPeriodDays: 7,
},
{
name: 'Yearly',
price: '$200',
stripePriceId: 'pro-plan-yr'
},
],
},
{
name: 'Premium',
description: 'Description of your Premium plan',
badge: ``,
features: [
'Advanced Reporting',
'Unlimited users',
'50GB for each user',
'Account Manager',
],
plans: [
{
name: '',
price: 'Contact us',
stripePriceId: '',
label: `Contact us`,
href: `/contact`,
},
],
},
],
}

Update the Stripe Price IDs values!

Please replace the property stripePriceId with the real price ID from the Stripe Dashboard.

<div>

Update your real Stripe Price IDs

The properties "stripePriceId" are placeholders. You will need to replace them with the IDs of your plans.

</div>

Additional Configuration

You can also configure the following properties on each product:

  • recommended - set to true if you want to highlight a plan as recommended
  • badge - set to a string if you want to display a badge next to the plan name

You can also configure the following properties on each plan:

  • price - any string that you want to display as the price (e.g. $9.99 or Free)
  • label - set to a custom string if you want to display a button label
  • href - set to a custom URL if you want to link to a custom page (for example, a contact page)
  • trialPeriodDays - set to the number of days you want to offer a free trial for