Skip to content
This repository was archived by the owner on Oct 25, 2026. It is now read-only.

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
Loading

Stack

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

Where things live

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

Conventions

  • 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.

Clone this wiki locally