Zareen Travel
A travel agency platform: tours, overbooking-proof reservations, payments, refunds and financial reports
Overview
A travel agency management system: tour catalogue, clients, reservations, payments, refunds, expenses and reporting. Five roles from superadmin to tourist, each with its own slice of the data. There is a public catalogue, a tourist’s personal account and the agency’s working dashboard. All amounts are stored as whole UZS integers, and the single source of financial truth is the database — not a spreadsheet on someone’s laptop.
The problem
The core pain of a travel agency is selling more seats than the bus actually has. When two managers confirm a booking for the last seat at the same moment, a plain “how many are free” check doesn’t save you: both see one, and both sell it.
The solution
Confirming a reservation locks the tour row in the database, so two parallel transactions physically cannot exceed the seat count — there is a dedicated concurrency test for it. Requests and the waitlist don’t hold seats, and cancelling frees one immediately. Security is done properly: Argon2, refresh-token rotation with reuse detection, database-backed login rate limiting, and CSP headers on nginx. XLSX and PDF reports are computed per role — a manager never sees expenses or profit.
The outcome
- 80 API endpoints and 22 tables: tours, departures, reservations, payments, refunds, expenses, audit
- Overbooking is impossible: PostgreSQL row locking backed by a concurrency test
- Three interface languages with per-locale date and currency formatting — Russian, Uzbek, English
- A roll-call screen: mark attendance at departure and close the tour automatically
Next project
Saralash
A KPI system: real-time employee performance tracking, tasks from the head of department, schedules and discipline