← All posts
Case StudyCustom SoftwareTravel

TWKMY Holidays: Replacing a Travel Agency's Spreadsheet with a Booking and Payment Ledger

By Shamsuddin Salleh, Founder & CEO

TWKMY Holidays: Replacing a Travel Agency's Spreadsheet with a Booking and Payment Ledger

TWKMY Holidays Sdn. Bhd. is a travel agency in Banting, Selangor, selling group holiday packages paid by deposit and instalments. Prigo X Technologies built its booking and payment system, app.twkmy.com: every booking has a personal link sent on WhatsApp where travellers accept the terms, pay the deposit and instalments by bank transfer, FPX or DuitNow QR, and see every receipt and the balance left — while staff record payments, send reminders, check passports and track departures from their phones.

The client

A group tour sells months before it departs. Each booking means a deposit, a schedule of instalments, a final payment 45 days before departure, passport details for every traveller, and a steady stream of WhatsApp messages in between. TWKMY ran all of this from a spreadsheet and a shared inbox, alongside a booking system that its staff found harder to keep up with than the spreadsheet it was meant to replace. Invoices and receipts were produced by hand and arrived days late, balances lived in cells that anyone could overwrite, and nothing stopped a customer travelling without having paid in full.

"A system is supposed to make your life easier. If you end up struggling to key things in and keep up with it, that is not the way to go. Let's build something that actually fits your flow."

— Shamsuddin Salleh, Prigo X, to the TWKMY team before the build

What Prigo X built

The TWKMY Holidays booking and payment system on three tablet screens: staff sign-in, the public booking and payments landing page, and the terms and conditions page

app.twkmy.com: staff sign-in, the customer landing page and the terms page.

For customers: one link, no password

  • A personal booking page. The customer service officer sends one link on WhatsApp. It opens without a password and shows the trip, days to go, what has been paid, the balance and the next payment due.
  • Terms accepted before the deposit. Each traveller reads and accepts the terms with one tap, with their name and identity number recorded and a PDF copy kept — so acceptance is proven before a ringgit changes hands.
  • Pay from the page. Deposits and instalments by FPX or DuitNow QR through CHIP, or by bank transfer with an "I have paid" slip the staff confirm. Seats are confirmed when the deposit lands.
  • Receipts, always. A receipt PDF is issued for every payment, and the balance on the page updates the moment it is recorded.

For staff: a phone-first console

  • A ledger, not a spreadsheet. Every ringgit is a dated entry against a booking. Due dates are computed by a tested rules engine: deposit on booking, the same calendar day each month, and whatever remains due 45 days before departure (configurable per trip).
  • The 15-second payment flow. Search by phone number, enter the amount and method, done — receipt generated and balance updated before the phone is put down.
  • Reminders in Bahasa Melayu. A daily scheduler finds bookings with money due, drafts the reminder with live figures, emails it, and queues the WhatsApp version for the officer to send with one tap. A reminder is never sent for a balance that has just been paid.
  • Departures. Seats counted from bookings, a manifest export for the airline, and passports collected and checked per traveller rather than in a chat group.
  • Roles and audit. Owner, customer service, operations and accounts roles see what they need; every change to a booking or payment is recorded with who made it.
  • Invoices and reports. Invoice and receipt PDFs in the agency's format, outstanding balances by departure, and collections by month.

Results

  • A receipt for every payment, the moment it is recorded. Before, invoices and receipts were produced by hand and reached customers days later.
  • Customers see their own schedule. Each traveller can open their booking page and see what is paid, what is due and when, without asking a staff member.
  • Terms accepted before the deposit, with proof. Every traveller's acceptance is recorded with a timestamp and a PDF copy.
  • Payment by FPX or DuitNow from the booking page, so money arrives against the right booking instead of as a bank transfer someone has to match by hand.
  • Staff work from their phones, with a daily queue of reminders to send and slips to confirm.

In a public post on 28 October 2026, the agency's owner wrote that she had been looking forward to having TWKMY's own app and a more systematic setup for clients and staff — "so after this, clients can see their own instalment schedule, and staff can follow up on payments more easily" — and, in reply to a customer, that "after this you can pay directly by FPX, see your own balance and automatically get an invoice". (Translated from Bahasa Melayu. Original: "Kekyah mmg looking forward untuk ada apps sendiri and system yg lebih systematic utk client and staff.. so lepas ni client boleh tgk sendiri jadual pembayaran ansuran depa, staff lebih mudah follow-up payment" and "Pasni boleh bayar direct fpx leh tgk sndiri baki and auto dpt invoice".)

What made it hard

Money that is right in a spreadsheet is right until someone edits the wrong cell. The system stores every amount in sen as integers, never as decimals, allocates invoice and receipt numbers only when a document is issued so numbers are never skipped or reused, and writes an audit entry in the same database transaction as every change. The due-date engine is pure code with no clock or database behind it, tested on hundreds of generated booking scenarios, so a month-end deposit or a leap year cannot push an instalment onto the wrong day.

Technology

Next.js 16 (PWA, mobile first) and TypeScript on the front end; FastAPI (Python 3.12) with PostgreSQL 16, SQLAlchemy and Alembic on the back end; Celery for the reminder scheduler and PDF jobs; WeasyPrint for invoices and receipts; CHIP for FPX and DuitNow payments; Caddy and Docker Compose on a VM.

Frequently asked questions

Who built the TWKMY Holidays booking system?

app.twkmy.com was built by Prigo X Technologies Sdn. Bhd., a software company in Cyberjaya, Malaysia, for TWKMY Holidays Sdn. Bhd.

How do TWKMY Holidays customers pay for their trip?

From a personal booking link sent on WhatsApp: deposit and instalments by FPX or DuitNow QR through CHIP, or by bank transfer, with a receipt for every payment and the balance shown on the same page.

Can Prigo X build a booking and instalment payment system for a travel agency?

Yes. Prigo X built the TWKMY Holidays system, which handles deposits, monthly instalments, a final payment before departure, automatic receipts, reminders and departure manifests.

Does the system send WhatsApp reminders automatically?

Reminders are drafted automatically in Bahasa Melayu with the live balance and due date, emailed, and queued for the customer service officer to send on WhatsApp with one tap, so the message comes from a person the customer knows.

How do I start a project like this with Prigo X?

Email hello@prigox.com or book a free consultation at https://prigox.com/contactus.