2024
CSIA Rock Band Community
The website for CSIA's student bands: a weekly bandroom booking system with a fair-start rule, a semester-by-semester band directory, and the bandroom equipment guidelines.
- one-hour bandroom slots every week
- 50
- slots per band in the first five minutes after booking opens
- 2
- weekly jobs run automatically by an hourly cron
- 3
- commits across three repositories since 2024
- 284
- Year
- 2024
- Timeline
- Aug 2024 – 2026
- Built with
- Django, Gunicorn, WhiteNoise, PostgreSQL, Railway
- Team
- Siwoo Kim
Overview
CSIA Rock Band Community is the website for every student band at CSIA. Its core is the bandroom booking system: bands sign in with their own account, pick one-hour practice slots for the week, and see every other band's schedule on the same page. The site also lists the bands of each semester and the rules for using the bandroom equipment. Every screen shown here uses fictional demo data.

Bandroom reservation: pick a slot on the left, see every band's week on the right

Bands grouped by semester

Bandroom equipment guidelines

Home
The Problem
Every band shares one bandroom. The schedule has to be fair to every band, has to leave out the hours when the room cannot be used, and has to be cleared and reopened every week.
How Booking Works
- The week is a grid of 50 one-hour slots, Monday to Friday from 08:00 to 18:00
- Booking opens every Sunday at 23:00 Korea time
- For the first five minutes after opening, each band can book at most two slots, so the fastest band cannot take the whole week
- After that, any free slot can be booked or cancelled from the same grid
- Administrators can block slots when the room is unavailable, with an optional reason, and a block cannot be placed on a slot that is already booked
- Every Friday the week's bookings are cleared and the next opening is set for Sunday at 23:00
What the server checks when a band books a slot
1
Signed in
Only a logged-in band account can book or cancel
2
Booking is open
An active opening time exists and has already passed
3
Slot is not blocked
Administrators have not blocked this day and hour
4
Slot is free
No other band has already booked it
5
Fair-start limit
Within five minutes of opening, the band has fewer than two bookings
6
Booked
The reservation is saved and appears in every band's schedule
The weekly cycle
| When (Korea time) | Command | What it does |
|---|---|---|
| Sunday 23:00 | open_weekly_reservations | Sets the new opening time so booking starts for the week |
| Friday 14:00 | update_reservation_settings | Clears the week's bookings, keeps blocked slots, and schedules the next Sunday opening |
| Friday 15:00 | reset_weekly_reservations | Removes the bookings made this week and resets the opening to Sunday 23:00 |
Architecture
System architecture
- Web: Django served by Gunicorn, with static files served by WhiteNoise
- Database: PostgreSQL on Railway, with SQLite as the local fallback
- Scheduling: a Railway cron service runs one command every hour on the hour, and that command runs whichever weekly job matches the current Korea time
- Admin tools: the Django admin and admin-only endpoints to block slots, set the opening time, and open or reset the week
Apps
Apps and their data models
| App | What it does | Models |
|---|---|---|
| Reservation (reservation) | Weekly bandroom grid, booking rules, admin blocking, and six management commands | Reservation, ReservationSetting, BlockedTimeSlot |
| Members (members) | Directory of active bands grouped by semester | Band, linked one to one with a login account |
| Login (login) | Band sign-in | None |
| Guidelines (guidelines) | Bandroom equipment and usage rules | None |
| Home (home) | Landing page | None |
| About and Events | Placeholder pages | None |
Development
The project began as a prototype in August 2024 and moved through three repositories before the current one.
Stack
Django 5.1, Gunicorn, WhiteNoise, PostgreSQL (psycopg 3), dj-database-url, Railway