EstoqueZap
ERP conversacional: a decisão foi não construir o app que o lojista nunca abriria, e colocar estoque, fornecedores e NF-e dentro do WhatsApp, onde ele já está.
Tecnologias
Comando → banco
<1.5sInterface escolhida
WhatsAppSessão sobrevive a restart
PostgresO problema
Lojista pequeno não abandona o caderno porque o caderno é bom — abandona porque a alternativa exige sentar no computador. Todo ERP para esse público morre no mesmo lugar: atualizar o estoque compete com atender o cliente, e perde. A decisão de produto foi aceitar isso como restrição em vez de tentar educar o usuário: nenhum app novo para instalar, nenhuma tela nova para aprender. A entrada é a caixa de mensagem que já fica aberta o dia inteiro no balcão.
A decisão
Escolher o WhatsApp como interface transfere o problema para a infraestrutura, e é ali que ficaram as decisões difíceis. A conexão é WebSocket persistente via Baileys, com reconexão automática, em vez de webhook. Como o backend roda em disco efêmero, a sessão de login morreria a cada restart — persisti o estado de autenticação do Baileys direto no Postgres via Prisma, fora do padrão em arquivo. O interpretador é Groq/Llama, para aceitar "vendi 3 camisetas azuis" em vez de exigir sintaxe, com limitador que suspende o número por 2 minutos depois de comandos inválidos seguidos. O NestJS por trás cresceu para fornecedores, pedidos de compra e importação de NF-e; o painel em Next.js, com dashboard executivo e instalação como PWA, existe para quem quer olhar o mês inteiro — não para operar o dia.
O resultado
Comando em texto livre vira escrita no banco em menos de 1,5s, a sessão do bot sobrevive a reinício do servidor, e o estoque aparece sincronizado no painel. É o projeto mais próximo de uma plataforma de atendimento que eu construí: fluxo conversacional, interpretação por IA, controle de abuso e transbordo para uma interface humana quando a conversa não dá conta.
