Work

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.

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. 1

    Signed in

    Only a logged-in band account can book or cancel

  2. 2

    Booking is open

    An active opening time exists and has already passed

  3. 3

    Slot is not blocked

    Administrators have not blocked this day and hour

  4. 4

    Slot is free

    No other band has already booked it

  5. 5

    Fair-start limit

    Within five minutes of opening, the band has fewer than two bookings

  6. 6

    Booked

    The reservation is saved and appears in every band's schedule

The weekly cycle

When (Korea time)CommandWhat it does
Sunday 23:00open_weekly_reservationsSets the new opening time so booking starts for the week
Friday 14:00update_reservation_settingsClears the week's bookings, keeps blocked slots, and schedules the next Sunday opening
Friday 15:00reset_weekly_reservationsRemoves the bookings made this week and resets the opening to Sunday 23:00

Architecture

System architecture

Bands book and cancel through the Django and Gunicorn web service on Railway, and admins block slots or open and reset the week. The web service reads and writes PostgreSQL. A Railway cron runs run_scheduled_tasks every hour, which updates and resets bookings on Friday at 14:00 and 15:00 and opens booking on Sunday at 23:00.
The blue arrow is the weekly schedule run by the hourly cron.
  • 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

AppWhat it doesModels
Reservation (reservation)Weekly bandroom grid, booking rules, admin blocking, and six management commandsReservation, ReservationSetting, BlockedTimeSlot
Members (members)Directory of active bands grouped by semesterBand, linked one to one with a login account
Login (login)Band sign-inNone
Guidelines (guidelines)Bandroom equipment and usage rulesNone
Home (home)Landing pageNone
About and EventsPlaceholder pagesNone

Code per app (lines of Python and templates, excluding migrations)

  • Reservation2,097
  • Members449
  • Home279
  • Guidelines248
  • Login156
  • Events84
  • About74
View data
ItemValue
Reservation578 Python + 1,519 template
Members158 Python + 291 template
Home25 Python + 254 template
Guidelines26 Python + 222 template
Login40 Python + 116 template
Events24 Python + 60 template
About25 Python + 49 template

Development

The project began as a prototype in August 2024 and moved through three repositories before the current one.

Commits per repository

  • Django_rockband · Aug 20244
  • rockband · Sep – Oct 2024210
  • csia-rockband · Feb 2025 – Jun 202670
The current repository, csiatech/csia-rockband, was started in October 2026 with Railway deployment.
View data
ItemValue
Django_rockband · Aug 20244
rockband · Sep – Oct 2024210
csia-rockband · Feb 2025 – Jun 202670

Stack

Django 5.1, Gunicorn, WhiteNoise, PostgreSQL (psycopg 3), dj-database-url, Railway