← Voltar para a Forja
Entregue Next.jsIoTPagamentosWhatsApp

Lavvo — lavanderia de tênis em lockers inteligentes.

Serviço premium de limpeza de tênis operado por lockers autônomos instalados em academias e clubes. O cliente deposita pelo app, a operação coleta por cluster geográfico e o par volta em 48 horas para a mesma porta.

Cliente
Lavvo
Período
2026
Papel
Arquiteto e desenvolvedor principal

Domain models

27

Application code

~18k LOC

User roles

4

Turnaround

48h

lavvo.app
lavvo.app
lavvo.app
lavvo.app
lavvo.app
lavvo.app
lavvo.app
lavvo.app
lavvo.app

O problema

Uma lavanderia de tênis só escala quando coleta e entrega deixam de depender de alguém presente. A aposta foram lockers autônomos em locais parceiros — o que transforma um negócio de serviço em um problema de hardware distribuído: portas que precisam abrir no segundo certo para a pessoa certa, uma rota de coleta que precisa saber o que há atrás de cada porta, e um parceiro que precisa confiar no rateio da receita.

Por cima disso vem a obrigação fiscal: cada ciclo de limpeza é uma nota de serviço, e NFS-e não é opcional.

A solução

Um sistema cobrindo os quatro lados da operação, cada um com interface e permissões próprias: o app do cliente (depósito, acompanhamento, retirada), a fila do operador (coleta por cluster e reagendamentos), o painel do parceiro (movimento e repasse) e o back office administrativo (lockers, portas, pedidos, cupons, anúncios, notas).

  • O depósito é guiado — o app conduz o cliente a fotografar o par em quatro ângulos antes de a porta fechar, o que resolve divergência de estado antes de ela existir.
  • O pagamento é Pix via Asaas, com um caminho de pagamento simulado que mantém o fluxo inteiro demonstrável sem tocar num gateway real.
  • As notificações saem pela WhatsApp Cloud API em réguas programadas, porque é onde o cliente já está.

Arquitetura

Uma única aplicação Next.js sobre Server Actions e RSC — sem serviço de API separado para manter sincronizado — com Prisma sobre PostgreSQL e uma fronteira estrita de RBAC entre os quatro papéis.

  • Hardware dos lockers. A API do fabricante espera requisições assinadas por HTTP puro a partir de um IP fixo, então fica atrás de um proxy HTTPS dedicado. A assinatura tem teste unitário, e os eventos das portas voltam por webhook.
  • NFS-e Nacional. Implementação completa, não um wrapper de terceiro: geração do XML da DPS, certificado A1 e-CNPJ guardado cifrado em repouso com AES-256-GCM e assinatura XML-DSig.
  • Trabalho agendado. Rotas de cron conduzem as réguas de notificação e expurgam as fotos do cliente quando a janela de retenção fecha.

Resultados

O ciclo completo roda sem atendente: o cliente nunca encontra um funcionário e o local parceiro não faz nada além de hospedar o locker. A emissão de nota acontece sem humano no meio, e o seed de demonstração reproduz a operação inteira localmente — foi o que permitiu escrever este case sem expor um único registro real de cliente.

Stack completa

Next.js 16 (App Router)React 19TypeScriptPrisma 7PostgreSQL 17Auth.js v5Tailwind v4LeafletAsaas (Pix)WhatsApp Cloud APIVercel BlobVitest
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