Independent product · Hospitality · 2026
Hotel AI Concierge
Bilingual Turkish/English guest concierge grounded in hotel documents and a live rate engine — cited answers, quotes computed by code with no model call, consented reservation requests and WebRTC live voice.
Screenshots
The problem
Hotel guests ask two very different kinds of question. Policy questions — “Is breakfast included?” — live in documents. Commercial questions — “What would three nights in a sea-view room cost?” — need a number, and a wrong number is worse than no answer. An assistant that improvises both is a liability.
What I built
- Document answers with numbered, clickable citations from Azure AI Search, behind a relevance gate that prefers “I don’t know” to a weak match.
- Dated quotes and earliest-availability searches computed by code from the rate engine; the commercial answer is written from those same facts with no model call.
- Reservation requests stored only with the guest’s consent, for staff to confirm — never a booking, a hold or a payment.
- A protected staff panel with editable rates and availability, the request queue, and AI summaries and reply drafts that never see a guest’s identity.
- Live voice in Turkish and English over WebRTC with Azure OpenAI Realtime, server-side turn routing and a server-side allow-list of what can be searched.
- A dedicated Azure SQL database guarded at startup: the app verifies the exact server, database and engine it connects to, and never changes a schema in production.
Architecture
Guest browser
text chat · WebRTC voice
Blazor host on Azure App Service
.NET 10 · turn router · tool allow-list · answer composer
Azure AI Search
hotel documents, citations
Rate engine
deterministic quotes
Azure OpenAI
language and realtime voice
Azure SQL
requests, rates, staff data
Key decisions
No model touches a price
A dated quote is arithmetic. The answer text is composed from the same facts the quote card shows, so the two can never disagree.
Requests, not bookings
Nothing in the request path can reserve, hold or charge — and an automated test fails the build if that ever changes.
The server decides what is searched
The browser sends a question; the server routes the turn and picks the index from an allow-list, so a public assistant cannot be pointed at private data.
Honest scope
A fictional property with synthetic data. It connects to no hotel management system and takes no booking or payment. Voice answers currently use local document retrieval; full parity between voice and text is in progress.