Capstone · Full-Stack Development
Capstone: CampusPass, a college event booking app
The brief
Build CampusPass, the app your college fest committee wishes it had: events with a seat limit and a waiting list. Design the database, count seats with a view, book or waitlist in one statement, write the rules (cancel and promote, search, validation, sessions and permissions), build the page, then test it in CI and put it online.
Why it matters
This is the capstone the course brief describes: login, ownership, validation, search, an extra feature (the waiting list), tests and a live HTTPS link. College events, coaching batches, gyms, doctors' slots and cinema shows all need "limited seats, then a queue", so it is a project people will actually use and one you can demo in any interview.
Skills you practise
- schema with UNIQUE and CHECK
- a view with conditional counts
- INSERT … SELECT with CASE
- waiting-list promotion
- search by text and dates
- server-side validation
- session cookies and permissions
- rendering and filtering in the DOM
- CI with node --test
- deploying with HTTPS
You need
- Node.js 20 or newer and Git
- A GitHub account (for the repository and GitHub Actions)
- A free hosting account (Render, Railway, Fly.io or similar) and a free PostgreSQL database
What you will have at the end
CampusPass: a live, tested event booking app with a waiting list, its GitHub repository (green CI), a README and a demo video for your portfolio.
How it is marked (rubric, 100 points)
| Works end to endEvery check passes, and the live app books, waitlists, cancels and promotes correctly. | 30 |
|---|---|
| Data and rulesConstraints in the schema, seats from one view, decisions in single statements, a fair waiting list. | 20 |
| SecuritySessions with expiry, ownership checks on every record, validation on the server, no secrets in the code. | 20 |
| QualityRules kept separate from the page, tests in CI, accessible cards and live search. | 15 |
| PresentationREADME, screenshots, live link and a clear demo you can give in an interview. | 15 |
0/11 steps done
Step 1 of 11
Events and bookings tables
db.sql creates events (id, title, venue, starts_at, capacity, created_by) and bookings (id, event_id, user_id, status, created_at), every column but id NOT NULL, with foreign keys, capacity above 0, status confirmed / waitlisted / cancelled, and one booking per user per event (UNIQUE).
The users table is already there. An event belongs to the organiser who created it (created_by), and a booking joins one user to one event. UNIQUE (event_id, user_id) means a double tap on "Book" can never create two bookings: the database refuses the second, whatever bug the code has.
The sample data under your tables runs as soon as they exist.
Run shows what your code prints. Check runs the step's tests. Ctrl+Enter checks too.