This repository was archived by the owner on Oct 25, 2026. It is now read-only.
Repository navigation
Architecture
Syed Ahmer Shah edited this page Oct 25, 2026
·
2 revisions
BookMyMovie is a Laravel monolith that renders React pages through Inertia: navigation never reloads the page, and there is no separate API to keep in sync.
flowchart LR
subgraph Browser
R[React 19 pages<br/>Inertia client]
SW[Service worker<br/>offline tickets + media cache]
end
subgraph Laravel
MW[Middleware<br/>CSP · rate limits · bans · admin roles]
C[Controllers]
S[Support services<br/>BookingLifecycle · Seo · MovieMedia · Notify]
Q[(Queue jobs<br/>mail · waitlist · push)]
end
subgraph Storage
DB[(MySQL<br/>tables + views)]
CA[(Cache store<br/>values + atomic locks)]
FS[/public media<br/>WebP · WebM · MP4/]
end
R -- "XHR (X-Inertia)" --> MW --> C --> S
S --> DB
S --> CA
S --> Q
R --> FS
SW --> FS
| Layer | Tools |
|---|---|
| Backend | PHP 8.2+, Laravel 12, Eloquent, Inertia server adapter, Ziggy |
| Frontend | React 19, TypeScript (strict), Tailwind CSS 4, Motion, Lenis, Three.js with @react-three/fiber |
| Data | MySQL 8 / MariaDB 10.4+: tables, 9 reporting views, foreign keys, unique guards |
| Cache, queue, sessions | Laravel cache (database locally, Redis in production), database queue |
app/Http/Controllers/ Public, movie, cinema, account, auth, payment, ticket and admin controllers
app/Http/Middleware/ Security headers, abuse shield, bans, admin roles
app/Jobs/ Waitlist alerts (unique + non-overlapping)
app/Support/ Booking lifecycle, SEO, media, wallet passes, mail, TOTP, text rules
database/migrations/ Schema, reporting views and data migrations
resources/js/pages/ Inertia pages (Home, Movies, Account, Admin, Auth, Public)
resources/js/components/ UI kit, shell (navbar, footer, Usher), trailer player, reviews, QR code
resources/js/three/ Poster ring, projector intro and the 3D cinema hall
resources/js/lang/ur.ts Urdu strings (English text is the key)
public/sw.js Service worker: offline tickets, media cache, web push
- Controllers return pages with
$this->page(component, props, seo, breadcrumbs)from the base controller, so every page gets its SEO tags and breadcrumbs the same way. - Reporting reads go through database views (
v_seat_availability,v_show_occupancy,v_daily_revenue, ...) so the seat map and dashboards are one query each. - Urdu translation uses the English text as the key; a missing string falls back to English.
The full entity-relationship diagram is in the README.
BookMyMovie · MIT licence · by Syed Ahmer Shah · Project page
Run it
How it works
Operate it
Read more