Planes de precios

Cómo configurar y personalizar los planes de precios de su aplicación SaaS.

Nota: Este es contenido de ejemplo/marcador de posición con fines de demostración.

Configure su estructura de precios para que se ajuste a su modelo de negocio.

Estructura de los planes

Cada plan de precios consta de:

  • ID - Identificador único
  • Nombre - Nombre visible
  • Precio - Importe en su moneda
  • Intervalo - Frecuencia de facturación (mes, año)
  • Funcionalidades - Lista de funcionalidades incluidas
  • Límites - Restricciones de uso

Configuración de ejemplo

// config/billing.config.ts
export const billingConfig = {
  provider: 'stripe', // o '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, // ilimitado
        members: 20,
      },
    },
  ],
};

Restricción de funcionalidades

Restrinja funcionalidades según el plan de suscripción:

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');
  }

  // Crear el proyecto
}

Límites de uso

Aplique límites de uso por 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.');
  }

  // Añadir el miembro
}

Facturación anual

Ofrezca planes anuales con descuento:

{
  id: 'pro-annual',
  name: 'Professional Annual',
  price: 470, // ~20 % de descuento
  interval: 'year',
  discount: '20% off',
  features: [ /* igual que el mensual */ ],
}

Períodos de prueba

Configure períodos de prueba gratuitos:

export const trialConfig = {
  enabled: true,
  duration: 14, // días
  plans: ['starter', 'pro'], // planes que admiten prueba
  requirePaymentMethod: true,
};

Personalización de la página de precios

La página de precios se genera automáticamente a partir de su configuración:

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

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

Añadir funcionalidades personalizadas

Amplíe las funcionalidades de los planes con atributos personalizados:

{
  id: 'enterprise',
  name: 'Enterprise',
  price: null, // Contactar para conocer el precio
  custom: true,
  features: [
    'Everything in Pro',
    'Dedicated support',
    'Custom SLA',
    'On-premise deployment',
  ],
  ctaText: 'Contact Sales',
  ctaUrl: '/contact',
}