Recurra
ArquivadoProjeto pessoal — estrutura de cobrança recorrente para negócios locais de serviços. Construído como desculpa para aprender Nx, AWS CDK e a camada de billing do começo ao fim.
O que faz
Recurra é uma plataforma de cobrança recorrente para negócios locais de serviços. O dono gerencia serviços, agendamentos e clientes pelo painel admin em React ou pelo app mobile em Expo. O cliente gerencia suas assinaturas por um portal hospedado. O Stripe cuida das cobranças. Uma integração com o Clover POS escrita em Kotlin permite checkout presencial consultando a assinatura ativa do cliente.
Por que construí
Não é um produto — é um projeto pessoal. Queria construir algo que abrangesse web + mobile + POS + infraestrutura AWS em um único monorepo, em parte para aprender Nx e CDK de verdade, em parte porque cobrança por assinatura para negócios locais de serviços é um domínio que acho genuinamente interessante (e consistentemente mal atendido).
Como funciona
Monorepo Nx com NPM workspaces. Seis apps:
backend— NestJS com Prisma conectado ao PostgreSQL no RDS, deployado no App Runner.web— React Router 7 SPA em build/client/, hospedado no S3 + CloudFront.mobile— Expo.clover-pos— Kotlin Android para o Clover Mini.infra— AWS CDK com seis stacks: Network, Dns, Database, Backend, Web, Email.backend-e2e— testes e2e com Jest.
Tipos compartilhados e schemas Zod ficam em @recurra/shared e são importados por todos os apps. As stacks do CDK usam o SSM Parameter Store para segredos e um script de entrada que monta a URL do banco a partir do JSON do Secrets Manager.
Status
Em desenvolvimento ativo. Backend, web admin e infra já estão no lugar; o app Clover POS e o app mobile do dono são os próximos.
Perguntas
O que é o Recurra?
Recurra é uma plataforma de cobrança recorrente para negócios locais de serviços — o slogan é 'clientes que voltam, cobranças que se repetem.' Gerencia agendamentos recorrentes, cobranças automáticas via Stripe, assinaturas em autoatendimento pelo cliente e uma integração com o Clover POS para checkout presencial.
Por que um monorepo multi-app para o Recurra?
Um negócio precisa de três interfaces — painel web do dono, app mobile do dono, POS voltado ao cliente — compartilhando um único backend, um modelo de autenticação e um sistema de billing. O monorepo Nx com @recurra/shared mantém tipos, validações e regras de negócio em um único lugar, acessível pelo React Router, Expo e o cliente Kotlin do POS.