Project · 2025 → today
atende.expert
AI-powered customer service and scheduling over WhatsApp
Multi-tenant SaaS for clinics, salons, barbershops and pet shops: an AI agent talks to the customer, checks real availability, books, reschedules, sells and escalates to a human — all supervised from an operations console.
Screens
What it does
- Agent talks by text or voice on WhatsApp and on the website, in Portuguese
- Books, reschedules, cancels, builds a cart and places orders with no human in the loop
- Team console: calendar, store, real-time inbox, catalog, customers and accounts
- Scheduling engine with auto-assignment, service chaining and 9 statuses
- Two-way sync with Google Calendar
- Eval Studio: an LLM judge scores every conversation on five dimensions
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
Full product, from scratch
Technical challenges
Where the problem pushed back.
Schema-per-tenant
Each business gets one PostgreSQL schema per module, switched via search_path. The active tenant lives in a Java 25 ScopedValue and caches are keyed by tenant.
Zero double-booking
Conflicts are rejected in the database with EXCLUDE USING gist over tstzrange — no application locks. Nightly jobs elect a leader via advisory lock.
An agent that does not make things up
Grounding state tracks the slots and IDs already shown. "Booked it" replies are blocked unless a write tool call actually succeeded.
Measurable quality
YAML scenarios run against the real stack with a simulated customer and an LLM judge. Changing a prompt without measuring regressions stopped being acceptable.
Integration without a broker
Transactional outbox per tenant consumed by cursor over HTTP. Chat and calendar-sync react to events without Kafka or RabbitMQ.
Cheap multilingual RAG
768-d embeddings in pgvector (HNSW) produced by an ONNX model in an isolated service — it weighs gigabytes and does not scale like the workers.