Skip to content
Back to projects

Academic Operations

Attendance Management System

Teacher-facing attendance tracking with automated WhatsApp reporting to parents.

Deployed — 2025Solo build — end to end
ReactNode.jsMongoDBWhatsApp API

Overview

Problem

Teachers recorded attendance on paper or in disconnected spreadsheets, and parents only found out about absences if a teacher happened to follow up individually — which didn't happen consistently.

Solution

A teacher dashboard for marking daily attendance that automatically sends a WhatsApp report to parents, so communication happens by default instead of depending on someone remembering to send it.

Architecture

Client

React teacher dashboard for daily class attendance entry.

API

Node.js/Express backend handling attendance records and report triggers.

Messaging

WhatsApp Business API sending automated attendance reports to parents.

Data

MongoDB storing attendance records per class, per day, with historical reporting.

  • Marking attendance for a class and triggering the parent report are decoupled — a report queue processes sends asynchronously so a slow WhatsApp API call never blocks the teacher's UI.
  • Reports are generated from the same attendance record teachers see on screen, so there's no separate 'reporting' data path that could drift from what was actually marked.

Feature Breakdown

  • Daily attendance entry per class, built for speed during a live classroom session
  • Automatic WhatsApp report to parents on marked absence
  • Historical attendance reporting per student and per class

Implementation Detail

Async report dispatch after attendance is saved
async function markAttendance(classId: string, entries: AttendanceEntry[]) {
  await db.attendance.insertMany(entries);
  const absentees = entries.filter((e) => e.status === "absent");
  reportQueue.enqueue(absentees.map((e) => ({ studentId: e.studentId, classId })));
  return { saved: entries.length };
}

Challenges & Solutions

Attendance marking needed to be fast enough to not disrupt a live classroom — teachers wouldn't adopt a slow tool.

Built a minimal, keyboard-friendly marking UI where a full class can be marked in a handful of taps, with sends happening asynchronously after submission.

WhatsApp API calls are not instant, and blocking the teacher's save action on delivery would make the tool feel unreliable.

Decoupled marking from sending via an async report queue, so attendance saves immediately and messages go out in the background.

Results

  • Parents get an absence notification the same day by default — previously it depended entirely on whether a teacher remembered to follow up.
  • A term's worth of attendance is now one queryable record instead of a stack of paper registers nobody wanted to dig back through.
  • Teachers adopted it because marking a class takes seconds, not minutes — the async send meant speed didn't have to trade off against reliability.

Lessons Learned

  • Adoption hinged on the marking flow being fast, not on the automation being clever — the WhatsApp piece was the easy half; the classroom-speed UI was the half that determined whether teachers actually used it.

Gallery

Screenshots to be added.