BookMyMovie — Cinema Ticketing
2026 · Full-stack · Laravel + React · Booking system
Pick your seat, watch the trailer, and never share it with a stranger.
BookMyMovie sells cinema seats across Karachi, Lahore, Islamabad and Rawalpindi. Moviegoers watch trailers, pick seats on a live map or from inside a 3D model of the hall, mix adult and child tickets, add snacks, pay online or at the counter, and get a signed QR e-ticket that still opens with no signal. Staff scan tickets, refund bookings, issue gift cards and run films, showtimes, prices and reports from a role-based back office.

- 56
- database tables
- 49
- screens
- 0
- seats sold twice
- 100
- Lighthouse a11y · SEO
Started as my Aptech DISM project and rebuilt as a single-page app: Laravel 12 and React 19 joined by Inertia 2, on a MySQL schema of 56 tables and 9 reporting views. It ships row-tier pricing, 10-minute seat holds, waitlists, split bills, loyalty points, gift cards, web push, Apple and Google Wallet passes, a full Urdu right-to-left interface, dark and light themes, and Lighthouse 100 for accessibility, best practices, SEO and agentic browsing on every public page.
- 01
A seat can never be sold twice: row locks in one fixed order, a unique key MySQL itself enforces on live tickets, idempotent checkout, and bookings whose status moves by compare-and-set so nothing is ever refunded twice.
- 02
Built for the phone in a dark lobby: QR e-tickets saved offline by a service worker, wallet passes, trailers that only autoplay on fast connections, and no sideways scroll from 320 px up, checked by script.
- 03
A back office for three roles — owner, manager and box office — with authenticator-app two-step sign-in, a ticket scanner, one-step refunds, member and device bans, revenue and occupancy reports, and a full audit log.
Screens · BookMyMovie
Inside the build.
Moviegoers
Home — a silent trailer carousel with the featured filmReserve this week’s harvest online, pay the farmer at the stall.
