Students Attendance Tracker (Teams)

Lebanese International School

A desktop app that turns Microsoft Teams' messy attendance exports into clean, fair records: auto-matching each participant to the roster and grading Present / Partial / Absent against the school's own rules. A real, shipping internal tool built in collaboration with VTEC for Lebanese International School (LIS).

ElectronReactJSTypeScriptTailwind CSSshadcn/uiSQLiteSupabasexlsx
Students Attendance Tracker (Teams) - Screenshot 1

Overview

Online classes run on Microsoft Teams, and after every session Teams spits out a messy attendance export: a spreadsheet full of join/leave times, odd duration formats ("1h 2m 4s"), duplicate rows for people who dropped and rejoined, and names that don't quite match the class register. Turning that raw file into a clean answer to "who actually attended, and for how long?" is tedious manual work, repeated for every class, every day. This desktop app does that reconciliation automatically: a teacher drops the Teams report onto it, and in one step it reads the file, matches each participant to the roster, adds up their real time in the meeting, and labels everyone Present / Partial / Absent against the school's own rules. It's a real, shipping internal tool built in collaboration with VTEC for Lebanese International School (LIS), complete with its branding, auto-updates, and both offline and cloud modes.

The Challenge

Teams doesn't give you attendance; it gives you a raw join/leave log, and the real world makes that log hard to trust.

  • Parsing exports that vary between files: shifting layouts, inconsistent duration formats, and multiple rows whenever someone rejoins.
  • Matching noisy participant names/emails/phones to the actual roster, with a sensible fallback when nothing lines up exactly.
  • Grading fairly from cumulative time in the meeting against thresholds the school can configure, and flagging anyone present who isn't even on the roster.
  • Serving two roles (teachers and admins) and running either fully offline or against a shared cloud database, without rebuilding the app for each mode.

How I Solved It

It's a Windows desktop app built with Electron and React, with a clean, modern UI (Tailwind + Radix components). Attendance data lives in a fast local SQLite database, but the app is built around a storage-adapter design that lets it swap to a cloud database (Supabase) without changing the rest of the app, which is exactly what powers the offline/online toggle and the one-click "push my local data to the cloud" migration.

The parser is the heart of it: it finds the participant table even though its position shifts between files, reads the meeting title/date/duration straight from the header, and merges the multiple rows Teams creates when someone rejoins. Each participant is matched to the roster by name, email or phone (admins choose which methods are active) with a fuzzy-name fallback that pairs on first-and-last-name, and each person's total minutes are scored against configurable, color-coded thresholds, global by default, with per-session overrides. Anyone in the meeting who isn't on the roster is flagged separately as an unrecognized guest. Spreadsheet reading and the rich exports use battle-tested Excel/CSV libraries, and updates ship automatically via a self-hosted electron-updater pipeline.

Key Features

  • Smart Teams parsing: handles varied duration formats, shifting layouts and rejoin duplicates, and pulls session details from the header automatically.
  • Flexible matching: by name, email or phone, with fuzzy-name fallback; admins choose which methods are active.
  • Configurable rules: define your own statuses and the minutes each requires (e.g. Absent / Partial / Present), each with its own color; global with per-session overrides.
  • Roster management: manual entry or bulk CSV/Excel import with duplicate detection.
  • Master report & rich exports: a grid of every student across every session with an automatic attendance-rate %, plus session, weekly, master and student-list spreadsheets (including a rebuilt copy of the original Teams data with statuses attached).
  • Users & roles: teachers own their classes; admins manage accounts, assign classes, and set school-wide rules, with a view grouped by teacher.
  • Offline or cloud + silent auto-updates: local SQLite ↔ shared Supabase, one-click migration, JSON backup export/import, and quiet self-hosted updates.

Results & Impact

The core value is turning a repetitive, error-prone manual reconciliation into a reliable one-click step, while giving the school consistent, auditable attendance records across all its classes. It's an internal operational tool for a school (so the win is time saved and record accuracy, not revenue) and its tight focus on Microsoft Teams exports is a strength, because it's exactly why the parsing is so robust. Under the hood: two storage backends (local SQLite ↔ cloud Supabase) behind one interface, genuinely distinct roles for teachers and admins, a focused set of screens over a compact data model, flexible matching, rich spreadsheet exports, and a self-hosted auto-update pipeline.

More Projects