• Product Design Lead
  • Live · 5 properties
  • PMS · Channel Manager · Booking Engine

ClearHost

Designing the rules, then making sure the product kept them.

PMS, channel manager and booking engine in one system, now live with five properties on a free trial. I led design with one other designer, working with our PMs and engineers on the configuration logic where one wrong setting misprices a room on every OTA.

Product
Hotel PMS, channel manager and booking engine. Live, five properties on a free trial.
My role
Design lead with one other designer. Product decisions made jointly with our PM; built with our engineers.
The hard part
One setting cascades: room type → rate plan → restrictions → inventory → OTAs → front desk → billing.
What I did
Turned business rules into interface constraints, and questioned Channex logic instead of mirroring it.
How I validated
Tested every module end to end on desktop and mobile. Logged 129 findings across three rounds; our developers fixed every one.
Research
Owner interviews by our PMs and founders. I sat in on competitor product demos.

What I owned

Configuration & pricing logicInformation architecture & user flowsInteraction design & prototypingDesign system & UIMobile & responsiveProduct testing & design QA

The problem

Hotel operations aren't broken. They're fragmented.

Hotels rely on multiple disconnected systems: manual work, operational mistakes, lost revenue.

  • 01Disconnected systemsNo shared data.
  • 02Manual operationsOne booking. Entered multiple times.
  • 03Inventory sync issuesOne delayed update. One double booking.
  • 04Revenue leakageSmall inefficiencies. Big losses.
  • 05Every bookingan OTA brings in costs the owner a commission.

The opportunity

I started with a wall of notes, not a solution.

Our PMs and founders interviewed hotel owners; I sat in on competitor demos. Everything from both went up on one board, and the same two systems kept separating out.

Our PMs’ owner interviews and the competitor demos I sat in on kept surfacing the same two systems. A PMS runs everything inside the building: front desk, guests, housekeeping, reservations, reports. A channel manager runs distribution outside it: inventory, availability, rates, OTA, pricing. Neither talks to the other, so hotels are forced to run both. ClearHost connects them into one operating system.

Discovery & research

Understanding the industry.

Before designing anything

I sat in on competitor demos and mapped how existing platforms think.

To learn the mental model an owner is asked to adopt, and where each one gives up.

  • Sat in on competitor product demo calls
  • Watched their workflows end to end
  • Studied the Channex API documentation
  • Learned the hospitality vocabulary

Key learnings

  • Room types & rate plans

    Hotels sell room categories, each carrying multiple pricing strategies.

  • Inventory & OTA distribution

    Availability has to stay in sync across every booking channel, in real time.

  • Hotel operations

    Reservations, front desk, housekeeping and guest stays are connected, but serve different jobs.

  • Multi-property management

    Hotel groups need centralized control, alongside property-specific teams and permissions.

  • Revenue management

    Pricing, occupancy and booking source directly decide how the business performs.

From our PMs' owner interviews

Two things that shaped every screen.

  1. 01

    They didn't lack software. They were drowning in it.

    Every property already had a PMS, channel manager, spreadsheets and messaging tools. The problem was that every workflow lived somewhere different.

  2. 02

    In hospitality, simplicity survives churn.

    Staff changes constantly, so complex workflows have to be relearned again and again. Hotel software needs to make everyday work easy for whoever joins next.

How ClearHost got built

From what we found to what we shipped.

Nine artifacts, from the PMs’ findings to my testing and the live product.

How ClearHost got built, in nine artifacts: an opportunity note from the PMs’ interviews, the competitor demos I sat in on, jobs to be done synthesized with the PM, the business rules we settled before any screen, the system flow tracing each setting downstream, design-to-dev handoff, my testing of every module with 129 findings, fixing all of them with engineering, and the live product with five properties on a free trial.

Decisions between steps: Jobs to be done to Rules first, With the PM; System flow to Design → dev, Specced; Test the build to Fix with engineering, 129 findings; Fix with engineering to Live, All fixed.

How ClearHost got built · scroll →

01Opportunity

Owners jump between tools before they can see the full picture.

Source · PM interview notes
02Competitor demos
Demo calls · Channex docs

Every tool asks the owner to think like the software.

I sat in on the demo calls
03Jobs to be done
Stop double bookingsSee every channel at onceKnow today's ratesGet paid without chasing
Core need

Run the property from one place, without a steep learning curve.

Synthesized with the PM
04Rules first
Business rules, before screens
  • Dorms sell per bed
  • Derived plans need a base
  • Min stay ≤ max stay
  • No room sellable without a rate plan
Decided with the PMChecked against Channex
05System flow
Downstream
Room typeRate planPricingRestrictionsInventory

Each setting traced to where it lands

Then out to OTAs, bookings and billing
06Design → dev
Figma → build
  • Flows and states annotated
  • Edge cases specified
  • Mobile layouts
  • Build reviewed against Figma
Desktop and mobileShared with engineering
07Test the build
Module sign-off
  • Every module, end to end
  • Desktop and phones
  • 129 findings logged
Three rounds, one per module groupAnnotated screenshots
08Fix with engineering
All 129 resolved
  • Derived-plan sync
  • Checkout balance
  • Housekeeping states
Some were my design gapsSome were build bugs
09Live
Free trial

Live · 5 properties

PMS, channel manager and booking engine, every module available.

Channex certified

Defining the product

From what I saw to what we'd build.

Problem statement

India's independent hosts don't need more software. They need their software to stop fighting them, and to help them win back the guest the OTAs took.

Context set by our founders and PMs

hover to spread the decktap a card to browse
01

Not another PMS. The operating system that runs the property.

PositioningHow we say it
02

Owner-operated stays need one place to manage the whole business.

ICPWho we build for
03

PMS vendors stop at the front desk. Channel managers stop at the OTA.

BenchmarkingWho we’re up against
  • 01

    Not another PMS. The operating system that runs the property.

    PositioningHow we say it
  • 02

    Owner-operated stays need one place to manage the whole business.

    ICPWho we build for
  • 03

    PMS vendors stop at the front desk. Channel managers stop at the OTA.

    BenchmarkingWho we’re up against

Product design & decisions

Designing the rules, not just the screens.

Rate plans are where hospitality software usually asks the host to already think like the software. We decided these rules with our PM; I designed how the interface enforces them, then tested whether the shipped product actually did. An invalid configuration is hard to reach, and obvious when you are near one.

Where one setting travels

Change a room type and it reaches the guest’s bill. Every step below was designed, then tested.

  1. 01Room type01

    Dorm or private, occupancy. A room can’t be linked to a room type until it has a rate plan, so no room becomes sellable without a price.

  2. 02Rate plan02

    Standalone first, derived only once a base exists.

  3. 03Pricing03T2

    Per-person rows bounded by occupancy.

  4. 04Restrictions04T1

    Min and max stay. Stop-sell and closed-to-arrival / departure moved out of rate-plan setup into the date grid, where setting them twice was confusing inventory.

  5. 05InventoryT1

    Availability per date, capped at the real number of rooms.

  6. 06Channels

    Pushed to OTAs through Channex.

  7. 07Booking engineT2T5

    Direct bookings, coupons.

  8. 08Front desk

    Check-in, ID verification, room assignment.

  9. 09BillingT3

    Advance, cancellation policy, balance.

  10. 10HousekeepingT4

    Room status after check-out.

Who gets to change it

Every setting above lives inside a property, and every property has its own people.

  1. Organisation

    Created at sign-up, with the first property onboarded straight after.

  2. Property

    Added one at a time. Each has its own billing, configuration, settings and team.

  3. Role

    Set per property, so the same person can run one hotel and only see reports for another.

Owner
Created the organisation. Every module, across every property.
Admin
Promoted by the owner for a property, and runs it.
Manager
Only the modules an owner or admin grants: one manager on reports, another on PMS.
Front desk
PMS only: reservations, check-in and check-out, housekeeping.

Tested Module 0 testing caught an invited user who signed up directly without being told about their invite, and members who couldn’t see the organisations they belonged to. Both fixed.

ProblemDormitories ran through the same pricing workflow as private rooms.
InsightA shared dormitory is sold per bed, never per room.
SolutionPer-room pricing disables itself the moment room type becomes Dormitory.
ResultThe host only ever sees a pricing option that can actually be saved.
Room typeTry switching →
Pricing type
Private room
Per room
Per person
Dormitory
Per room
Per person
Stay rulesBooking constraints for this rate plan
Minimum stay on arrivalNights · applies on the arrival date
2
Minimum stay on arrival must be at least 1 night.
Minimum stay throughNights · applies across the stay
3
Minimum stay through must be at least 1 night.
Maximum stayNights · upper bound
1No limit
No limitSkip maximum-stay validation

The pattern, in hindsight

Correct what’s physically impossible. Flag what’s contradictory intent.

And when an option can’t apply: disable it if it’s valid elsewhere, remove it if it never is.

I didn’t start with these rules. Looking back across the decisions and the testing, they’re the lines everything falls on.

  • CorrectedA dorm can’t be sold per room, so per-room pricing switches itself off.
  • CorrectedYou can’t sell 100 of 5 rooms, so availability is capped, with a note saying why.
  • FlaggedMin-stay above max-stay is the host’s own conflicting intent, so it is flagged and never rewritten.
  • DisabledPer-room pricing stays visible for a dorm, greyed out, because it is valid for private rooms.
  • RemovedIncrease modes never apply below the primary occupancy, so those rows never offer them.

Testing & iteration

Then I checked the product kept them.

I tested every module end to end, on desktop and on phones, and wrote up what I found with annotated screenshots for engineering. Some were gaps in my own designs, others were in the build; our developers fixed every one. These are product testing rounds, not user research.

  • 129findings logged
  • 3testing rounds, one per module group
  • Allmodules, desktop and mobile
  • Module 0 · 30

    Organisation, properties, members, onboarding

  • Module 1 · 61

    Rooms & rates, inventory, taxes, booking engine, channels

  • Module 2 · 38

    Guest operations, front desk, housekeeping, room management

Not every finding was a one-line fix. Tax-set branching was built wrong: the arrows did not group taxes the way they should. I walked the developer through how tax groups branch, again, and we corrected the interaction together.

Five findings that changed the product

  1. T1Module 1 · tests Decision 04

    One stay rule, three surfaces

    Found

    Minimum stay could be set above maximum stay, max stay had no way to say “no limit”, and the help text described fields instead of what a guest would experience.

    Changed

    The rule now holds in rate plans, the per-date inventory grid and bulk update. Max stay became “No limit / Add a limit”, and the help text reads as a consequence: “Guests checking in with this rate plan must stay at least 2 nights.”

  2. T2Module 1 · tests Decision 03

    Occupancy pricing, followed end to end

    Found

    Per-person pricing offered rows that could not exist: “fewer than 1 guest” when the primary occupancy was one, and “more than n guests” when n was already the room’s adult capacity. Channex also needed restrictions per occupancy (Half Board for 1 guest, for 2 guests).

    Changed

    Impossible rows are removed, the inventory grid carries restrictions per occupancy, and the booking engine now charges what the plan says (it had been skipping the −10% for a second guest).

  3. T3Module 2

    Checkout money and the cancellation policy

    Found

    A ₹12,000 advance showed as ₹24,000 paid, leaving a balance due of −₹17,000. Separately, a checkout completed without its final confirmation.

    Changed

    Balance follows the cancellation policy: if the advance is non-refundable the balance is ₹0, otherwise the difference (₹5,000 here) is owed back. Checkout only commits on confirmation, and moving a reservation asks first.

  4. T4Module 2

    Housekeeping as a state machine

    Found

    Rooms turned Dirty at check-in instead of check-out, and a cleaning task in progress offered “Mark dirty”.

    Changed

    Adding a task sets the room Dirty (Inspecting for inspections), in-progress tasks offer “Mark clean”, and Do Not Disturb became its own room status. Urgent tasks on a DND room are allowed with a warning, not blocked.

  5. T5Module 1

    Booking engine setup: from tabs to steps

    Found

    Switching tabs in the booking-engine page editor silently lost what you had typed, Save / Discard on every tab was confusing, and publishing with empty details threw an unexplained error. Coupon fields accepted negative numbers.

    Changed

    The editor became a stepper, saving became one “Publish changes” action with a “new changes made” cue, and publish says what is missing. Coupon fields block negatives, and an empty “max uses” means unlimited.

T3, up close

Before · from my Module 2 report
ClearHost front-desk checkout panel from my testing report: total ₹7,000, advance ₹12,000, total paid ₹24,000, balance due −₹17,000.A ₹12,000 advance, counted twiceOwner appears to owe the guest ₹17,000

After · the rule it follows now

Total
₹7,000
Advance paid
₹12,000
  • Advance non-refundable under the cancellation policyBalance due ₹0
  • Advance refundableRefund ₹5,000 to the guest

Also caught

all fixed
  • Derived plans showed a link to their parent, but parent edits weren’t reaching the child plans.
  • Coupons with a minimum stay now account for a shorter search instead of failing at checkout.
  • An ID was marked verified at check-in without any verification.
  • A raw validation error (“occupancy.infants is required”) surfaced to front-desk staff.

Product tour

Three modules, one system.

The three surfaces an owner actually lives in: the PMS at the front desk, the channel manager for distribution, the booking engine for direct bookings. Scroll to move through each.

PMSReservationsHousekeeping
Channel ManagerInventoryRooms & Rates

Outcome

Live, with five properties.

The properties are on a free trial, so there are no usage numbers yet. Here is what I can verify.

  • ShippedPMS, channel manager and booking engine are live. Five properties are onboarded on a free trial, with every module available to them.
  • Prevented by designPer-room dorm pricing, derived plans with no base, impossible occupancy rows, min-stay above max-stay, and availability above real rooms can no longer be set from the interface.
  • Caught in my testing, fixedCheckout balances that ignored the cancellation policy, an ID marked verified without verification, and housekeeping status flipping at check-in.
  • Every finding fixedAll 129 findings from my three testing rounds were worked through with our developers and resolved.

Learnings

What building this changed in me.

Not tidy takeaways: the two places my thinking changed most between the first rate-plan screen and the live product.

  • I assumed the API would define how the product should work.

    While working through Channex, I found gaps and confusing logic around taxes, dormitory pricing and cancellation policies. I learned to question the integration instead of designing around it blindly.

  • I thought simplifying a workflow meant removing options.

    The dormitory pricing work changed my thinking. The better solution was to understand the underlying rules, remove unnecessary choices and make the system handle the complexity for the user.

ClearHost is live with five properties.

On a free trial today, with every module available to them.