02 / FULL-STACK PROJECT
CineBook.
One seat. One winning request.
A movie and event booking experience with temporary seat holds, fair waitlists, live inventory, and recovery when things go wrong.
01 / THE CONTEXT
The problem worth solving.
A seat grid is straightforward until customers compete for one seat, abandon checkout, or accept a waitlist offer at the same moment.
The approach
Model inventory per show, enforce ownership and expiry at the database boundary, and connect the interface to live invalidation and recoverable background work.
02 / UNDER THE HOOD
How the pieces connect.
03 / ENGINEERING JUDGMENT
The decisions behind the build.
Make the database authoritative
Atomic state conditions validate the seat, hold owner and expiry before confirmation. UI state is not the booking lock.
Recover abandoned work
Expiry is enforced during reads and by a background worker, with durable jobs for interrupted processing.
Keep the queue fair
A cancellation can become a single-use offer to the next eligible queue member instead of a free-for-all.
04 / WHAT TO INSPECT
Evidence, and its boundaries.
- Customer, organiser and administrator workflows
- Committed screenshots across light and dark themes
- Documented concurrency and recovery behavior
The demo uses sample events and no real payment gateway. Its documented deployment does not currently send external email. SQLite is available for local/test use.
Inspect the repository05 / THE TAKEAWAY
What I’m taking forward.
The happy path is only one part of a booking system. Ownership, expiry, cancellation and retries deserve the same design attention.
KEEP EXPLORING