Skip to main content
Back to projects

SIMPEG - TPJ

An attendance app for a water utility company. The challenge wasn't building a clock-in system — it was making sure people couldn't fake their location or game the hours.

FlutterGetXLaravelMySQL
SIMPEG - TPJ

Overview

Perumdam Tirta Pandalungan Jember needed a way to track employee attendance that couldn't be cheated. Their old system was paper-based. People would sign in late, leave early, or have someone else sign for them. Management had no real-time visibility into who was actually working.

They wanted a mobile app that would record attendance based on GPS location and time. Employees would clock in from specific locations during designated hours. The data would feed into their existing SIMPEG system to calculate salaries, performance metrics, and benefits.

I built SIMPEG TPJ as a location-based attendance tracker. Employees open the app, hit clock-in, and the system verifies they're at the right place at the right time. If they're outside the geofence or outside working hours, the app won't let them clock in. Simple constraint, hard to bypass.

The app had to be reliable because payroll depends on it. It had to be secure because people will try to game any system that affects their pay. And it had to integrate with their legacy SIMPEG backend without breaking existing workflows.

Client

Perumdam Tirta Pandalungan Jember is a regional water utility company in East Java. They manage water distribution, billing, and infrastructure maintenance for the Jember area.

Like most government-linked organizations, they have strict accountability requirements. Attendance records aren't just for HR — they're audited. They needed a system that would hold up under scrutiny and reduce disputes about who worked when.

Features

Location-based clock-in enforces geofencing. Each office or work site has defined coordinates and a radius. Employees can only clock in if they're physically within that zone. The app checks GPS accuracy to prevent spoofing.

Time-based validation ensures employees clock in during designated hours. Early or late attempts are flagged. The system logs every attempt — successful or not — so managers can see patterns.

Attendance history shows each employee's clock-in and clock-out records with timestamps and locations. Employees can review their own data. Managers can export reports for payroll processing.

The app syncs with the backend SIMPEG system. Attendance data flows into salary calculations, performance evaluations, and benefit eligibility. The integration was critical — any mismatch would cause payroll errors.

Tech Stack

Flutter for the mobile app with GetX for state management. Geolocator package for GPS tracking with accuracy checks. Laravel backend with MySQL for data storage and API endpoints.

JWT authentication with role-based access. Employees see their own data. Managers see team data. Admins see everything. The backend validates every request to prevent unauthorized access.

Background location tracking was tricky. I had to balance accuracy with battery life. Too frequent checks drain the battery. Too infrequent checks allow location spoofing. Ended up with adaptive polling based on movement.

My Role

Full-stack developer. I built the Flutter app, designed the API, and integrated with the existing SIMPEG backend. I also worked with HR to define attendance rules — what counts as on-time, how to handle exceptions, what to do with failed clock-ins.

The geofencing logic took the most iteration. Initial version was too strict — people standing near windows couldn't clock in because GPS drift put them outside the zone. I added a buffer and improved accuracy checks. Still strict enough to prevent abuse, but forgiving enough for real-world GPS behavior.

I also handled edge cases. What if someone's phone dies mid-shift? What if GPS is unavailable? What if they're working remotely? Built in manual override flows for supervisors, but with audit trails so every exception is logged.

The app has been live for over a year. Perumdam uses it daily for attendance tracking. They've told me it's reduced disputes and made payroll processing more accurate. That's the kind of boring reliability that actually matters.