All projects

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.

Live demoArchitect and sole developer

Screenshots

The public demo’s home page — a fictional five-star hotel in Istanbul, labelled as a demonstration site.
A price question answered by code: availability and totals come from the rate engine, marked “deterministic quote · no model call”.
The rate calendar is computed by the demo reservation system — no price is typed in by hand.
A three-step reservation request: it is stored for staff to review — never booked, held or charged.
Image 1 of 4
Home page of the Grand Bosphorus Palace demo hotel

The public demo’s home page — a fictional five-star hotel in Istanbul, labelled as a demonstration site.

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.