Case study · Sep 2025 – Feb 2026 · Backend Developer (freelance)
Face-recognition attendance
A Flutter app on a Laravel API that verifies faces in PHP, replacing paper attendance at a village office.
- Client
- Pemerintah Desa Gedangan
- Role
- Backend Developer (freelance): backend and deployment, Sep 2025 – Feb 2026
- Team
- Two people: I built the backend and deployment, my partner built the Flutter app
- Stack
- Laravel, PHP, MySQL, Docker (PHP-FPM, Nginx with SSL), GitHub Actions
- Client app
- Flutter (partner)
- Status
- In production through February 2026
Context
Staff attendance at the village office was recorded on paper, which made recaps slow and sign-ins hard to verify. The replacement was a face-recognition attendance system, built by a two-person team as a Flutter app backed by a Laravel API.
What I built
- Designed the MySQL schema and the face enrollment and attendance endpoints, replacing manual paper recaps with instant queries for the office's 13 staff.
- Implemented face verification in PHP, using cosine similarity over MobileFaceNet embeddings with weighted scoring across official and registration photos.
- Containerized the stack with a multi-stage Docker build covering PHP-FPM, Nginx with SSL, and MySQL, set up a GitHub Actions CI/CD pipeline, and shipped it to the client's server.
- Maintained the system in production through February 2026.
Architecture
Decisions
- 01
Embeddings on the device, verification on the server in PHP
An early prototype used a separate Python (Flask) service for verification. It was dropped before production and folded into the Laravel app to keep the system simple, in one ecosystem: one codebase and one deployment.
- 02
Weighted scoring across several photos
A face is scored against the official photo and the registration photos together, instead of a single reference image.
- 03
The match threshold lives in configuration
It is kept in sync with the mobile client, because lighting and phone cameras vary in the field.
Outcome
Paper recaps were replaced by instant queries for the office's 13 staff, and I maintained the system in production through February 2026.


