Aura Intelligence · Voice AI for hotels
I build and run the phone and chat AI for hotels, from the agent and the customer portal to quality control.
Aura answers calls and chats for hotels, around the clock. I own the agent, the customer portal, the chat widget and the API behind them, and I make sure quality gets measured instead of guessed.
- Client
- Aura Intelligence
- Period
- since May 2025
- Stack
- ElevenLabs, Supabase, AWS, Python, TypeScript, React, n8n, PostHog, OpenRouter, Linear
Starting point
Aura is a digital front desk for hotels. The AI answers calls, handles questions about parking, breakfast and pets, checks live availability in the hotel’s booking system, creates bookings and hands over to a human when needed. On top of that there’s a chat on the hotel website.
A demo of this is quick to build. It gets hard when thousands of real guests call in a day and the AI quotes prices and offers rooms. A wrong price on the phone is not a small bug. The guest hears it, and the hotel has to deal with it.
I joined in May 2025. I started with the onboarding app for new hotels. Today I own the agent itself, the customer portal, the chat widget and everything API attached to them. I also lead agent reliability and platform and chat.
What I build here
The agent as code
Prompts, flows and tools used to live in the voice provider’s UI. No diff, no review, and production and development drifted apart. At the end of 2025 we switched to ElevenLabs, and I built a CLI for it: pull agents, diff them, validate, push to dev, run simulations, run experiments with traffic splits. There are four agents in the repo, phone and chat, each in dev and production. The rule is simple: prove changes on dev first, then mirror them to production, never test against production. Agents use the CLI the same way I do.
Evals and a gate before every release
Around 280 simulated conversations for phone and chat, each with a persona, criteria and tool mocks. The mocks are checked against the real API models so tests don’t quietly drift from reality. Every ticket starts the same way: reproduce the bug with an eval, make the smallest change, dev agent, before and after in the PR. A release today goes like this: dev agent, all evals, below 94 percent correctness we keep fixing, otherwise it ships.
Quality monitor and quality contract
Every real call is scored after it ends. The rules live in a machine-readable quality contract, generated from the agent’s tools and the portal settings, now separate for phone and chat. A daily drift check verifies that new agent changes still match the contract.
The monitor showed a good rate, and still calls failed every day. I had the failures from the last 24 hours clustered one by one by root cause. One large cluster was an artifact of keyword search. The grader itself miscounted transfers because it sorted tool calls by timestamp instead of order. For the real problem, the cause was usually a long availability list where the model picked the wrong entry. The agent passed the first eval for it, because it was too easy. Only with a realistically full response could the bug be reproduced.
Transfers the prompt doesn’t decide
When to transfer to whom used to be in the prompt and worked some of the time. Since July 2026 a deterministic resolver in the API decides, based on the settings the hotel maintains in the portal: contacts, hours, keywords, after-hours behavior, callbacks after failed attempts. The agent only collects what the resolver needs. Since September there’s a variant for chat.
Booking systems
Ibelsa, Vioma, DIRS21, Mews and others all deliver rates, packages and extras differently. I build the logic in between: room sorting, minimum stay, alternative dates, multi-room bookings, cancellation terms, and a booking-link mode for hotels without a system. In July 2026 the AI told callers at one hotel “breakfast included” when it could only be added on. Instead of patching that one hotel, I pulled real responses from all systems and built one shared rule for extras. The documentation for all systems lives in its own repo so agents don’t guess when building new integrations.
The chat widget
The same agent as a chat on the hotel website, since February 2026. The availability check runs as a client tool, and the browser shows room cards with images, prices and direct booking links. Plus voice mode, restaurant selection, a consent screen, customization in the portal and the same language support as on the phone. The widget is the basis for Aura’s free chat plan.
Knowledge: import, hygiene, gaps
Setting up a hotel’s knowledge base by hand takes time. Since September 2026 a crawler reads the hotel website, guest directories and PDFs and turns them into entries the team reviews. Hotels liked it and wanted it automatic, so since October there’s an automatic mode. Duplicate entries are detected and shown for review before deletion.
At the end of August came the idea for knowledge gaps: when the agent couldn’t answer a question, that’s in the logs. We match those questions against the knowledge base and show them in the portal with a button to fill them in. When the knowledge base changes, they get rechecked, because stale hints are worse than none. In the final check, 527 classifications ran in 24 hours without a single error.
Feedback that agents work through
Hotels can leave feedback on every conversation. It used to land in Linear and sit there. Today every report is stored and, before a ticket is created, checked against open tickets that already cover it. When a fix is merged, the hotel sees “Done for you” in the portal. A coordinator agent triages the Linear inbox every workday: at most five tickets, each gets its own agent with a read-only briefing, and what comes back is an assessment with evidence.
The customer portal
My biggest piece, grown out of the onboarding app. Hotels configure their agent here, from restaurants and transfers to the booking system, and see every conversation with audio, transcript and outcome. New requests become a portal setting and an API field, not a prompt hack. In August 2026 I moved every page to a shared design system in one day.
Frontends that fix themselves
Since October 2026, errors in the portal and the widget land in PostHog as exceptions. Scheduled scans start an agent for each error class, which reproduces the error first and then fixes it. For that to work there are verification skills: an agent can use the portal and the chat itself, take screenshots and prove its change. The portal also has a local end-to-end environment with synthetic hotels.
Also
Consent logging and hardening against prompt injection. Automated account setup and phone number provisioning. Model benchmarks for German phone calls, covering latency and behavior.
How I work
Almost everything runs through agents in cloud VMs, one topic per agent, often several in parallel. Every agent spins up its own review build of the portal, which I look at before anything is merged. Agents have read access to production. Writes need explicit approval per task. And no change without proof: eval or reproduction first, then the fix, then a measurement in production a week later.
Results
“The rate looks good” became a picture you can act on. Releases run behind an eval gate, drift is checked daily, hotels maintain their own knowledge and see what happens with their feedback. Since May 2025 I’ve merged more than 880 pull requests into Aura’s repos.
Jonas Cohrs, co-founder of Aura: “He understands the big picture, from backend to frontend.”
Got a similar problem? Get in touch.