Case study

BRTC: replacing cash bus tickets with Android POS across a national fleet

Sunmi POS terminals, batch ticket sync, a NestJS backend and a multi-tenant React admin for every depot.

In short

The Bangladesh Road Transport Corporation runs public bus services across the country. Manual cash ticketing made tickets and revenue hard to monitor. As full-stack lead, Saidul delivered an Android POS app on Sunmi V2 and V3 terminals across the fleet, a NestJS backend with batch ticket sync, and a React admin where each depot sees only its own data.

Client
BRTC, Bangladesh
Role
Full-stack Lead
Sector
Public transport
Devices
Sunmi V2 and V3 POS
Stack
NestJS, React, Android, MongoDB

Public transport · Bangladesh

BRTC
brtc.gov.bd ↗

Full-stack Lead

Fares recorded digitally instead of in cash, depot by depot.

Context

BRTC is the national public transport authority operating bus services across Bangladesh. Manual ticketing and cash collection led to revenue loss and gave little view of ridership, routes or revenue.

Constraints
  • Paper tickets and cash that were hard to monitor
  • Many routes, depots and administrative units
  • Ticket data had to stay consistent across every device and route
Key engineering decisions
  • An Android POS app runs on Sunmi V2 and V3 terminals across the bus fleet
  • Batch processing syncs tickets so data stays consistent across devices and routes
  • A NestJS backend handles ticket processing, with real-time updates over Socket.IO
  • Multi-tenant design isolates data for each route, depot and administrative unit
  • A React admin covers fleet, route scheduling, staff and reporting
Results
POSticketing on Sunmi terminals across the fleet
Digitalfares recorded instead of cash
Per depoteach sees only its own data
Simplified BRTC ticketing flow: Sunmi POS terminals issue tickets, batch sync sends them to the NestJS backend and MongoDB, and each depot sees its own data in the React admin.Sunmi POSAndroid appon each busBatch synctickets fromevery deviceNestJS APItenant isolationreal-time updatesMongoDBtickets, routesfleet and staffReact admineach depot seesits own data
Simplified BRTC ticketing flow: Sunmi POS terminals issue tickets, batch sync sends them to the NestJS backend and MongoDB, and each depot sees its own data in the React admin.
AndroidNestJSReactMongoDBSocket.IODigitalOcean

Lessons for your project

What carries over to other systems

  • Sync in batchesBatched ticket sync keeps records consistent across a fleet of terminals.
  • Isolate tenants from day oneWhen each depot sees only its own data, access rules stay simple as more depots join.
  • Replace the cash step firstRecording each fare on a terminal gives the back office numbers it can actually check.

Questions

Common questions

Anything else is easier to answer on a short call.

Which POS hardware did the system use?

An Android POS app ran on Sunmi V2 and V3 terminals deployed across the bus fleet.

How does multi-tenant ticketing work for depots?

Routes, depots and administrative units are separated in the data model, so each depot sees only its own tickets and numbers, while the admin covers fleet, route and staff management.

Can you build a ticketing or fleet system for us?

Yes. It starts with a 1–2 week discovery and architecture sprint, priced at $1,000 to $2,000, that maps your devices, routes and reporting needs.

Tell us what you need to build or scale.

Engagements start with a 1–2 week discovery sprint, $1,000 to $2,000. Email