Student Projects

Attendance scanner for a campus organisation

Built by Nathaniel Sarmiento

A QR scanner and roster I built in third year so our org would stop passing a sign-in sheet around a room of ninety people.

  • Builder email verified

    Verification

Project screenshot
Type
Personal
Category
Student Projects
Published
Jul 25, 2026
Updated
Jul 25, 2026
Built withReactJavaScriptFirebaseNetlify
TopicsEdtechCommunity

About this project

What I built & why

Our organisation ran weekly sessions with attendance tied to membership standing, and we tracked it on a printed sheet that took fifteen minutes to circulate and was routinely wrong — people signed for friends, and the sheet got transcribed into a spreadsheet by whoever was least busy. I was the secretary that year, so it was my problem specifically. I built it over a semester break, which is the only reason it exists rather than being complained about for another year.

The problem

It solves attendance for a small organisation with no budget and no IT support. Each member has a QR code on their phone or printed on their ID sleeve; an officer scans at the door, and the roster updates live so you can see who is missing without counting. The point is not the scanning, it is that the record is correct at the moment the session starts rather than three days later. It was for about a hundred and forty members and five officers.

What I owned

All of it. The scanner app, the roster view the officers watch, the member code generation, and the export the adviser wanted in a spreadsheet. I also did the handover — a written guide and two sessions with the incoming officers — which turned out to matter more than any of the code, since I graduated and it kept running.

Technical & product decisions

I generated codes that encode a member id and a signature rather than just an id, so somebody could not make their friend's code by guessing a number. That was the one security thing I got right and it was because a friend immediately tried to break the first version by editing a URL. I built the scanner as a web page rather than an installed app so any officer's phone works with no setup, which cost me some camera reliability on older phones and was still the right trade. I also kept the whole thing on a free tier with the roster as a single table, because the next secretary was not going to pay a bill.

Hardest challenge

The room has poor reception and ninety people arriving in a ten-minute window, which broke my first version completely — the scanner queued requests, the roster lagged behind, and officers started scanning people twice because the screen had not updated. I rebuilt it so the scan is confirmed locally and immediately, with the upload queued and reconciled after, and added a visible pending count so officers can see the queue draining. It was my first real encounter with the idea that the interface should not wait for the network, which I have used in every project since.

Result & impact

Sign-in went from about fifteen minutes to under three, and the transcription step disappeared. Attendance disputes at the end of that semester went from a handful to none, mostly because the record was made at the door with a witness. It has been running for three years and two secretaries after me, which I find more satisfying than anything else on this profile. The adviser still gets her spreadsheet.

Who else worked on it

The four other officers that year tested it under real conditions, which is the only way that queueing bug was ever going to surface. A friend from the computer science org tried to break it and found the code-guessing problem before anyone else did.