Case Study

NIHub Attendance System

Multi-tenant event management platform with QR check-in, real-time dashboards, and automated reporting — built for Federal University of Technology Minna.

DeployedClient: Federal University of Technology MinnaSource Code ↗
NIHub Attendance System dashboard interface

Role & Context

Backend Software Engineer on a contract engagement with NIHUB at Federal University of Technology Minna. The engagement covered end-to-end design, development, and deployment of a multi-tenant attendance management platform serving multiple concurrent client organizations. The system was deployed to production and is actively used by event organizers and attendees.

Problem

Event organizers at Nigerian hub events relied on manual sign-in sheets to track attendance. This made real-time reporting impossible, exported data was error-prone and slow to compile, and there was no way to verify attendee check-in status without physically scanning lists. The system also needed to support multiple concurrent events with different organizers and departments — each requiring strict data isolation.

Solution

A full-stack event management platform built with FastAPI and PostgreSQL on the backend, React for the staff dashboard, and Flutter for the mobile check-in app. Each event gets a unique QR code that attendees scan to check in and out; staff see live attendance counts on a real-time dashboard.

The system supports multiple clients (departments/organizations), attendee self-service registration via department codes, email verification for attendees, and one-click spreadsheet export for event organizers.

Architecture

NIHub system architecture overview

React Staff Dashboard → FastAPI REST API → PostgreSQL → Flutter Mobile App (QR check-in)

Backend
FastAPI + Python
7 routers · 6 services
Database
PostgreSQL + Alembic
5 tables · 8 migrations

Technical Decisions

QR-based check-in

Each event generates a unique QR code containing a signed token. Mobile apps decode and verify the token locally, then send check-in requests to the API — no internet required at the venue for the scan itself.

JWT with refresh token rotation

Staff authentication uses Argon2id password hashing with short-lived access tokens (60 min) and rotating refresh tokens (30 days). If a refresh token is compromised, it's immediately invalidated — reducing the window of exposure.

PostgreSQL + Alembic migrations

Schema changes across deployments are managed with Alembic, making it safe to iterate the data model without manual migration scripts or downtime. 8 migrations tracked the evolution from initial schema to current production state.

Caddy reverse proxy

Caddy handles HTTPS termination and routes traffic to the appropriate service (API, frontend, mobile API) — single public entry point with automatic TLS certificates.

Results

5
Database tables
7
API routers
8
Migrations

Stack

FastAPIPostgreSQLAlembicReact 19ViteFlutterRiverpodDockerCaddy 2JWT (Argon2id)
← Quiz WhizPaystreamer →