Featured Project

Real-Time Attendance Management System

GPS-verified student attendance with 300+ concurrent WebSocket connections at sub-50ms sync. Automated bulk-absent processing cuts admin workload by 80%.

FastAPIWebSocketsPythonLeaflet.jsSQLAlchemyLinux VPSNginx
TL;DR

GPS-verified student attendance with 300+ concurrent WebSocket connections at sub-50ms sync. Automated bulk-absent processing cuts admin workload by 80%.

The Problem

Manual attendance in large lecture halls wastes 10+ minutes per session, is easily gamed through proxy attendance, and creates significant admin burden for processing absence records.

My Solution

A production system enabling location-verified student check-ins via GPS geofencing (50m radius). Built on FastAPI with WebSockets sustaining 300+ concurrent connections at sub-50ms synchronization across multiple workers.

Technical Architecture

Backend

FastAPI with async WebSocket handlers for real-time sync
SQLAlchemy ORM with PostgreSQL for persistent storage
JWT authentication with role-based access (admin/teacher/student)
GPS geofencing with Haversine distance calculation (50m radius)

Real-Time Layer

WebSocket connection pool manager handling 300+ concurrent users
Sub-50ms state synchronization across Gunicorn workers
Resolved multi-worker process isolation conflicts causing session state corruption

Frontend

Leaflet.js interactive maps for geofence visualization
Real-time attendance dashboard with live student count
Responsive design for mobile check-in

Key Metrics

300+ concurrent WebSocket connections sustained
Sub-50ms sync latency across workers
80% reduction in admin workload through automated bulk-absent processing
200+ daily active students

Lessons Learned

The hardest problem wasn't the GPS verification — it was Gunicorn's worker model. Each process had its own WebSocket connection pool, so state wasn't shared between workers. Users who reconnected to a different worker lost their session. I restructured the connection management layer to use shared state through Redis, which solved the session corruption issue in production.

Like what you see?

I can build systems like this for your team. Let's discuss how my skills match your engineering needs.