aeo success story

Tioman Dive Buddy AEO Success Story

June 13, 2026
Multi-Tenant SaaS · In Production

A hotel PMS built from scratch,
running as a product.

Reservations, front desk, housekeeping, folios and live OTA channel sync — one Laravel codebase serving many properties, each with its own isolated database. Built in-house because nothing off the shelf fit how independent properties actually run.

Type In-House SaaS Product
Scope Custom Web Application
Sector Hospitality · Accommodation
Availability — Property View
MAR 2026
Room
12131415161718 19202122232425
Deluxe Quad 01
Agoda
Direct
In-house
Deluxe Quad 02
Direct
Booking.com
Deluxe Quad 03
In-house
Traveloka
Deluxe Quad 04
Maintenance
Direct
Dorm — Male
Mixed OTA
Direct
Dorm — Female
In-house
Trip.com
Direct OTA Checked in Blocked
13 Modules built
7 OTA channels synced
1 Codebase, many properties
DB/tenant Isolated per property
The interface

Not a mockup.
The live platform.

Built with Livewire and Filament so the whole thing behaves like a desktop application — inline edits, instant filtering and no full-page reloads between screens.

pms.gctech.my
Hotel PMS dashboard showing room availability, bookings and channel status in the multi-tenant property management platform Open full size ↗
The problem

A room sold twice
costs more than the room.

Independent hotels and resorts run on tight, seasonal inventory. Rooms get sold through Agoda, Booking.com, Traveloka and the front desk at the same time — on spreadsheets and separate OTA extranets that have no idea the others exist.

Take a walk-in booking at the front desk and nothing closed that room on the OTAs. Someone books the same night online an hour later and you're relocating a guest who has flown in for a dive trip. It's the single most expensive failure mode in small-hotel operations, and it happens quietly.

! Before
  • Manual inventoryAvailability tracked in spreadsheets, updated by hand after each booking.
  • Separate extranetsEach OTA managed in its own portal, with no shared source of truth.
  • Direct bookings invisibleA front-desk sale never reduced availability on the channels.
  • No group viewEach property reported separately; no consolidated occupancy picture.
The core of it

One source of truth,
pushed everywhere.

Every booking — wherever it originates — writes to the PMS first. Availability then propagates out to every connected channel, so the room that just sold at the front desk closes online too.

Source of truth The PMS Laravel · MySQL
Channel manager Channex.io White-label API
Distribution
Agoda Booking.com Expedia Trip.com Traveloka Tiket.com Airbnb
The build

Thirteen modules,
one operating system for the property.

01

Reservations

Create, amend and cancel bookings with rate, occupancy and stay-date validation.

02

Front Desk

Check-in and check-out flow, room moves, walk-ins and same-day availability.

03

Tape Chart

Drag-free availability grid across rooms and dates, colour-coded by source and status.

04

Rooms & Rates

Room types, inventory counts, seasonal rate plans and per-channel pricing.

05

Channel Sync

Two-way availability and rate push to every connected OTA via the channel manager.

06

Housekeeping

Room status board, cleaning assignments and turnover tracking against departures.

07

Guest Profiles

Guest history, contact records, repeat-stay recognition and notes across properties.

08

Folio & Billing

Room charges, extras, tourism tax, deposits and split folios per guest.

09

Payments

Payment capture and reconciliation against each folio and booking source.

10

Reporting

Occupancy, revenue, source mix and arrival/departure manifests by date range.

11

Roles & Access

Granular permissions so front desk, housekeeping and management each see their own scope.

12

Multi-Property

Tenant provisioning with a separate database per property under one deployment.

13

Configuration

Tax rules, policies, room mapping and per-property settings without redeployment.

Under the hood

Built to be maintained,
not just shipped.

Application

  • Laravel11
  • PHP8.3
  • Livewire3
  • Filament3

Data

  • MySQL8.4
  • Rediscache & queue
  • TenancyDB per property

Infrastructure

  • VPSContabo SG
  • OPcacheproduction tuned
  • Channel APIChannex.io

Hosting sits in Singapore for latency to Malaysian properties and the regional OTAs. Each property gets its own database, so one client's data never touches another's — and a new property can be provisioned without forking the codebase.

Got a process no off-the-shelf tool fits?

That's usually the point where a custom web application pays for itself. Tell us how your operation actually runs and we'll scope what it would take to build around it.

(03) 2935 9999 [email protected]