--- title: "Pricing Plans" description: "How to configure and customize pricing plans for your SaaS application." publishedAt: 2024-04-11 order: 1 status: "published" --- > **Note:** This is mock/placeholder content for demonstration purposes. Configure your pricing structure to match your business model. ## Plan Structure Each pricing plan consists of: - **ID** - Unique identifier - **Name** - Display name - **Price** - Amount in your currency - **Interval** - Billing frequency (month, year) - **Features** - List of included features - **Limits** - Usage constraints ## Example Configuration ```typescript // config/billing.config.ts export const billingConfig = { provider: 'stripe', // or 'paddle' currency: 'usd', plans: [ { id: 'free', name: 'Free', description: 'Perfect for getting started', price: 0, features: [ '5 projects', 'Basic analytics', 'Community support', ], limits: { projects: 5, members: 1, }, }, { id: 'starter', name: 'Starter', description: 'For small teams', price: 19, interval: 'month', features: [ '25 projects', 'Advanced analytics', 'Email support', 'API access', ], limits: { projects: 25, members: 5, }, }, { id: 'pro', name: 'Professional', description: 'For growing businesses', price: 49, interval: 'month', popular: true, features: [ 'Unlimited projects', 'Advanced analytics', 'Priority support', 'API access', 'Custom integrations', ], limits: { projects: -1, // unlimited members: 20, }, }, ], }; ``` ## Feature Gating Restrict features based on subscription plan: ```typescript import { hasFeature } from '~/lib/billing/features'; async function createProject() { const subscription = await getSubscription(accountId); if (!hasFeature(subscription, 'api_access')) { throw new Error('API access requires Pro plan'); } // Create project } ``` ## Usage Limits Enforce usage limits per plan: ```typescript import { checkLimit } from '~/lib/billing/limits'; async function addTeamMember() { const canAdd = await checkLimit(accountId, 'members'); if (!canAdd) { throw new Error('Member limit reached. Upgrade to add more members.'); } // Add member } ``` ## Annual Billing Offer discounted annual plans: ```typescript { id: 'pro-annual', name: 'Professional Annual', price: 470, // ~20% discount interval: 'year', discount: '20% off', features: [ /* same as monthly */ ], } ``` ## Trial Periods Configure free trial periods: ```typescript export const trialConfig = { enabled: true, duration: 14, // days plans: ['starter', 'pro'], // plans eligible for trial requirePaymentMethod: true, }; ``` ## Customizing the Pricing Page The pricing page automatically generates from your configuration: ```tsx import { billingConfig } from '~/config/billing.config'; export default function PricingPage() { return ( ); } ``` ## Adding Custom Features Extend plan features with custom attributes: ```typescript { id: 'enterprise', name: 'Enterprise', price: null, // Contact for pricing custom: true, features: [ 'Everything in Pro', 'Dedicated support', 'Custom SLA', 'On-premise deployment', ], ctaText: 'Contact Sales', ctaUrl: '/contact', } ```