ACID, Sistema de Gestão Associativa
Detalhes do Projeto
- Período:
- 03.2026 — Present
- Link
- acid.org.br
- Client Project
- SaaS Multi-tenant
- TypeScript
- Next.js
- PostgreSQL
- Prisma
- Redis
- Asaas
- ClickSign
- Webhooks
- Playwright
- Docker

Impacto em números
Termo, assinatura e cobrança automáticos
Asaas, ClickSign, Cloudinary, WhatsApp, SMTP e Sentry
Desenvolvimento spec-driven
Do lead ao associado ativo, num único schema
A transformação
Sobre o projeto
Associações comerciais operam em planilha, WhatsApp pessoal, pasta de e-mail e papel. Pedido de associação chega no balcão e é digitado à mão. Termo é impresso e assinado fisicamente. Cobrança é boleto avulso, sem régua nem controle de inadimplência. Ninguém sabe, em tempo real, quantos associados estão ativos nem quanto entra de receita recorrente.
O custo disso vai além do operacional. É institucional: a diretoria decide sem dado confiável.
A decisão de produto mais importante do projeto foi tirar o login do candidato. Ele interage apenas por formulário público, WhatsApp, e-mail e links de assinatura e pagamento, e quem loga é a equipe administrativa. Toda vez que você exige cadastro antes de entregar valor, você perde gente.
Oportunidades (Kanban + enriquecimento de CNPJ)
|
Formulário público /associe-se
|
Aprovação -> Termo (PDF timbrado) -> ClickSign -> Asaas
|
PENDENTE > APROVADO > AGUARDANDO_ASSINATURA > AGUARDANDO_PAGAMENTO > ATIVO
Máquina de estados explícita do associado, com cada transição auditada. O estado não é uma string solta, é o contrato do sistema.
Um adapter por integração. Asaas, ClickSign, Cloudinary, WhatsApp e SMTP ficam atrás de camadas próprias, então trocar de gateway não reescreve regra de negócio.
BaaS com subcontas Asaas: cada tenant com a própria subconta, split e conciliação isolados.
Redis para retries, jobs agendados e idempotência de webhook. Se o Redis cair, o sistema continua servindo e só perde o assíncrono.
Um schema Zod único compartilhado entre cliente e servidor.
Governança digitalizada. Diretoria, cargos, atas com assinatura eletrônica e lista de presença viraram entidades, e o histórico institucional saiu da pasta.
Testes em duas camadas, com Vitest e Playwright, cobrindo cadastro e cobrança, que são os fluxos que custam dinheiro quando quebram.
O desafio
Encadear quatro sistemas externos, de assinatura, pagamento, mensageria e storage, num fluxo que não pode falhar pela metade. Um termo assinado sem cobrança criada, ou uma cobrança criada sem termo, deixa a associação em situação jurídica ruim.
Resolvi com máquina de estados explícita, idempotência de webhook via Redis e retry com backoff. Cada etapa é reentrante, e o estado do associado é sempre a verdade, e não o que o provedor externo achou que aconteceu.
Resultados
Cadastro de associado saiu de dias para horas. Régua de cobrança automatizada com conciliação por webhook, receita recorrente visível em tempo real e um produto multi-tenant replicável para outras associações.
Stack técnica
Next.js 16 e React 19
Formulário público, painel administrativo e webhooks num único deploy.
PostgreSQL e Prisma
Migrações versionadas, sem divergência entre ambientes.
Asaas
Cobrança recorrente por PIX e boleto, subcontas por tenant e conciliação por webhook.
ClickSign
Assinatura eletrônica do termo com retorno automático do documento assinado.
Redis
Filas, jobs agendados e idempotência de webhook, com degradação graciosa.
pdf-lib e Puppeteer
Termos e documentos em PDF com timbre institucional.
Vitest e Playwright
Cobertura dos fluxos críticos de cadastro e cobrança.
Sentry
Observabilidade em produção com alerta automático.
Galeria(2)

