Web App2025Live

Employee Attendance System

Anti-fraud employee attendance and management web application for a multi-branch business, with GPS geofencing, on-device face recognition using local models

Employee Attendance System interface
Client
Confidential Multi-Branch Business
Roles

Product Design

Full-Stack Development

Biometric Workflow

Tech stack
ReactTypeScriptSupabaseTailwind CSSBunVercel

The outcome

Eliminated proxy check-ins across branches by requiring both physical presence (GPS) and biometric identity (face) before logging attendance.

01

Attendance Needed Evidence, Not Trust

A login proved that someone knew a password; it did not prove an employee was at the branch. The check-in flow was therefore designed around evidence: the employee must be within 100 metres of the assigned location and verify their identity before an attendance record can be written.

Employee Attendance System interface
02

Two Weak Signals Beat One Confident One

GPS confirms location but can be spoofed, while biometrics confirm identity but say nothing about where the person is. Requiring both makes proxy attendance impractical: the employee's face or registered device must be physically present at the correct branch. Neither signal is treated as magic, which is generally a healthy relationship to browser APIs.

03

Face Matching Stayed on the Device

Face detection and descriptor comparison run in the browser with face-api.js and TensorFlow.js; no live face image is sent to the server. This traded some client-side model weight for better privacy and zero server-side inference cost, matching the client's discomfort with centralised facial data while keeping the web deployment simple.

Employee Attendance System interface
04

Managers Needed a Scan, Not a Query

The admin view uses a monthly attendance grid, branch filters, drill-down details, map links, and export rather than making managers assemble reports from raw events. Desktop gets a dense table-like overview; mobile gets a bottom sheet so the same information remains usable without horizontal scrolling. The system shipped as a web app across branches, avoiding native-app infrastructure entirely.