The Problem
EPU sold bus tickets the way most regional operators still do — over the counter, by phone, through scattered agents — with no single source of truth for seat inventory or trip schedules. Double-booked seats, manual reconciliation, and zero visibility for passengers on where their bus was. They needed a digital ticketing platform that ordinary passengers could use on a phone, that operators could trust for seat inventory, and that would hold up under real booking volume — not a prototype.
Constraints
- Indonesian passengers and operators — UI and flows must be in Bahasa
- Seat inventory must stay consistent under concurrent bookings
- Must work on low-end Android phones and patchy mobile data
- Has to integrate with the operator's existing trip and route data
- Single-team delivery on a tight commercial timeline
Our Approach
We built the passenger-facing platform on Next.js 15 and React with Tailwind v4 and shadcn/ui — a fast, mobile-first booking flow covering registration and login, trip search, seat selection with a live seat map, checkout, and a personal trip view. i18n was wired in from day one so the whole product speaks Bahasa. Seat inventory and trip scheduling are backed by a structured booking model so concurrent purchases reconcile against a single source of truth instead of a spreadsheet. The codebase was kept clean and modular so it could become the data backbone for Phase 2 — the digital manifest that the AI passenger-counting pipeline now reconciles against.
Gallery
Outcome
- Passenger ticketing platform live in production across the EPU fleet
- Single seat-inventory source of truth — no more double-booked seats
- Mobile-first booking flow usable on low-end Android over patchy data
- Digital manifest became the data backbone for Phase 2 AI reconciliation
- Earned the client trust that led to the Phase 2 fleet-monitoring award
Why this matters
Ticketing is unglamorous, but it is where trust is built. We shipped a platform that real passengers use to buy real seats, kept the data clean enough to build on, and were rewarded with the harder Phase 2 work — AI fleet monitoring — without a competitive pitch. That is the pattern we want: ship something honest in Phase 1, earn the Phase 2 that actually moves the operations budget.
