Projeto · 2025 → hoje

atende.expert

Atendimento e agendamento com IA pelo WhatsApp

SaaS multi-tenant para clínicas, salões, barbearias e pet shops: um agente de IA conversa com o cliente, consulta disponibilidade real, agenda, remarca, vende e escala para um humano — tudo supervisionado por um console operacional.

Telas

Triagem de agendamentos: solicitados e reagendamentos
Triagem de agendamentos: solicitados e reagendamentos
Quadro de pedidos vindos do WhatsApp e do chat
Quadro de pedidos vindos do WhatsApp e do chat
Catálogo de produtos e serviços por template
Catálogo de produtos e serviços por template
Eval Studio — asserts e juiz LLM por cenário
Eval Studio — asserts e juiz LLM por cenário

O que faz

  • Agente conversa por texto ou áudio no WhatsApp e no site, em português
  • Agenda, remarca, cancela, monta carrinho e faz pedidos sem intervenção humana
  • Console da equipe: agenda, loja, inbox em tempo real, catálogo, clientes e contas
  • Motor de agendamento com auto-atribuição, encadeamento de serviços e 9 status
  • Sincronização bidirecional com Google Calendar
  • Eval Studio: juiz LLM pontua cada conversa em cinco dimensões

Stack

  • Java 25
  • Spring Boot 3.5
  • PostgreSQL
  • pgvector
  • Node 22
  • TypeScript
  • Vercel AI SDK
  • BullMQ
  • Redis
  • Next.js 16
  • React 19
  • Auth0
  • WhatsApp Cloud API
  • Google Calendar API
  • Docker
  • Railway
  • OpenTelemetry

Produto completo, do zero

Desafios técnicos

Onde o problema resistiu.

Multi-tenancy por schema

Cada negócio tem um schema PostgreSQL por módulo, trocado via search_path. O tenant ativo vive em um ScopedValue do Java 25 e caches são chaveados por tenant.

Zero double-booking

Conflitos barrados no banco com EXCLUDE USING gist sobre tstzrange — sem locks na aplicação. Jobs noturnos com eleição de líder via advisory lock.

Agente que não inventa

Estado de grounding com horários e IDs já apresentados. Respostas do tipo "agendei" são bloqueadas se não houver chamada de ferramenta de escrita bem-sucedida.

Qualidade mensurável

Cenários YAML rodam contra o stack real com cliente simulado e juiz LLM. Mudar um prompt sem medir regressão deixou de ser aceitável.

Integração sem broker

Outbox transacional por tenant consumido por cursor via HTTP. Chat e calendar-sync reagem a eventos sem Kafka ou RabbitMQ.

RAG multilíngue barato

Embeddings de 768d em pgvector (HNSW) gerados por modelo ONNX em serviço isolado — ocupa gigabytes e não escala como os workers.