Context
A passenger shipping operator selling tickets across 10+ routes, at counters and online.
Problem
Counters and the online channel sell the same seats, so one seat must never be sold twice, and national holidays multiply the load.
Approach
Model the domain
Voyages, vessels, seats, fares and passengers as one consistent model.
Booking API
Seat inventory with locking to prevent double-booking under load.
Payments
Payment integrations across 6+ Indonesian banks.
Operations tools
Manifests, check-in and daily reports for port staff.
Ready for national holidays
National holidays are the peak travel periods, so the system has to hold up exactly when demand is highest.
Outcome
The system handles around 3,000 tickets a day, with payments through 6+ Indonesian banks.
What I learned
- Model the business before the database.