Turnstile Attendance screenshot

My college diploma project: a web app that works out which students actually attended class, from three piles of data the college already had and had never connected. ISPO is the vocational institute inside the Polytechnic University, ten turnstiles across four buildings. The topic came from my class teacher in November 2022, which spared me having to invent one.

What it does

The student contingent arrived as one spreadsheet, 42 groups and 1091 students. The timetable arrived as a saved web page, 353 group-weeks of it. The passages arrived as seventeen Word documents, one per student: a name, then every time that person walked through a door, which entrance, when, in or out.

Passages are paired into enter and exit intervals and intersected with the lesson grid, five lessons a day at 90 minutes each. Under 75 minutes of presence counts as a skipped lesson. A curator sees their groups, one row per student, and a calendar where every day is colored by what the college actually had on it: both a timetable and passages, one of the two, or nothing at all. Most days are nothing at all. Any day opens into its passage list, a per-lesson table, and a timeline of green presence bars and red gaps. Subjects can be excluded from the math, and inverting that selection gives you attendance for one subject alone. Take PE out and everyone’s percentage stops being ruined by the one class nobody shows up to. A curator can also tick a student out of the group average entirely, which was in the requirements.

The pass office released passages for seventeen students, and I was one of them. The figure in the paper that proves the import works is my own November: in at 10:29 on the Monday, out at 12:13, back at 12:33, gone by 17:17. The app gave me 79 percent for that week, and 54 for the Wednesday I turned up at quarter past two.

Honest notes

The code took seventeen days: first commit 24 May 2023, last one 9 June, defense on the 20th. The document took four months. Word logged sixty hours with the file open, ninety-two saves, and about ten thousand words across 63 pages of actual content.

The paper describes careful rules for messy passage data, merging two entries no more than two minutes apart, throwing away a day that opens with an exit. The code implements all of it as try { pair with the previous passage } catch {}, empty catch. It documents a second lesson grid for first-years, whose second lesson splits in half around lunch; there is one grid. The token check was written, signs against the secret "ADMIN_KEY", and is commented out in every single router. One route takes a path parameter named :amogus. The calendar is hardcoded to 2022. The interval math is the one part with tests, eight of them, on the only file the coverage report has ever heard of.

Then there is the unlabeled checkbox above the group table. Seventeen people out of 1091 had any data at all, so most rows honestly read 0%. Ticking it invents a plausible number of attended minutes for everyone the turnstiles had nothing on, and five of the row numbers are hardcoded to stay at zero, because a group where every single student turned up would not have been believable. It was there for the live demo at the defense.

Half the paper is not about the app at all. One chapter proves the college would save 323,832 rubles a year by installing it, from an invented salary and an invented 700 percent gain in productivity. Another works out how many fluorescent fixtures a programmer’s office needs and arrives at the two already in the ceiling. The paperwork, unlike the code, was written with ChatGPT, including the review of my own work, which they read out loud at the defense. Everyone that day got top marks except one girl. A week later two hundred of us sat in a hot room listening to our own names, and in an hour it was over.