Case Study
The booking workflow assumed hotels were passive. We built a marketplace that made them active.
- Company
- Cerbex
- Group travel · B2B marketplace
- My role
- Product Lead
- Strategy · Design · Build
- Timeline
- 2025
- In production
- Stack
- Python · Next.js
- Postgres · Figma · Cursor · Claude Code

01 · Business Context
A two-sided marketplace where only one side had a real interface.
Cerbex connects travel brokers — tour operators and destination management companies — with hotels for group bookings. The workflow is more complex than a simple booking: brokers manage multi-city itineraries for groups of travelers, source hotels for each destination, and run a competitive bidding process where multiple hotels offer rates before a winner is selected.
The broker-facing system had been built and refined over time. It handled trip creation, hotel search, request management, and the booking lifecycle. But the hotel side of the marketplace was almost entirely absent — hotels received email notifications, responded through fragmented channels, and had no unified view of their pipeline, their offers, or their confirmed bookings.
The brief when I came on board: build the hotel-facing product from the ground up, and modernize the broker side with AI-native tooling. The scope also included a visual and UX overhaul of the existing hotel request landing page — the lightweight surface hotels use to submit offers without logging into the full UI — bringing it into line with the new booking detail flows and keeping the design language consistent across every surface a hotel might touch. What emerged from the full body of work was something larger than either brief: a structural rethinking of how hotels and brokers relate to each other.


02 · The Insight
The request-response model treats hotels as passive. An open market inverts that.
The classic workflow in group hotel booking is sequential: a broker selects specific hotels they know and trust, sends a request for rates, and waits for offers. Hotels sit idle until they're contacted. If a broker doesn't know your hotel, you don't exist in their pipeline.
The insight that came out of iterative conversations between the CEO and his clients was that this constraint was artificial. Brokers don't just want their preferred hotels — they want the best hotel for a specific group at a specific price point. And hotels have empty rooms for dates that match groups they've never heard of. The information existed. The market didn't.
The marketplace concept: hotels can see every group coming to their area — not just the ones they were directly requested for — and choose to make an offer on any of them. Brokers get more competition; hotels get more opportunity. The system becomes active on both sides.
The structural shift
In the old model, the broker controls visibility. In the market model, geography controls visibility. Any group landing in your city is a potential booking — whether the broker knows you or not. This isn't a feature. It's a different theory of how the market should work.

03 · Design Decisions
Density is not clutter. For professionals, it's respect.
The mental model I kept returning to was a reservations manager mid-shift: phone calls, front desk escalations, a dozen browser tabs. They don't get focused work sessions. They need to triage in thirty seconds.
That question — what decision does this person need to make in the next thirty seconds? — shaped every design choice in the Hotel Center.
Designing against form-first software
The failure mode I was consciously rejecting is what I think of as "form-first" software: every piece of information lives behind a click. You land on a booking list, see codes and dates, click through to a detail page, scroll to find the status, scroll more to find the price. The software treats data retrieval as the user's job.
The other failure mode is the opposite: executive dashboards with big KPI tiles that tell a working reservations agent nothing actionable. A card that shows check-in, check-out, group size, origin, price-per-pax, and status badge in a single glance is not cluttered — it's complete. The manager makes a go/no-go decision without clicking anything.
Kanban as pipeline clarity, not project management
The kanban view came from asking what the manager's actual cognitive task is when they open "Your Bookings." It's not reading a list chronologically — it's understanding where things are in the pipeline. The three columns (Your Offers / Booked by Agent / Confirmed by You) map to states that require different responses. Your Offers: waiting, not your move. Booked by Agent: action required, your move. Confirmed: done. The column structure does the triage before the manager has to.
The "1 Action Required" badge on the column header was a deliberate hierarchy decision — it surfaces urgency at the column level, not just the card level. A peripheral glance tells you where to look. The Confirm button lives on the card itself, not inside a detail page, because a group waiting for hotel confirmation is a time-sensitive state and navigation adds latency to a competitive process.


A single status vocabulary across every surface
The system needed a status language that would hold from dashboard card to list badge to kanban column header to booking detail page stepper. Offered, Booked, Confirmed. The design constraint I held was that a manager who learns the vocabulary in one place understands it everywhere — no surface reinvents the language. That consistency is what makes a collection of features read as one tool.

The market page as a different interaction philosophy
The open market section inverts the hotel's usual role — from reactive to proactive. The design challenge was showing enough information for a hotel to decide whether to make an offer on a group they have no prior relationship with. Origin, group size, room split, and dates all have to be immediately legible. Budget showing as "–" is honest: it tells the hotel they're bidding without a stated ceiling, which is useful signal in its own right.

04 · AI-Native Broker Tooling
Brokers were acting as human converters between one digital artifact and another. That's the job AI should have.
The broker workflow before the AI Trip Extractor: a client — often a smaller Asian travel agent — sends a trip description in whatever format they use. An email, a PDF, a Word document, a rough paste of text. The broker opens the Cerbex itinerary builder and manually re-enters every destination, date, room split, and budget, field by field. For a five-city tour with ten room categories, that's a meaningful block of time. And most tour operators run the same trip multiple times a year, each time re-entering data that already exists in a document somewhere.
The AI Trip Extractor makes the conversion automatic. The broker uploads the client's raw document — PDF, Word, Excel, CSV, or plain text — and the system extracts the structured itinerary data and populates the builder directly. Multiple trips in a series (the same route on different departure dates) can be generated simultaneously from a single document, rather than created one by one.
Brokers reported a 10× productivity improvement on trip creation. That number comes from removing the manual conversion step entirely, not from making it faster.
The design principle
"Human converter between digital artifacts" is a precise description of work that AI should absorb entirely. The measure of success isn't speed — it's whether the person ever has to touch the conversion at all.


05 · The Conceptual Rethink
The broker thinks in requests. The hotel doesn't care about requests — only offers.
The first version of the Hotel Center exposed the booking lifecycle as brokers experience it: request → offer → booking → confirmation. This made sense from the system's perspective. It was wrong from the hotel's.
A hotel reservations manager doesn't track groups they rejected. The broker cares about the request stage — they sent it, they want visibility. The hotel only wants to track groups they've engaged with: the ones they made an offer on. Surfacing "requested but no offer made" groups in the hotel's pipeline added noise that belonged to the broker's mental model, not the hotel's.
The marketplace concept made this problem more acute and also resolved it. Once hotels could proactively make offers on any group in their area, the distinction between "a broker requested us specifically" and "we found this group on the market" became secondary to the shared question: did we make an offer? Requests from brokers and open-market groups are architecturally distinct in the backend — but in the hotel UI, they surface as the same entity: a group you can offer on, or have offered on.
I didn't erase the distinction entirely. Hotels still get value from knowing when a broker specifically requested them — it signals a prior relationship or a strong fit. So the distinction surfaces in three specific places: a dedicated "Requests" section on the dashboard (separate from the market feed), a "Requested" label on market-page items where relevant, and badge alerts that mirror the email notifications hotels already receive. The distinction is present but it's not the primary organizing logic.
This required conceptual, design, and coding work to reconcile. The backend stays clean — requests and market groups remain distinct entities. The hotel UI presents them as a unified surface. Getting that seam right, without leaking the backend model into the UI or losing information the hotel cares about, was the most technically and conceptually demanding part of the project.
Key decision
Don't design the hotel UI from the broker's mental model. The same event — a group looking for a hotel — means something different depending on which side of the marketplace you're on.

06 · Building AI-Native
The whole project was built the way I believe product development should work now.
I was product lead, designer, and co-developer on this project across a Python/Postgres/Next.js stack — spanning strategy and roadmap decisions through Figma designs to production code. The development process used Cursor and Claude Code throughout, with the majority of implementation AI-generated under my direction and review.
This isn't a footnote. The ability to move from design decision to working interface to backend integration within the same focused session — without handing off between roles — fundamentally changes the quality of the decisions. When you're the person who will implement it, the design is more honest. You don't spec things that are elegant on paper but painful to build. And when a design decision turns out to have backend implications, you can resolve them in the same thought, not across a two-day feedback cycle.
The AI Trip Extractor, the marketplace concept, the conceptual rethink of the request/offer model — each of these required rapid iteration between product thinking, design, and code. That loop being tight enough to run in real time is what made the project possible at this scope for a team this small.
How this changes product work
The coordination overhead between strategy, design, and engineering isn't just a speed problem. It's a fidelity problem. Every handoff is a translation, and translations lose information. When the same person holds all three, the original intent arrives in the shipped product intact. That's not always possible — but when it is, the product shows it.
07 · Status & Reflection
In production with early hotels. Here's what I'd do differently.
The Hotel Center is live: dashboard, bookings pipeline, market, team management, offer and confirmation flows. The broker-side AI tooling — the Trip Extractor, hotel data extractor, and series trip creator — is in production. The system is currently in a limited rollout to an initial cohort of hotels, with structured feedback expected shortly.
What I'd do differently: I'd validate the hotel-side mental model earlier, before designing the full pipeline view. The insight that hotels don't track requests they didn't respond to sounds obvious in retrospect — but it only surfaced through design work on the full lifecycle. An earlier, rougher test with a single hotel reservations manager would have caught it before it was built.
I'd also invest earlier in the transition design between market and pipeline. Right now the dashboard carries both surfaces — the hotel's existing bookings and the open market feed — and they sit in separate sections. As the market grows in volume, the relative weighting of those surfaces will need to evolve. The architecture supports it; the UI will need to grow with it.
The marketplace concept is the piece I'm most satisfied with — not because it's technically sophisticated, but because it required questioning an assumption the whole industry takes for granted. Brokers choose hotels; hotels wait. The market makes that relationship genuinely bidirectional. That's worth more than any individual feature.
More case studies — XOIP AI Voice Agent & TravelBot AI Guide