<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://alexeyca.github.io/smart-booking-blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://alexeyca.github.io/smart-booking-blog/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-06-15T18:10:05+00:00</updated><id>https://alexeyca.github.io/smart-booking-blog/feed.xml</id><title type="html">GoChatTravel Blog</title><subtitle>Book hotels, flights, tours, and trains directly in WhatsApp, Telegram,  Facebook Messenger, WeChat, or Instagram. No apps, no registrations, no redirects. AI-powered travel booking with instant confirmation.</subtitle><author><name>GoChatTravel Team</name></author><entry><title type="html">Under the Hood — Rethinking the Cart for Chat-Based Booking</title><link href="https://alexeyca.github.io/smart-booking-blog/engineering/architecture/2026/05/13/under-the-hood-refactoring-the-engine.html" rel="alternate" type="text/html" title="Under the Hood — Rethinking the Cart for Chat-Based Booking" /><published>2026-05-13T00:00:00+00:00</published><updated>2026-05-13T00:00:00+00:00</updated><id>https://alexeyca.github.io/smart-booking-blog/engineering/architecture/2026/05/13/under-the-hood-refactoring-the-engine</id><content type="html" xml:base="https://alexeyca.github.io/smart-booking-blog/engineering/architecture/2026/05/13/under-the-hood-refactoring-the-engine.html"><![CDATA[<p><strong>TL;DR:</strong> We’re building GoChatTravel, a chat-first booking platform. This post explains how we redesigned our cart engine to handle complex multi-item travel bookings using event sourcing in Rust.</p>

<p>We’ve been building travel technology for a long time. The booking domain — hotels, flights, tours, trains — is well-understood. The supply side, the pricing models, the fulfillment pipelines — all solved problems.</p>

<p>What we got wrong was the cart.</p>

<h2 id="the-assumption">The Assumption</h2>

<p>When we built the initial engine, we made a simplifying assumption: one cart holds one booking per vertical. One hotel. One flight. One tour. If the user picks a different hotel, it replaces the first one.</p>

<p>For a simple use case — “I need a hotel in Barcelona for the weekend” — this works fine.</p>

<p>But real travel doesn’t work like that.</p>

<h2 id="how-real-travel-works">How Real Travel Works</h2>

<p>A destination wedding in Santorini. The couple books the main suite. Parents need a room on the same floor. Groomsmen book three rooms in the same hotel, different dates, each paying their own card. One conversation, one hotel, ten rooms, five different payment methods.</p>

<p>A business traveler books a multi-city itinerary: London → Berlin → Paris. Three hotels, three train segments, all in one conversation. They need to modify the Berlin leg without touching the rest.</p>

<p>A group of four friends plans a weekend together. They share the same hotel, but each pays for their own room. Different names, different payment details, one conversation.</p>

<p>None of these scenarios fit the “one item per vertical” model.</p>

<p><img src="https://www.gochattravel.com/assets/images/white-label/white-label-chatcart.png.jpg" alt="Chat cart interface showing multiple booking options" /></p>

<h2 id="what-broke">What Broke</h2>

<p>The cart couldn’t represent:</p>

<ul>
  <li><strong>Multiple hotels in one trip</strong> — adding a second hotel replaced the first. No way to hold both</li>
  <li><strong>Multi-room bookings with different guests</strong> — one offer, multiple rooms, each with its own guest details and payment</li>
  <li><strong>Multi-city itineraries</strong> — three hotels across three cities, all part of one trip, each independently modifiable</li>
  <li><strong>Split payments</strong> — same booking, different people paying for different parts</li>
  <li><strong>Parallel exploration</strong> — user wants to compare two hotels side by side before deciding, not replace one with the other</li>
</ul>

<p>Each of these is a standard travel booking scenario. Each one required the cart to hold multiple items of the same vertical simultaneously. Our cart couldn’t.</p>

<p>Patching it meant adding special-case logic for every combination: multi-hotel, multi-flight, multi-room, split-pay, multi-city. The state machine grew exponentially. Each new scenario doubled the edge cases.</p>

<h2 id="the-decision">The Decision</h2>

<p>We could have kept patching. Add flags, add arrays, add special handlers. Ship features one by one.</p>

<p>But we’ve built systems like this before. The “one item” assumption is load-bearing — it shapes the entire data model, the state machine, the fulfillment pipeline. You can’t patch it. You have to redesign.</p>

<p>So we paused new vertical development and started refactoring the cart from the ground up.</p>

<h2 id="what-were-building">What We’re Building</h2>

<p><strong>Unlimited Cart Items</strong>
The cart no longer assumes one item per vertical. A single conversation can hold three hotels, two flights, and a tour — all coexisting, all independently modifiable.</p>

<p><strong>Item Grouping</strong>
Cart items can be grouped into trips. All items in a trip share context (dates, destination) but remain independently bookable. User can confirm the hotel without confirming the flight.</p>

<p><strong>Per-Item Guest and Payment</strong>
Each cart item carries its own guest details and payment information. Same hotel, two rooms, different guests, different cards — no problem.</p>

<p><strong>Event-Sourced State</strong>
Every cart mutation is an event. Add a hotel — event. Remove it — event. Change dates — event. This means full history, full recoverability, and the ability to branch (what if we change the Berlin leg?).</p>

<p><strong>Parallel Exploration</strong>
Users can hold multiple options for the same leg of a trip without committing. Compare two hotels side by side, then confirm one. The other drops out cleanly.</p>

<h2 id="why-this-matters">Why This Matters</h2>

<p>The cart is the heart of any booking system. If the cart can’t represent real travel scenarios, the system fails — not because the supply side is broken, but because the data model can’t express what the user needs.</p>

<p>For chat-based booking, this is even more critical. The conversation is the interface to the cart. If the cart model is too rigid, the conversation becomes a frustrating game of “the bot replaced my hotel again.”</p>

<h2 id="what-this-means-for-users">What This Means for Users</h2>

<p>Hotel booking continues as normal. The refactor is happening under the hood.</p>

<p>When it ships, the cart will support everything real travel requires: multiple rooms, multi-city trips, group bookings with split payments, parallel exploration. All within the same conversation.</p>

<h2 id="lessons-learned">Lessons Learned</h2>

<ol>
  <li><strong>Don’t assume simplicity.</strong> “One item per vertical” felt like a reasonable starting point. It wasn’t. Real travel is multi-everything.</li>
  <li><strong>The cart model is the product.</strong> Not the AI, not the chat interface. The cart. That’s where the complexity lives and where the user experience is won or lost.</li>
  <li><strong>Refactor before it hurts.</strong> Every week we spent patching the old cart made the redesign harder. We caught it early.</li>
  <li><strong>Event sourcing fits booking.</strong> Travel plans change constantly. An event-sourced cart makes mutations cheap, reversible, and auditable.</li>
</ol>

<h2 id="whats-next">What’s Next</h2>

<p>We’ll share more as the new cart architecture ships. And once it’s solid, the next booking verticals roll out fast.</p>

<h2 id="want-to-see-it-in-action">Want to see it in action?</h2>

<p>This architecture powers <strong>GoChatTravel</strong> — a chat-first travel booking platform that lets travelers book hotels, flights, and tours through natural conversations in WhatsApp, Telegram, and other messengers.</p>

<p><strong>For travelers:</strong> Try booking your next trip via chat → <a href="https://www.gochattravel.com/#platforms">gochattravel.com</a></p>

<p><strong>For travel businesses (TMCs, hotels, airlines):</strong> We offer a white-label version of this engine. Deploy your own branded chat commerce platform in days, not months. <a href="https://www.gochattravel.com/white-label.html">Learn more →</a></p>

<p>Questions about the architecture? <a href="mailto:info@gochattravel.com">info@gochattravel.com</a></p>]]></content><author><name>GoChatTravel Team</name></author><category term="engineering" /><category term="architecture" /><category term="refactoring" /><category term="cart architecture" /><category term="conversational commerce" /><category term="state management" /><category term="event sourcing" /><category term="booking engine" /><category term="chat UX" /><category term="multi-city" /><summary type="html"><![CDATA[Our booking cart only allowed one item per vertical. Real travel means multi-city trips, multiple rooms, group bookings. Here's why we paused to refactor the core.]]></summary></entry><entry><title type="html">Hotel Booking Is Live — Right in Your Chat</title><link href="https://alexeyca.github.io/smart-booking-blog/product/hotels/2026/04/13/hotel-booking-is-live.html" rel="alternate" type="text/html" title="Hotel Booking Is Live — Right in Your Chat" /><published>2026-04-13T00:00:00+00:00</published><updated>2026-04-13T00:00:00+00:00</updated><id>https://alexeyca.github.io/smart-booking-blog/product/hotels/2026/04/13/hotel-booking-is-live</id><content type="html" xml:base="https://alexeyca.github.io/smart-booking-blog/product/hotels/2026/04/13/hotel-booking-is-live.html"><![CDATA[<p>👉 <strong><a href="https://www.gochattravel.com">Try hotel booking → gochattravel.com</a></strong></p>

<p>Hotel booking is now live on GoChatTravel.</p>

<h2 id="pricing">Pricing</h2>

<p>We work directly with hotels and distributors through a wholesale pricing model. No expensive apps to maintain, no legacy platform overhead — the cost savings go to the user.</p>

<h2 id="how-it-works">How It Works</h2>

<p>Open your favorite messenger and describe what you need:</p>

<ul>
  <li><em>“Beach resort in Bali under $150”</em></li>
  <li><em>“Boutique hotel in Tokyo near Shibuya”</em></li>
  <li><em>“Family-friendly with a pool, close to the airport”</em></li>
</ul>

<p>The AI parses natural language, searches available options, and presents relevant matches. No scrolling through hundreds of listings.</p>

<video autoplay="" muted="" loop="" playsinline="" style="max-width:100%;border-radius:8px;">
  <source src="https://www.gochattravel.com/assets/images/hero-video.mp4" type="video/mp4" />
</video>

<h2 id="book-on-the-go">Book on the Go</h2>

<p>You’re in a taxi heading to the airport. You need a hotel for tonight. Open WhatsApp, type what you need, book it in three taps. Done before you reach the terminal.</p>

<h2 id="multi-room-bookings">Multi-Room Bookings</h2>

<p>Book multiple rooms in a single reservation — each with its own guest details. One conversation, one hotel, as many rooms as you need.</p>

<p>Just tell the bot: <em>“Two rooms, one king and one twin, different guests”</em> — each room can have a different name on the booking.</p>

<h2 id="cancellation">Cancellation</h2>

<p>Most hotel bookings offer <strong>free cancellation</strong>. When a booking has a cancellation fee, the bot tells you before you confirm. No hidden penalties.</p>

<h2 id="secure-payments-via-stripe">Secure Payments via Stripe</h2>

<p>All payments go through <strong>Stripe</strong>. Your credit card details never touch our servers — the transaction happens directly between you and Stripe, end-to-end encrypted.</p>

<h2 id="247-support">24/7 Support</h2>

<p>Our support team, powered by <strong>Nuitee</strong>, is available around the clock. Hotel issues are rare in our experience — but when they happen, help is one message away in the same chat.</p>

<h2 id="90-languages">90+ Languages</h2>

<p>The chat supports <strong>over 90 languages</strong>. Hotel descriptions are currently available in 7 major languages, with more being added.</p>

<h2 id="why-chat">Why Chat?</h2>

<p>You already plan trips through messages: <em>“Know any good hotels in Lisbon?”</em> You ask colleagues for recommendations. You text your partner about dates and budgets.</p>

<p>Booking travel is already a conversation. We just removed the step where you leave the chat to fill out a form on a website.</p>

<h2 id="try-it">Try It</h2>

<table>
  <thead>
    <tr>
      <th>WhatsApp</th>
      <th>Telegram</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><img src="https://www.gochattravel.com/assets/images/qr-whatsapp.png" alt="WhatsApp QR" /></td>
      <td><img src="https://www.gochattravel.com/assets/images/qr-telegram.png" alt="Telegram QR" /></td>
    </tr>
  </tbody>
</table>

<p>👉 <a href="https://www.gochattravel.com/#platforms"><strong>See all platforms →</strong></a></p>

<h2 id="feedback">Feedback</h2>

<p>Found a bug? Have a feature idea? <a href="mailto:info@gochattravel.com">info@gochattravel.com</a> — we read every message.</p>]]></content><author><name>GoChatTravel Team</name></author><category term="product" /><category term="hotels" /><category term="hotel booking" /><category term="chat booking" /><category term="ai search" /><category term="24/7 support" /><category term="stripe payments" /><category term="free cancellation" /><category term="multilingual" /><category term="travel" /><summary type="html"><![CDATA[Book hotels through WhatsApp, Telegram, or Instagram. AI-powered search in 90+ languages, 24/7 support, secure Stripe payments, and free cancellation on most bookings.]]></summary></entry><entry><title type="html">Booking Travel Through Chat — Introducing GoChatTravel</title><link href="https://alexeyca.github.io/smart-booking-blog/news/product/2026/03/13/welcome-to-gochattravel.html" rel="alternate" type="text/html" title="Booking Travel Through Chat — Introducing GoChatTravel" /><published>2026-03-13T00:00:00+00:00</published><updated>2026-03-13T00:00:00+00:00</updated><id>https://alexeyca.github.io/smart-booking-blog/news/product/2026/03/13/welcome-to-gochattravel</id><content type="html" xml:base="https://alexeyca.github.io/smart-booking-blog/news/product/2026/03/13/welcome-to-gochattravel.html"><![CDATA[<p>👉 <strong><a href="https://www.gochattravel.com">Try it now → gochattravel.com</a></strong></p>

<p>We’re launching our blog. Here we’ll share product updates, engineering decisions, and travel tips from building a chat-first booking platform.</p>

<h2 id="the-problem">The Problem</h2>

<p>Booking travel means: download an app, create an account, fill out forms, compare tabs, get redirected. Every trip starts with friction.</p>

<h2 id="what-we-built">What We Built</h2>

<p>A platform that lets you book hotels, flights, tours, and trains <strong>directly in your messaging app</strong> — WhatsApp, Telegram, Facebook Messenger, WeChat, or Instagram.</p>

<p>No new apps. No registrations. No redirects. Search, payment, and confirmation all happen inside the chat.</p>

<h2 id="how-it-works">How It Works</h2>

<ol>
  <li>Open your favorite messenger</li>
  <li>Describe where you want to go (or just say “warm getaway with ocean views”)</li>
  <li>Get options, pick one, pay — all in the same conversation</li>
  <li>Instant confirmation in the chat thread</li>
</ol>

<h2 id="available-platforms">Available Platforms</h2>

<table>
  <thead>
    <tr>
      <th>WhatsApp</th>
      <th>Facebook Messenger</th>
      <th>Telegram</th>
      <th>Instagram</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><img src="https://www.gochattravel.com/assets/images/qr-whatsapp.png" alt="WhatsApp QR" /></td>
      <td><img src="https://www.gochattravel.com/assets/images/qr-facebook.png" alt="Facebook QR" /></td>
      <td><img src="https://www.gochattravel.com/assets/images/qr-telegram.png" alt="Telegram QR" /></td>
      <td><img src="https://www.gochattravel.com/assets/images/qr-instagram.png" alt="Instagram QR" /></td>
    </tr>
  </tbody>
</table>

<p>👉 <a href="https://www.gochattravel.com/#platforms"><strong>See all platforms →</strong></a></p>

<h2 id="how-its-built">How It’s Built</h2>

<ul>
  <li><strong>Deterministic Rust engine</strong> — all business logic, pricing, and fulfillment run on a modular monolith built in Rust. LLM handles only the conversational interface</li>
  <li><strong>Stripe payments</strong> — credit card data goes directly between the user and Stripe. We never see card details</li>
  <li><strong>Wholesale pricing</strong> — we work with hotels and distributors directly, without the overhead of legacy OTA marketing budgets</li>
</ul>

<h2 id="whats-next">What’s Next</h2>

<ul>
  <li>Product updates and new features</li>
  <li>Travel destination guides</li>
  <li>Engineering deep-dives</li>
  <li>Behind-the-scenes of building a chat-first travel platform</li>
</ul>

<table>
  <tbody>
    <tr>
      <td>👉 <strong><a href="https://www.gochattravel.com">Try it → gochattravel.com</a></strong></td>
      <td>Questions? <a href="mailto:info@gochattravel.com">info@gochattravel.com</a></td>
    </tr>
  </tbody>
</table>]]></content><author><name>GoChatTravel Team</name></author><category term="news" /><category term="product" /><category term="travel booking" /><category term="chat commerce" /><category term="ai travel" /><category term="whatsapp booking" /><category term="telegram travel" /><category term="hotel booking" /><category term="flight booking" /><summary type="html"><![CDATA[Book hotels, flights, tours, and trains directly in WhatsApp, Telegram, or Instagram. No apps, no registrations. AI-powered travel booking with instant confirmation.]]></summary></entry></feed>