The problem
During exam weeks, college library reading halls fill up before 9 am, and the only system most libraries have is a paper register at the entrance or a first-come first-served scramble for chairs. Students walk across campus with no idea whether any seat is free, arguments break out over saved seats, and librarians have no record of who is sitting where. A library seat reservation web app answers this with a live, bookable map of every seat in the reading hall. Students check real-time availability from their phones, reserve a specific seat for a two-hour slot, and receive a booking token they show at the issue desk for check-in. Seats show three honest states — free, held, or occupied — and unconfirmed holds auto-release after fifteen minutes so no seat sits blocked by a no-show. Librarians see per-zone occupancy counters, active bookings, and one-click check-in, release and extend controls on a single dashboard.
The build is deliberately scoped as a pure web application: a responsive seat-map front end, a transactional booking API, and a real-time occupancy feed, with role-based access separating students from librarians. The demo configuration models 120 seats across 3 reading zones, which is representative of a mid-size college central library. Builder note from the working demo: double-booking is prevented with a single atomic check-and-set around the seat-state update — the confirm step re-reads the seat's live state and writes the hold only if it is still free, so two simultaneous taps cannot claim one seat.
The student opens the floor map, sees live free / held / occupied seats, and taps a free seat to book it.
Follow the working sequence
How it works
A student opens the floor map and sees every seat colour-coded by state: green for free, amber for held, red for occupied, with per-zone counters updating live. Tapping a free seat opens the booking form — name, roll number, date and a two-hour slot — and confirming issues a booking token such as LIB-8X4K2 with a scannable code. That confirm step runs the atomic check-and-set: the seat's current state is re-read inside one transaction and the hold is written only if it is still free, which is what makes double-booking impossible. At the desk, the librarian scans or types the token to check the student in, flipping the seat to occupied. Holds that are never checked in auto-release after fifteen minutes, freeing the seat for someone else, and every state change is pushed to all open screens within about two seconds so the map, the counters and the dashboard never disagree.
- The library's floor plan is seeded as zones and seats (demo configuration: 120 seats across 3 zones), each seat starting in the free state.
- The front end opens a server-pushed occupancy feed, so every connected screen renders the same live seat states without polling.
- A student taps a free seat and submits name, roll number, date and a 2-hour slot.
- The API re-reads the seat's state inside a single transaction and writes the hold only if it is still free — otherwise the booking is rejected with a pick-another-seat message.
- A booking token with a scannable code is issued and listed under the student's bookings as awaiting check-in.
- At the issue desk, the librarian checks the token in, moving the seat from held to occupied; walk-ins can also be seated directly.
- A scheduler releases any hold unconfirmed after 15 minutes, and librarians can release or extend bookings manually; every change is pushed live to all screens.
Tech stack:
- HTML5 · CSS3 · JavaScript (ES6) — responsive front end
- Node.js · Express — REST booking API
- SQLite · better-sqlite3 (prototype) · PostgreSQL option
- Server-Sent Events — live occupancy push
- JWT — role-based auth (student · librarian)
- QR booking tokens (qrcode library)
- node-cron — hold-expiry scheduler
- Git · npm
| Parameter | Value |
|---|---|
| Seats modeled | 120 seats across 3 zones (demo configuration) |
| Seat states | Free · Held · Occupied (3 states) |
| Hold window | 15 minutes per unconfirmed booking (configurable) |
| Booking slot length | 2 hours per slot (design target) |
| Occupancy refresh | Under 2 seconds via server push (design target) |
| Concurrent viewers | 200 simultaneous users (design target) |
| Booking token | 8-character alphanumeric code (format LIB-XXXXX) |
| Authentication | Role-based: student and librarian roles |
| Data persistence | SQLite file database (prototype); PostgreSQL option |
| Deployment | Single VPS or campus intranet server (typical) |
Project features
The three capabilities that carry this project are the live seat map, the atomic booking transaction, and the librarian dashboard. The seat map renders every seat in three reading zones with honest free, held and occupied states that update in real time as bookings, check-ins and expiries happen. The booking transaction is the engineering heart: the seat state is re-read at confirm time and the hold is written only inside a single atomic check-and-set, so two students tapping the same seat at the same instant cannot both claim it — this exact guard is implemented and exercised in the working demo, including its prefilled reservation flow. The librarian dashboard turns the same live feed into per-zone counters, an active-bookings table with check-in, release and extend actions, and a one-click CSV export for daily records.
- [Live seat map] Floor-plan view of all 3 zones with colour-coded seats (free / held / occupied), per-zone free-seat counters, and a live clock with occupancy percentage in the header.
- [Atomic seat booking] Name, roll number, date and 2-hour slot form; confirming runs an atomic check-and-set so a seat taken a second earlier is rejected with a clear message instead of double-booked.
- [Booking token + QR check-in] Every confirmed reservation issues an 8-character token (e.g. LIB-8X4K2) with a scannable code the student shows at the issue desk.
- [Librarian dashboard] Per-zone occupancy counters, overall occupancy KPI, active-holds count, and a bookings table with one-click check-in, +30-minute extend and release actions.
- [15-minute hold auto-release] Unconfirmed holds expire automatically, freeing the seat and updating every open screen — no seat stays blocked by a no-show.
- [Live activity feed] Timestamped stream of reservations, check-ins, expiries and releases so the desk always knows what just changed.
- [CSV export] One-click download of active bookings for daily desk records and reconciliation.
What is included
- Complete seat-map front end + REST booking API source code
- Seeded demo dataset (120 seats, 3 reading zones)
- Librarian dashboard with live occupancy counters and activity feed
- Booking-token and QR check-in flow
- Hold-expiry scheduler and CSV export
- Project report PDF, PPT presentation and viva Q&A document
Limitations & prerequisites
- Occupancy is event-driven (bookings + desk check-ins), not sensor-measured — a student who sits down without booking still shows as free.
- Identity is name + roll number only; there is no integration with college ID cards or payment gateways.
- Hold expiry is fixed at 15 minutes in the demo build (a single configuration value in the built-to-order version).
- The browser demo keeps state in memory — a page refresh clears bookings; the delivered backend persists everything to a database.
- QR check-in is simulated on screen; scanning at the desk needs a phone camera app, listed as future scope.
- Single-library scope; multi-branch support would need schema changes.
Frequently Asked Questions
How is this different from a library book reservation system?
Completely different problem. A book reservation system manages issue and return of titles; this project reserves study seats and shows hall occupancy. There is no catalog, no due dates and no late fees — instead there is a floor map, time slots, booking tokens, desk check-in and per-zone occupancy counters. If your library needs seats managed, this is the project; if it needs books tracked, that is a separate system.
How does the system prevent two students booking the same seat?
With an atomic check-and-set. When a student confirms, the server re-reads the seat's live state inside a single database transaction and writes the hold only if the seat is still free; the transaction fails otherwise and the student is asked to pick another seat. The working demo implements this exact guard — the confirm step re-checks state at click time — so even two simultaneous taps cannot claim one seat.
Is this project suitable for a final-year project?
Yes — for Computer Science and IT programs. It is a complete full-stack build: authentication with roles, a transactional booking API, real-time state push, a dashboard with reporting, and honest edge cases (expiry, no-shows, race conditions) to discuss in the viva. The scope is realistic for one semester and every feature maps to a clear demo moment.
Does it need cameras or seat sensors?
No. Occupancy is maintained from booking and check-in events, not hardware: a seat becomes held on reservation, occupied on desk check-in, and free on release or hold expiry. That keeps the build purely software and deployable on a single server. Sensor-based detection (PIR or camera counting) is documented as future scope for halls that want ground-truth occupancy.
How are no-shows handled?
Every unconfirmed hold carries a 15-minute expiry. If the student does not check in at the desk within that window, a scheduler releases the seat automatically and the map updates for everyone. Librarians can also release seats manually from the dashboard, and the expiry interval is a single configuration value.
Components & software requirements
- HTML5 · CSS3 · JavaScript (ES6) — responsive front end
- Node.js · Express — REST booking API
- SQLite · better-sqlite3 (prototype) · PostgreSQL option
- Server-Sent Events — live occupancy push
- JWT — role-based auth (student · librarian)
- QR booking tokens (qrcode library)
- node-cron — hold-expiry scheduler
- Git · npm
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.
Download free synopsis (PDF)
Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.