Pinboard archive / Engineering case study
Context
I built CinemaVerse with a three-person team as a full cinema booking platform and .NET backend case study.
- Working context
- I worked in a three-person team with one other backend contributor and one frontend contributor.
- My role
- I worked on backend architecture, booking and ticketing, and payments; backend responsibility was shared.
- Who was affected
- Cinema customers, administrators, and check-in staff.
Problem brief
Problem
Cinema customers need a connected path from discovery to seat selection, payment, and ticket validation while staff manage branches, halls, showtimes, and bookings.
Operating constraints
- 01Seat and booking state changes over time and crosses payment boundaries.
- 02Customer, administrator, and check-in capabilities require different authorization.
- 03Pending bookings and reminders require work outside request-response traffic.
Evidence / reasoning
Problem Research
Booking lifecycle
I traced movie discovery, showtime selection, seat availability, payment, QR ticket generation, and check-in as one booking state chain.
Scheduled state changes
I identified unpaid-booking expiry and upcoming-show reminders as time-driven work that cannot depend on an active request.
Administrative conflicts
I mapped showtime duration, hall occupancy, and branch schedules to find where administrative edits could create conflicts.
Implementation files
How I Solved It
Discovery to seat selection
I connected movie discovery and showtimes to an interactive seat grid for the booking handoff.
Payment and ticketing
I connected booking state to Stripe payment, QR ticket generation, email, and check-in lookup.
Cinema administration
I supported administration for movies, media, branches, halls, seat layouts, showtimes, users, bookings, payments, and tickets.
System map
System Architecture
Diagnostic notes
Challenges
Time-bound pending bookings
Unpaid reservations cannot remain active indefinitely.
Authentication abuse
Login, refresh, and logout endpoints are sensitive public entry points.
Showtime conflicts
Overlapping schedules can assign one hall to incompatible showtimes.
Payment-to-ticket handoff
A booking should not produce a valid QR ticket before payment state is accepted.
Quality gates
Technical Safeguards
Security
I protected system boundaries with JWT access and refresh tokens, BCrypt, RBAC, rate limiting, and admin-only job visibility.
Reliability
I persisted scheduled expiry and reminder jobs through Hangfire in SQL Server and used Serilog for structured application logging.
Contract clarity
I kept standard success, pagination, and problem-detail response shapes consistent across 94 API endpoints.
Ownership record
My Contribution
I worked on backend architecture, booking and ticketing, and payments. I shared backend responsibility with a teammate.
- Working context
- I worked in a three-person team with one other backend contributor and one frontend contributor.
- My role
- I worked on backend architecture, booking and ticketing, and payments; backend responsibility was shared.
Closing record
Outcome
Our team delivered customer discovery, seat booking, payment, QR tickets, check-in, and broad cinema administration across Angular and .NET.
Our project includes the full stack, 94 API endpoints, customer and admin workflows, authentication, and background jobs.
I present my backend scope as shared; the next technical work is automated coverage for seat concurrency, payment, expiry, and ticket issuance.
My next technical step is to add automated concurrency and integration tests for seat holds, payment confirmation, booking expiry, and ticket issuance.
Curated project media
Related Evidence





