24Seven Concierge
A catalog-grounded travel concierge that plans across Shopify inventory and hands off to a human agent.
At a glance
- Who it serves
- A boutique travel business whose clients preferred conversation to catalogue browsing.
- What I owned
- The AI concierge enhancement inside the client’s existing app and Shopify catalogue—not the original app.
- Key decision
- Use catalogue context and structured product handles for visual suggestions; hand booking confirmation to a human.
- Current state
- AI planning feature in a released client app, ending in a WhatsApp concierge handoff.
- Evidence and gap
- App Store listing and feature recording. Booking conversion, revenue lift and formal AI-quality results are not published here.
Problem
I was approached by a small boutique concierge business that had already digitised its offering. Bookings for yachts, villas, and experiences across Ibiza and Marbella lived in a proper Shopify-based catalogue, browsable through their own iOS and Android apps. The infrastructure was there. But their actual clients, high-net-worth people used to being served rather than searching, were not engaging with it that way. They wanted to text. A WhatsApp message along the lines of "something in Marbella next week, sleeps ten, a yacht if you can" was how they naturally reached out, the same way they would speak to a real concierge.
The trouble was that a text thread alone could not do the job either. You cannot send someone ten property links over WhatsApp and call that a menu. Clients still needed to see what was actually available: photos, pricing, capacity, and the detail that turns "something in Marbella" into an actual decision. The business was stuck between two half-solutions: an app with a browsable catalogue nobody wanted to browse, and a chat channel clients loved that had no way of showing them anything.
What they wanted, and what I was brought in to build, was both at once: the ease of ordering by conversation, with a visual menu and cart sitting behind it. I took their existing app and codebase and put a Gemini Flash concierge engine inside it.
Architecture
Model: the concierge is powered by Google Gemini 2.5 Flash, called in its native JSON output mode. I chose Flash because the app it was going into was already live and fast, and a booking chat that hesitates for a few seconds before replying breaks the feeling of speaking to a real concierge. JSON-native output mattered just as much as speed. Rather than parsing freeform text and hoping the model happened to mention the right product names, Gemini returns a structured object containing a message and a list of recommended product handles, which the app renders directly as a carousel of real catalogue items. A second, lighter call to Gemini 2.0 Flash handles smaller per-product booking messages, generating a contextual enquiry from a product's details and whatever dates the client picked.
Context: a Storefront GraphQL query supplies up to 250 catalogue products, compressed to handle, title, tags, shortened description, price, and collection. That context and the client-side chat history are sent to Gemini on each turn. The source write-up also includes a Dubai demonstration layer; demonstration coverage is separate from verified inventory and availability. I chose the full catalogue over a filtered retrieval subset because travel requests can cross categories and destinations.
Orchestration: underneath the chat, the app still runs on the client's existing Expo and React Native codebase, so the orchestration work was about wiring a new AI layer into an app that already worked, not starting over. A conversation runs through Gemini for planning and product linking, and once a client is ready, a second Gemini call condenses the whole conversation into a clean, readable booking brief. That brief becomes the payload for a WhatsApp deep link straight to the human concierge's number. Chat state lives in a small local store persisted on the device, so a client can close the app mid-planning and pick the conversation back up later.
Governance: the prompt instructs Gemini to recommend only supplied catalogue products, return JSON, and keep a reserved, professional tone. Structured output makes parsing failures catchable, but a prompt instruction does not guarantee catalogue membership or a valid itinerary. A human concierge confirms the booking. Conversational memory is the client-side history block sent with each call; there is no server-side session.
Human: the AI never gets to close a sale. Every planning conversation ends the same way: a confirm booking on WhatsApp button that hands the finished brief to a real concierge agent's WhatsApp number. That was a deliberate line I drew early on, given who the client is. A high-net-worth guest booking a yacht in Ibiza is not looking for a chatbot to confirm their trip; they are looking for the same white-glove service they would get from a phone call, just reached through a faster front door. The AI makes that front door effortless. Closing the booking stays human.
Why this approach
The client did not need a new app, and they definitely did not need me to convince their clients to start browsing a catalogue they had already shown no interest in browsing. The obvious move was to meet high-net-worth guests inside the chat-style behaviour they already preferred, and let the model turn a loose WhatsApp-style request into a visual, bookable answer. That is why the concierge is a layer inside their existing app rather than a separate product: the catalogue, booking flow, and brand were already right. What was missing was a way to talk to it.
The next decision was how the model should see the catalogue. At up to 250 products, full catalogue injection kept the integration simpler than adding a retrieval service and let the model compare inventory across destinations in one request. The tradeoff is sending that context on every turn. Cost, latency, and constraint accuracy should determine when retrieval becomes worthwhile.
The last decision was structured JSON rather than a normal chat reply. A message plus product handles lets the UI attach matching catalogue cards instead of extracting names from prose. JSON parsing makes malformed responses visible; it does not by itself validate the recommendations, dates, availability, or returned handles.
Tradeoffs
The first tradeoff is full catalogue injection over a retrieval step. Sending the compressed catalogue on every turn enables cross-category planning but increases context size as the inventory and conversation grow. There is no universal product-count threshold for changing this design: token usage, latency, cost, and recommendation quality should drive that decision.
Chat history persists on the client and is replayed with each call. That avoids a separate server-side conversation store, but limits centralised analysis and continuity across devices. It also means prompt size grows with the conversation, so context cost and latency need monitoring.
I launched the first AI Concierge version without a formal evaluation suite. Its scope was planning and recommendations, with a human concierge confirming bookings. Catalogue instructions and structured JSON reduced ambiguity but did not enforce catalogue membership or prove output quality. Deferring evaluation left a known gap around invented products, conflicting constraints, and malformed responses; that gap needs measurement before a broader rollout.
Demo / proof
24Seven Concierge is live on the App Store.
Users can browse the catalogue and use the AI Concierge bar at the bottom of every screen to create an itinerary.
The live proof is a working mobile path from loose travel intent to catalogue-grounded AI planning to human fulfilment: the model recommends product handles, the UI attaches those products as visual cards, and the final CTA sends a booking brief to WhatsApp instead of leaving the user with generic chat output.
What I would improve
The next investment is a suite of roughly 30 to 50 cases covering out-of-catalogue references, multi-destination constraints, and malformed output. Human observation is the current quality signal; the proposed suite has not yet established an automated quality baseline. Deterministic validation of returned product handles should complement those tests before recommendations are treated as catalogue-safe.
The second improvement is closing the gap at the end of the WhatsApp handoff. Every AI-generated itinerary currently ends the same way: a message to a human agent, with no async slot reservation, no price lock, and no structured booking intake beyond free text. A member who finishes planning at 2am gets no acknowledgment until a human reads WhatsApp the next morning. A Shopify checkout integration that can at minimum capture a structured hold or enquiry against specific product variants would turn that final step into an actual booking record instead of a prose message.