← Voltar para a Forja
Entregue Next.jsFintechMulti-tenantMigração de legado

Cirene — SaaS de afiliação e comissões.

Plataforma multi-tenant onde lojistas criam campanhas de cupom, afiliados ganham por venda através de uma conta corrente, e uma hierarquia de representantes comerciais é remunerada por metas próprias. Reescrita de um sistema legado em Oracle APEX que nunca chegou a produção.

Cliente
Cirene
Período
2026
Papel
Arquiteto e desenvolvedor principal

Domain models

56

Application code

~44.5k LOC

Role hierarchies

4

Legacy replaced

14 PL/SQL pkgs

cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br

O problema

O negócio tinha passado mais de um ano construindo sobre Oracle APEX — catorze packages PL/SQL, banco Oracle na OCI, endpoints REST via ORDS e três microsserviços em Docker — e ainda não havia colocado nada na frente de um cliente. A stack não era o fracasso em si; o problema é que ninguém conseguia entregar uma mudança rápido o bastante para aprender alguma coisa.

A única vantagem daquela situação: não havia dado de produção para migrar. A reescrita podia ser um corte limpo.

A solução

Reescrita completa como uma única aplicação Next.js, entregue como quatro portais distintos sobre um mesmo modelo de domínio: administração, lojista, afiliado e representante comercial — este último com prepostos, metas e fechamento mensal próprios.

  • As imagens de cupom e comprovante são geradas no servidor com satori e resvg, substituindo o microsserviço Puppeteer que o legado precisava para a mesma tarefa.
  • Contratos e termos são editados em editor rich-text com interpolação de variáveis, e o aceite fica registrado com trilha de assinatura.
  • Chamados de suporte, impersonação com log de auditoria e catálogo público de produtos completam o que a operação de fato usa no dia a dia.

Arquitetura

Monolito Next.js sobre Server Actions, Prisma sobre PostgreSQL, cinquenta e seis modelos cobrindo a cadeia comercial inteira. Entrega uma imagem Docker multi-stage com saída standalone junto de um compose, então pode ser auto-hospedado em vez de ficar preso a uma plataforma.

  • Pagamentos. Asaas de ponta a ponta — checkout de assinatura, Pix, autorização de Pix desacoplada, ingestão de webhook com ferramenta de replay para depuração.
  • Financeiro. DRE, contas a pagar e importação de extrato OFX conciliada contra os lançamentos.
  • Mensageria. WhatsApp Cloud API com gestão do ciclo de vida dos templates por script — criação, verificação e geração de documentação — porque a aprovação de template é o elo mais lento dessa cadeia.
  • Quatro rotas de cron cuidam da renovação de assinatura por Pix, assinaturas a vencer, fechamento mensal do representante e fim de trial.

Resultados

O sistema chegou a produção e a um ambiente de homologação no mesmo ano em que a reescrita começou, contra um legado que não entregava havia mais de um ano. Comercial, financeiro e afiliação rodam sobre um único banco com um único modelo de permissão, e cadastrar um lojista novo não exige mais um desenvolvedor.

Stack completa

Next.js 16 (App Router)React 19TypeScriptPrisma 7PostgreSQL 16Auth.js v5 + OTPTailwind v4Tiptapsatori + resvgAsaasWhatsApp Cloud APIDocker (standalone)Vitest
João Afonso Assumpção Arquiteto de Sistemas · Engenheiro de Automação · Construtor de Soluções
© 2026 · Todos os direitos reservados. Construído com SvelteKit