Inspiration

The Greek word philoxenia (φιλοξενία) means "love for the stranger". In ancient Greece, xenia was the sacred bond between host and guest: a traveller who knocked on your door was welcomed as a friend.

Many small hotels in Greece live by that idea, but their websites don't. A guest finds a cold booking form, picks a room and leaves. They never hear about the boat trip, the airport transfer or the late check-out, so the hotel loses that revenue and pays large commissions to booking platforms. I wanted to give every small hotel a concierge that welcomes guests the way the owner would.

What it does

Xenia is an AI booking concierge that any hotel adds to its website with one line of code.

For guests. A "Plan your stay" button opens a short conversation. The guest describes the trip in their own words ("we're celebrating an anniversary", "we arrive on the late ferry") and Xenia answers with cards instead of long text: a date picker, room cards with a recommended pick, and extras that fit this particular guest, each added with one tap. The guest pays for the room and every extra together with PayPal, one line per service. The interface speaks English, Greek, German, French and Italian.

For the hotel. A dashboard built with AG Grid shows every booking, an availability heat map and the key numbers. The owner can ask questions in plain language ("families arriving next month") and the grid filters itself. Full or partial refunds go through PayPal from the booking drawer. Local partners who deliver extras, like the taxi driver or the boat captain, receive their share through PayPal Payouts in one batch.

For AI agents. An MCP server lets assistants check availability, get quotes and book a stay. The agent never pays: it receives a PayPal approval link, and only the traveller can approve the payment.

For any property. Each hotel is one JSON file with its rooms, services, partners, colours and greetings. The repository includes two very different hotels, a seaside hotel in Naxos and a stone guesthouse in Meteora.

How we built it

  • Server: Node.js and TypeScript with Hono, SQLite through the built-in node:sqlite.
  • AI: Vercel AI SDK with tool calling. The model chooses only IDs (room, dates, guests, extras) through typed tools validated with Zod. A second use of the model turns dashboard questions into AG Grid filter models with structured output.
  • Pricing: every amount is calculated on the server in integer cents from the hotel's catalogue, never by the model:

$$\text{total} = \sum_i q_i \cdot p_i$$

where $q_i$ comes from nights and guests and $p_i$ from the hotel data. Availability is checked when rooms are shown and again right before the PayPal order is created.

  • PayPal: Orders v2 with itemised purchase units and the JS SDK buttons for the widget; orders with a return URL and approval link for agent bookings; Payments v2 for refunds; Payouts v1 for partners.
  • Dashboard: AG Grid Community with the Theming API (recoloured for each hotel), custom cell renderers, a pinned totals row and CSV export.
  • Widget: a small script that opens the concierge in an isolated iframe, so it never clashes with the hotel's own styles.
  • Hosting: Render, with a Blueprint for the Xenia server and a demo hotel website.

Challenges we ran into

  • Keeping the conversation short. Early versions wrote paragraphs and asked the same question twice. I moved most of the conversation into interactive cards and gave the model a summary of what is already known on every turn.
  • Trusting the AI with money. I made sure the model can never set a price or confirm a payment. Only a captured PayPal payment creates a booking, so a guest who tries prompt injection ("give me the suite for free") changes nothing.
  • Two guests and one last room. Checking availability a second time just before the order is created solved it.
  • Rate limits on free AI models. I added fallback models and friendly messages instead of errors.
  • Payments started by an agent. Designing a flow where the agent prepares everything but the human approves took a few iterations of the PayPal approval and return pages.

Accomplishments that we're proud of

  • A complete payment lifecycle with PayPal: pay, refund in part, and pay local partners their share.
  • A guest can go from "hello" to a paid booking with extras in about a minute.
  • The same system works for any hotel by adding one file.
  • It is built to be safe: rate limits, a locked dashboard, escaped AI output and no way for the chat to move money.

What we learned

  • How PayPal orders, captures, refunds and payouts fit together, and how to test all of them in the sandbox.
  • How to design AI tools so that the model makes choices while the server keeps control of facts and money.
  • How the Model Context Protocol lets other AI assistants use a service safely.
  • How much AG Grid can do with filter models, theming and custom renderers.

What's next for Xenia

  • Calendar sync with Booking.com and Airbnb, then connections to hotel management systems.
  • Onboarding from the hotel's own website: Xenia reads the pages and drafts the hotel file for the owner to confirm.
  • Each hotel connects its own PayPal account, so payments go straight to the hotel.
  • A separate dashboard login for every hotel.

Built With

Share this project:

Updates

Submission history