Cinema Booking Platform

Team project · 2026

A cinema booking system built by a three-person team, covering session discovery, seat selection, real-time seat locking, booking flows, administration, and technical documentation.

Cinema booking platform frontend screenshot.
Cinema booking platform frontend screenshot.

Overview

The Cinema Booking Platform was built by a three-person team as a complete reservation system rather than a standalone frontend exercise.

The application covers movie and session discovery, seat selection and locking, booking, authentication, loyalty functionality, cinema administration, and technical documentation.

My role

I led the three-person team and was primarily responsible for the frontend application.

I designed and implemented the client architecture, booking workflows, API integration, real-time synchronization, administrative interfaces, authentication behavior, and the frontend quality/tooling setup.

System context

  • primary .NET 8 REST API
  • separate NestJS loyalty service
  • React frontend
  • real-time SignalR seat state
  • administrative frontend scope

Frontend architecture

The frontend is built with React 19 and TypeScript and follows Feature-Sliced Design.

Domain functionality is isolated into feature modules that own their API clients, hooks, models, and UI. Route-level pages compose these features without absorbing their business logic.

Representative feature areas include booking, loyalty, and admin.

Public and administrative routes are lazy-loaded, with administrative access isolated behind a dedicated route guard.

Real-time booking

Seat selection combines REST commands with SignalR events to keep multiple clients synchronized in real time.

When a seat is selected, the client requests a lock through the REST API. A session-scoped SignalR connection listens for seat lock and unlock events from other users. Incoming events update the TanStack Query cache directly instead of forcing a complete refetch.

If another user locks a seat that is still selected locally, the conflicting selection is removed automatically and the user is notified.

select seat
    ↓
POST /seats/lock
    ↓
SignalR SeatLocked / SeatUnlocked
    ↓
TanStack Query cache update
    ↓
local conflict resolution

Service interoperability

The frontend communicates with two backend domains: the primary .NET 8 REST API and a separate NestJS loyalty service.

Network access is centralized through Axios. Interceptors attach bearer tokens, handle token refresh, and retry rate-limited requests.

Booking and loyalty concerns meet during checkout, where loyalty-point and upgrade options become part of the booking payload while final orchestration remains on the backend.

Administration

The administrative application provides CRUD workflows for cinema operations including halls, pricing, sessions, and loyalty management.

Mutations are integrated with stable TanStack Query keys so administrative writes are reflected immediately without introducing separate client-side copies of server state.

Documentation

Technical documentation was maintained alongside the implementation as a separate project.

It covers system architecture, database structure, local development, contribution guidance, and REST API reference for the cinema backend.

Architecture

  • Database Schema
  • System Overview

Developer Guides

  • Contribution
  • Local Setup

REST API Reference

  • Accounts
  • Authentication
  • Genres
  • Halls
  • Movies
  • Orders
  • Pricing
  • Seats
  • Sessions
  • Tickets
  • and related backend resources

Technical decisions

Feature-Sliced Design

Domain functionality is isolated into feature areas that own their API access, state hooks, models, and UI.

TanStack Query as server-state authority

Server state remains centralized in TanStack Query, avoiding unnecessary duplicate global state for data already owned by backend services.

REST + SignalR synchronization

REST handles commands such as seat locking, while SignalR delivers real-time state changes to active clients.

Centralized HTTP / authentication infrastructure

An Axios instance centralizes bearer-token injection, refresh handling, and retry behavior for rate-limited requests.