Bernardo Knoblauch

AgiotaLegal

Cobranças e assinaturas para pequenos negócios, com Pix em cada cobrança e lembrete por WhatsApp ou e-mail.

Produto próprio · Cobranças · Node.js

Stack
Node.js, Express, TypeScript, Prisma, PostgreSQL, Next.js, React, Redis, Cloudflare

Imagens

Contexto

O AgiotaLegal é um sistema multi-tenant de cobranças. O negócio cadastra o que vende, associa clientes e o sistema gera a cobrança no vencimento, com Pix e lembrete.

A web está em português e inglês. O navegador fala só com o Next. A API em Express fica atrás dele.

Problema

A cobrança tem de sair no dia certo, levar um Pix e avisar o cliente antes e depois do vencimento, sem custo por transação e sem gateway.

O que fiz e por quê

Monorepo pnpm. A web é Next.js 16 e React 19, na Vercel, atrás do Cloudflare. A API é Express 5, Prisma 6 e PostgreSQL 16, no Railway, com um worker BullMQ e Redis no mesmo código. Os contratos ficam em Zod, num pacote compartilhado. O schema tem 13 modelos.

O serviço aceita cobrança única, semanal, mensal, anual ou a cada N dias. A assinatura pode ter um valor próprio por cliente. Os valores ficam em centavos, de R$ 0,01 a R$ 1.000.000,00. A cobrança nasce 7 dias antes do vencimento. O atraso vira no fim do dia, no fuso da conta.

O Pix é um BR Code estático, montado na hora com a chave da conta, o valor e o identificador da cobrança. Não fica gravado. A baixa é manual, porque não há gateway.

O canal padrão é o WhatsApp manual: o sistema prepara o texto e um link wa.me, e quem envia é o usuário. E-mail e a API da Meta também existem. Mensagem só sai para cliente que consentiu.

Senha com argon2id, 2FA TOTP e sessão opaca em cookie httpOnly. Segredos com AES-256-GCM. O domínio dos testes tem piso de 90% no repositório.

Resultado

Ainda sem domínio público. Números de uso: [PREENCHER].

Contato

Usamos cookies de análise para entender como o site é usado. Você pode aceitar ou recusar.