Sistema de Billing Desacoplado: A Abordagem do SaaS Boilerplate
Olá! Felipe aqui. Hoje quero compartilhar uma das partes mais importantes do SaaS Boilerplate: o sistema de billing. Depois de anos implementando sistemas de pagamento para clientes (e cometendo muitos erros pelo caminho), desenvolvi uma abordagem que é ao mesmo tempo poderosa e desacoplada de qualquer provedor de pagamento específico.
Por que um Sistema de Billing Desacoplado?
A maioria dos boilerplates amarra você a um provedor de pagamento específico. Isso pode ser problemático quando:
- Você precisa mudar de provedor (por exemplo, do Stripe para o PayPal)
- Você opera em regiões onde certos provedores não estão disponíveis
- Você quer implementar lógicas de billing personalizadas
No SaaS Boilerplate, o sistema de billing é totalmente desacoplado do provedor de pagamento. Isso significa que você pode trocar de provedor sem alterar sua lógica de negócio ou reescrever seu código.
A Estrutura de Planos e Recursos
O coração do sistema de billing é a definição de planos. Cada plano é definido como um objeto JSON com metadados que incluem recursos, limites e ciclos:
{ "plans": [ { "slug": "free", "name": "Gratuito", "description": "Para começar a explorar", "metadata": { "features": [ { "slug": "projects", "name": "Projetos", "enabled": true, "limit": 3, "cycle": "month" }, { "slug": "api-calls", "name": "Chamadas de API", "enabled": true, "limit": 1000, "cycle": "month" }, { "slug": "team-members", "name": "Membros da Equipe", "enabled": false } ] }, "prices": [ { "slug": "free-monthly", "amount": 0, "currency": "BRL", "interval": "month", "intervalCount": 1 } ] }, { "slug": "pro", "name": "Profissional", "description": "Para equipes em crescimento", "metadata": { "features": [ { "slug": "projects", "name": "Projetos", "enabled": true, "limit": 10, "cycle": "month" }, { "slug": "api-calls", "name": "Chamadas de API", "enabled": true, "limit": 10000, "cycle": "month" }, { "slug": "team-members", "name": "Membros da Equipe", "enabled": true, "limit": 5, "cycle": "month" } ] }, "prices": [ { "slug": "pro-monthly", "amount": 9900, "currency": "BRL", "interval": "month", "intervalCount": 1 }, { "slug": "pro-yearly", "amount": 99900, "currency": "BRL", "interval": "year", "intervalCount": 1 } ] } ] }
Esta estrutura permite:
- Definir recursos por plano: Cada plano tem sua própria lista de recursos habilitados
- Estabelecer limites por recurso: Defina quantidades máximas para cada recurso
- Configurar ciclos de renovação: Especifique quando os limites são renovados (mensal, anual, etc.)
- Oferecer múltiplas opções de preço: Cada plano pode ter várias opções de preço (mensal, anual, etc.)
Sistema Automático de Cotas e Limites
Uma das partes mais poderosas do sistema de billing é o gerenciamento automático de cotas e limites. O Boilerplate rastreia automaticamente o uso de recursos para cada organização e aplica os limites conforme definido nos planos.
Como Funciona o Rastreamento de Uso
O sistema é projetado para ser extremamente simples de usar. Para qualquer tabela no seu banco de dados que tenha um campo organizationId
, o sistema pode rastrear automaticamente o uso:
- Definição de Recursos no Plano: Você define um recurso no plano com um
slug
que corresponde à tabela que deseja rastrear - Rastreamento Automático: O sistema conta automaticamente as entradas na tabela para cada organização
- Verificação de Limites: Quando um usuário tenta criar um novo registro, o sistema verifica se está dentro do limite
Por exemplo, se você tem uma tabela Project
e definiu um limite de 3 projetos no plano gratuito, o sistema automaticamente:
- Conta quantos projetos a organização já tem
- Compara com o limite definido no plano
- Permite ou bloqueia a criação de novos projetos
Ciclos de Renovação
Cada recurso pode ter seu próprio ciclo de renovação:
- Mensal: Limites são renovados a cada mês
- Anual: Limites são renovados anualmente
- Semanal: Limites são renovados semanalmente
- Diário: Limites são renovados diariamente
O sistema rastreia automaticamente quando o último reset ocorreu e quando o próximo está programado.
Isolamento Multi-tenant por Organization ID
O sistema de billing aproveita a arquitetura multi-tenant do SaaS Boilerplate, onde tudo é filtrado pelo organizationId
. Isso garante:
- Isolamento Completo: Os dados de uma organização nunca são acessíveis por outra
- Rastreamento Preciso: O uso é rastreado corretamente por organização
- Faturamento Separado: Cada organização tem seu próprio ciclo de faturamento
O organizationId
é automaticamente incluído em todas as consultas ao banco de dados, garantindo que os limites e cotas sejam aplicados corretamente.
Adaptadores de Pagamento Intercambiáveis
O sistema de billing usa uma arquitetura de adaptadores que permite trocar facilmente entre diferentes provedores de pagamento:
// Configuração com o Stripe const paymentProvider = new PaymentProvider({ adapter: stripeAdapter({ secret: process.env.STRIPE_SECRET_KEY, webhook: process.env.STRIPE_WEBHOOK_SECRET }), database: prismaAdapter(prisma), events: { onSubscriptionCreated: async (subscription) => { // Lógica personalizada quando uma assinatura é criada } } }); // Para mudar para outro provedor, basta trocar o adaptador // const paymentProvider = new PaymentProvider({ // adapter: paypalAdapter({ // clientId: process.env.PAYPAL_CLIENT_ID, // secret: process.env.PAYPAL_SECRET // }), // database: prismaAdapter(prisma) // });
Isso significa que você pode:
- Começar com o Stripe e mudar para outro provedor mais tarde
- Usar diferentes provedores em diferentes regiões
- Implementar seu próprio adaptador para um provedor personalizado
Webhooks e Sincronização
O sistema de billing inclui um gerenciador de webhooks robusto que:
- Processa eventos do provedor de pagamento: Assinaturas criadas, atualizadas, canceladas, etc.
- Sincroniza o banco de dados: Mantém seus dados locais atualizados com o provedor de pagamento
- Evita duplicações: Trata eventos duplicados de forma segura
- Lida com falhas: Recupera-se de erros durante o processamento
Tudo isso é gerenciado automaticamente pelo sistema, sem necessidade de código adicional.
Portal de Billing para Usuários
O SaaS Boilerplate inclui um portal de billing completo que permite aos usuários:
- Visualizar planos disponíveis: Compare recursos e preços
- Gerenciar assinaturas: Fazer upgrade, downgrade ou cancelar
- Atualizar métodos de pagamento: Adicionar ou remover cartões
- Acessar faturas: Ver histórico de pagamentos
O portal é totalmente personalizável e se integra perfeitamente ao seu aplicativo.
Comece a Usar o Sistema de Billing Hoje
Para implementar o sistema de billing em seu SaaS, confira a documentação completa. Incluí guias passo a passo para configurar seus planos, definir recursos e limites, e integrar com provedores de pagamento.
Com este sistema implementado, você pode se concentrar na construção dos recursos principais do seu produto, enquanto oferece uma experiência de billing profissional e flexível para seus clientes.
Boas construções, Felipe
Quer desenvolver um SaaS em um final de semana?
Um único comando no terminal e pronto, você já tem seu projeto criado, com site, blog, central de ajuda, autenticação, onboarding, dashboard, emails... Para resumir, é assim que eu crio os meus SaaS em um Final de Semana.
Conheça minha estratégiaVocê também pode gostar
Banco de Dados com Prisma ORM: O Melhor para Produtividade
Banco de Dados com Prisma ORM: O Melhor para Produtividade Olá! Felipe aqui. Hoje quero compartilhar uma das decisões mais importantes que tomei para o SaaS Boilerplate v2.0: a escolha do Prisma como nossa ferramenta de banco de dados. Depois de anos...
SaaS Boilerplate: Como Construir um SaaS em um final de semana
Lançando um Produto Digital Rentável em 48 Horas: Guia para Desenvolvedores Brasileiros Já se perguntou por que alguns desenvolvedores conseguem lançar produtos em tempo recorde enquanto outros passam meses (ou anos) construindo a mesma coisa? Eu cos...
Como Criar E-mails Transacionais Profissionais para seu MVP ou SaaS
Como Criar E-mails Transacionais Profissionais para seu MVP ou SaaS Ki - Introdução: O Problema Real Quando lancei meu primeiro SaaS como indie hacker, cometi um erro clássico: negligenciei os e-mails transacionais. Achei que eram apenas "detalhes té...