2025
CSIALife
The school-wide platform CSIA students use every day for night study requests, seminar room bookings, timetables, meals, and room reservations, with more than 600 users.
- users at csialife.com
- 600+
- Django apps in the 2026–27 codebase
- 13
- background jobs scheduled every day
- 4
- processes on Railway: web, worker, and beat
- 3
- Year
- 2025
- Timeline
- 2025 – present
- Built with
- Django, Gunicorn, Celery, Redis, PostgreSQL, Google Sheets API, NEIS Open API, Railway
- Team
- Siwoo Kim (leader and developer)
Overview
CSIALife is the school-wide platform students at CheongShim International Academy use for night study requests, seminar room bookings, timetables, meals, and room reservations. It runs at csialife.com with more than 600 users. The production source code stays private because it handles real student records, so every screen shown here uses fictional demo data.

Weekly night study requests

Seminar room booking

Timetable matched to each student ID

Weekly meals from the NEIS API

Music room reservations
The Problem
Every evening, students declare what they will do in each night study period: self-study, an after-school course, an outing, or a seminar room session. Teachers used to collect these by hand every day and type them into spreadsheets. CSIALife replaced that process, but as features piled up in the first version, the request logic developed a structural bug that left ghost records in the data teachers relied on.
Role
- Leader and developer: started as a co-developer alongside senior students and now leads development and maintenance
- Rebuilt the night study request logic after the ghost record bug
- Started a new codebase for the 2026–27 school year, the version running at csialife.com today
- Runs the system on Railway as three processes (web, Celery worker, Celery beat) on PostgreSQL and Redis
- Added daily snapshots of the teachers' sheet history so past records survive even after Google merges old versions
Architecture
System architecture
- Web: Django served by Gunicorn handles every page, form, and the admin
- Database: PostgreSQL stores requests, bookings, settings, and the daily sheet snapshots
- Background jobs: Celery beat publishes four scheduled jobs to Redis, and the Celery worker runs them
- Integrations: the Google Sheets API keeps the teachers' rosters in sync, and the NEIS Open API supplies the school meal menu
A Day in CSIALife
What runs when, on a school day
View data
| Time | What happens |
|---|---|
| 08:00–13:00 | Seminar booking open |
| 17:30–21:00 | Today's night study column locked |
| 00:10 | Sheet snapshot |
| 00:30 | Seminar reset |
| 13:00 | Seminar sync |
| 17:30 | Night study sync |
Scheduled jobs (Celery beat)
| Job | When | What it does |
|---|---|---|
| Night study sync | 17:30 | Re-syncs every active request for the day into the teachers' sheet |
| Seminar sync | 13:00 | Writes the day's seminar room bookings to the sheet |
| Sheet history snapshot | 00:10 | Saves the previous day's sheet version to the database |
| Seminar reset | 00:30 | Clears past bookings so the next day starts clean |
Modules
The 2026–27 codebase is split into 13 Django apps, one per service.
Apps and their data models
| App | What it does | Models |
|---|---|---|
| Night study (yaja) | Weekly night study requests by period, synced to the teachers' sheet | NightStudyApplication, NightStudySettings, GoogleSheetSync, SheetSnapshot, SheetSnapshotEntry |
| Seminar rooms (seminar) | Room availability and group bookings | SeminarRoomAvailability, SeminarBooking |
| Timetable (timetable) | Weekly class timetable matched to each student ID, with electives | SubjectOption, StudentElectiveChoice |
| Meals (meal) | Weekly menu from the NEIS Open API | None, read live from the API |
| Music room (music_room) | Weekly music room reservations | MusicRoomBooking, MusicRoomSettings, MusicRoomSlotAvailability |
| Labs (lab) | Lab bookings with capacity, equipment, and status | Lab, LabBooking |
| Special rooms (special_room) | Special room reservations within opening hours | SpecialRoom, SpecialRoomReservation, SpecialRoomSettings |
| Exams (exams) | Exam timetable shown on the home screen ahead of each exam period | Exam, ExamSlot |
| Guidelines (guideline) | Guideline files uploaded by administrators | GuidelineFile |
| Home (home) | Dashboard with night study and reservation status | None |
| Login (login) | Sign-in and stale-form handling | None |
| Block Blast (blockblast) | Browser puzzle game with a scoreboard | BlockBlastScore, BlockBlastBan |
| Gomoku (gomoku) | Online gomoku with game records, challenges, and a match queue | GomokuProfile, GomokuGame, GomokuMove, GomokuChallenge, GomokuQueueEntry |
Engineering Details
- Night study lock: today's column cannot be edited from 17:30 to 21:00, so the roster teachers receive at 17:30 stays fixed; every other day can be changed at any time
- Ghost record fix: at 17:30 the worker resets every active request for the day to unsynced and writes all of them to the teachers' sheet again
- Sheet history: at 00:10 the previous day's final sheet version is saved to the database, before Google merges old versions together
- Seminar rooms: bookings open on weekdays from 08:00 to 13:00 for up to six students; at 13:00 the day's bookings go to the sheet, and at 00:30 the previous day is cleared so the 08:00 opening starts clean
- Meals: NEIS caps date-range queries at five rows without an API key, which drops lunch and dinner, so the service asks for one day at a time and splits snack items out of dinner
- Music room: each week's reservations sync to their own worksheet tab, and slots already marked unavailable for class are never overwritten
- Stale forms: when a form expires because the user signed in or out in another tab, the page asks them to try again instead of showing a bare 403 error
Development
Commits per week to the 2026–27 codebase
- Sep 14
- Sep 21
- Sep 28
- Oct 5
- Oct 12
- Oct 19
View data
| Item | Value |
|---|---|
| Sep 14 | 104 |
| Sep 21 | 9 |
| Sep 28 | 35 |
| Oct 5 | 7 |
| Oct 12 | 0 |
| Oct 19 | 4 |
Stack
Django, Gunicorn, Celery, Redis, PostgreSQL, Google Sheets API, NEIS Open API, Railway