Absensi TAM
The HR back office behind TAM's attendance app, with face verification, approval chains and monthly recaps.
Every check-in from the mobile app ends up here. The web system is both the app's API and the dashboard that admins, supervisors and managers use to run the workforce day to day.
Each check-in is verified three ways: the photo itself, a face match from a separate FastAPI and DeepFace service, and a GPS radius check against the registered office locations. A check-in outside the radius isn't simply rejected. It goes into an approval queue, so legitimate off-site work still counts.
Results
−30%
Manual HR processing time
2 days → 1 hr
To close the monthly attendance recap
~30
Employees in the first rollout
One definition of "late"
Lateness is defined in exactly one place in the codebase and shared by live check-ins and admin corrections alike. It reads each employee's weekly work schedule together with national holidays and collective leave days, so the number on the monthly recap matches what the employee saw when they clocked in.
For the people running it
Two-stage approvals
Leave, overtime and field assignments go from Supervisor to Manager, and every decision is written to an approval log.
Employee master data
Bulk CSV import, account requests, and full profiles with documents, payroll and training records.
Recaps that open cleanly
Daily and monthly recaps export to Excel and CSV, with the separator and encoding Indonesian-locale Excel expects.
Offices on a map
Each office location and its check-in radius is managed on a Leaflet map.
Built with
- Next.js 16
- Prisma
- PostgreSQL
- Clerk
- FastAPI
- DeepFace
- Leaflet
- ExcelJS
- Sharp
Related Work

