AgiotaLegal
Cobros y suscripciones para pequeños negocios, con Pix en cada cobro y un aviso por WhatsApp o correo.
Producto propio · Cobros · Node.js
Imágenes
Contexto
AgiotaLegal es un sistema de cobros multi-tenant. El negocio registra lo que vende, asocia clientes y el sistema genera el cobro en el vencimiento, con Pix y un aviso.
La web está en portugués e inglés. El navegador solo habla con Next.js. La API en Express queda detrás.
Problema
El cobro tiene que salir el día correcto, llevar un Pix y avisar al cliente antes y después del vencimiento, sin costo por transacción y sin pasarela.
Qué hice y por qué
Monorepo pnpm. La web es Next.js 16 y React 19, en Vercel, detrás de Cloudflare. La API es Express 5, Prisma 6 y PostgreSQL 16, en Railway, con un worker BullMQ y Redis en el mismo código. Los contratos están en Zod, en un paquete compartido. El schema tiene 13 modelos.
El servicio acepta cobro único, semanal, mensual, anual o cada N días. La suscripción puede tener un valor propio por cliente. Los valores van en centavos, de R$ 0,01 a R$ 1.000.000,00. El cobro nace 7 días antes del vencimiento. El atraso cae al final del día, en la zona horaria de la cuenta.
El Pix es un BR Code estático, armado al leerlo con la clave de la cuenta, el valor y el identificador del cobro. No se guarda. La baja es manual, porque no hay pasarela.
El canal por defecto es WhatsApp manual: el sistema prepara el texto y un enlace wa.me, y quien envía es el usuario. También existen el correo y la API de Meta. El mensaje solo sale si el cliente consintió.
Contraseña con argon2id, 2FA TOTP y sesión opaca en una cookie httpOnly. Secretos con AES-256-GCM. Las pruebas de dominio tienen un piso del 90 % en el repositorio.
Resultado
Todavía sin dominio público. Números de uso: [PREENCHER].