Pricing Plans

How to configure and customize pricing plans for your SaaS application.

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

// 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:

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:

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:

{
  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:

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:

import { billingConfig } from '~/config/billing.config';

export default function PricingPage() {
  return (
    <PricingTable
      plans={billingConfig.plans}
      currency={billingConfig.currency}
    />
  );
}

Adding Custom Features

Extend plan features with custom attributes:

{
  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',
}
TPTInvesting

TPT Investing is an educational and research platform operated by Winterhowlers LLC. All content, tools, data, analysis, and research outputs are for informational and educational purposes only. Nothing on this platform constitutes investment advice, financial advice, or professional financial guidance. TPT Investing does not recommend the purchase or sale of any security. Past performance is not indicative of future results. All investing involves risk. AI-generated analysis is provided for research and learning purposes and may not be complete, current, or error-free. Users should independently verify all data and consult a qualified financial advisor before making investment decisions. TPT Investing is not a registered investment advisor, broker-dealer, or fiduciary.

© 2026 Winterhowlers LLC. All rights reserved.