Eduscan
2025 — Team of 4: design system, calendar, QR components, accessibility
A React Native attendance app. Teachers scan a student's QR code to register them present. The code only appears when the phone is on campus and it changes every 30 seconds, so screenshots are useless.
About this project
Eduscan replaces the paper attendance sheet. A student gets a short-lived QR code, but only when background location puts the phone inside the campus geofence. The code carries a profile, a timestamp and a campus and regenerates every 30 seconds, and the scanner refuses any payload older than 35 seconds, so a screenshot passed on to a friend is worthless. A duplicate check stops the same student being registered twice a day. Teachers get a live roster with search, a status filter and the option to revoke attendance if someone leaves early; students see their own history per month in a calendar, with a colour-blind mode that adds check and cross icons so red and green aren't carrying the meaning on their own.
The API layer, the presentational design system and the feature components are kept strictly apart, which paid off when replacing the whole backend with a mock one touched six files. That mock ended up doubling as a demo mode: seeded in-memory data, no configuration, and a faked scan, so the full flow fits on one phone. Database types are generated from the live Supabase schema, so a renamed column is a compile error rather than a crash. Four of us built it in roughly three weeks for a mobile and hardware course: 109 commits over 22 pull requests. I worked mainly on the design system and theming, the attendance calendar, the QR generation and scanning components, and the colour-blind mode.