• Next.js
  • TypeScript
  • PostgreSQL
  • Stripe

Bus ticket booking

A seat map per coach, counter and phone sales against one inventory, and a manifest the driver can carry with no signal.

A seat is chosen from a map of the actual coach, held while payment completes, and released again if it does not. That is the whole problem in one sentence: a seat sold twice is an argument at the roadside, and no refund policy repairs it.

Features

  • A seat map per coach layout, with a timed hold during checkout
  • Routes, schedules and fares managed per operator
  • Counter sales and phone sales drawing on one inventory
  • Printed and digital tickets carrying a scannable code
  • A passenger manifest downloaded before departure and reconciled on arrival
  • Cancellations and refunds inside a policy window the operator sets
  • Boarding checked by scan, working with no connection at the stand
  • Occupancy and revenue reporting per route, per departure and per agent

Departure points often have no usable connection, so offline is treated as the normal case rather than the failure case.