Attendance data feeds payroll, which means an attendance app is a financial system with a friendly interface. It has to work on a construction site with no signal, resist an employee punching in from home, and produce a record that survives a dispute months later. ELIVTECH built that app in React Native against the existing HR platform, treating every punch as an evidenced, immutable entry rather than a row that can be quietly amended.
The client's HR and payroll platform served administrators well and had no usable mobile surface. Employees marked attendance on shared terminals, submitted leave on paper or by email, and waited for managers who could only approve at a desk. Field and shift staff were the worst served and the most numerous. ELIVTECH delivered a React Native application covering attendance, leave, payslip access and approvals, with geo-fenced punch capture that works offline, an evidence model that makes each entry defensible, and an approval flow that reaches managers wherever they are. The app extends the existing platform through a versioned API rather than duplicating any part of it.
At a glance
The challenge
A workforce that is mostly away from a desk, served by a platform that assumed everyone was at one.
Attendance tied to a fixed terminal
Staff marked attendance on shared devices at fixed locations. Field workers travelling directly to a site had no way to record a start time, so their attendance was entered later by a supervisor from memory. The data that fed payroll was frequently a reconstruction rather than a record.
Leave requested and approved by email
Leave requests travelled by email and were approved in replies. Balances were checked manually against a spreadsheet, approvals were lost in inboxes, and an employee could not see the current state of a request without asking the person they had sent it to.
Sites without reliable connectivity
Many work locations have poor or no mobile coverage. Any attendance mechanism requiring a live connection would fail precisely for the field staff it was intended to serve, and a punch that fails is worse than no app because the employee believes it succeeded.
No way to establish where a punch happened
Attendance carried no location evidence, so a shift marked as started on site could not be distinguished from one marked from home. Supervisors relied on trust and occasional spot checks, and genuine disputes had nothing factual to resolve them against.
Payslips distributed as attachments
Payslips were emailed as attachments each cycle. Employees who lost one requested a copy from payroll, salary documents accumulated in personal inboxes, and the business had no record of who had accessed which document or when.
Corrections that erased the original
When an attendance entry was corrected, the new value replaced the old one. Payroll could see the current figure but not what it had been or why it changed, which made explaining a variance between two runs a matter of asking people what they remembered doing.
Our solution
Evidence captured at the moment of the punch, held locally when needed, and never overwritten afterwards.
Workforce Research and Evidence Modelling
Three weeks observing how attendance actually happens across office, shift and field settings, then defining what evidence a punch must carry to be defensible: location with accuracy radius, device identity, timestamp source and whether it was recorded online or offline. Deciding this before building meant the record was designed to survive a dispute rather than merely to display a time.
React Native App with Offline Punch Capture
Attendance, leave, payslips and approvals ship from one React Native codebase to both platforms. A punch is written to encrypted local storage with its evidence and a client-generated identifier, then synchronised when connectivity returns. The employee sees clearly whether an entry is confirmed or still pending, so an unsynchronised punch is never mistaken for a completed one. The queue survives an app restart because it is written to durable storage, which matters most on the older devices common among field staff.
Geo-Fencing with Honest Uncertainty
Work locations are configured as geo-fences with a radius appropriate to the site. A punch records the reported position and its accuracy, and where accuracy is too poor to judge, the entry is flagged for supervisor confirmation rather than accepted or rejected outright. Device clock drift is detected by comparing against server time on sync, and a punch whose local timestamp diverges beyond a tolerance is marked for review rather than silently corrected or silently trusted.
Approvals, Payslips and Immutable Adjustment
Leave requests check balances live and route to approvers with push notification and escalation on inaction. Payslips are viewed in-app against an authenticated session with access logged rather than distributed as attachments, so salary documents stop accumulating in personal inboxes and the business can answer who viewed which document. Corrections are recorded as adjustment entries carrying actor, reason and timestamp, so the original entry and its amendment both survive into payroll. Supervisors work an exception queue of flagged and missing entries rather than reviewing every record, which keeps the correction effort proportionate to the problem.
Technology stack
Results
Measured across a full payroll cycle with the app deployed to office, shift and field staff.
Before and after: platform engineering measures
- Attendance marked only on fixed shared terminals
- Field staff attendance entered later by a supervisor
- Leave requested and approved through email threads
- Balances checked manually against a spreadsheet
- No location evidence attached to any attendance entry
- Payslips emailed as attachments with no access record
- Corrections replacing the original entry outright
- Punch captured on the employee's own device, anywhere
- Offline punches stored encrypted and synced on reconnect
- Leave requests routed with push notification and escalation
- Balances checked live against the payroll platform
- Location and accuracy recorded, poor accuracy flagged for review
- Payslips viewed in-app under an authenticated, logged session
- Corrections held as adjustments preserving the original entry
Project timeline
Workforce Research and Evidence Modelling
Observation across office, shift and field settings, connectivity assessment at representative sites, evidence schema definition for a defensible punch, and the API contract against the existing HR platform.
API Layer and Sync Foundation
Versioned Laravel API over the existing platform, encrypted on-device storage, client-generated identifiers with idempotent endpoints, adjustment-based correction model, and the deployment pipeline on AWS.
Attendance and Geo-Fencing
React Native punch capture with pending and confirmed states, geo-fence configuration per site with accuracy handling, clock drift detection on sync, supervisor review queue for flagged entries, and shift pattern support.
Leave, Approvals and Payslips
Live balance checking, approval routing with push notification and escalation, in-app payslip viewing with access logging, session and device management, and accessibility work on the high-frequency punch screen.
Field Testing and Rollout
Testing across a representative device range, scripted connectivity-loss and location-accuracy scenarios at real sites, battery profiling, a pilot with field teams, then rollout by department with terminals retained during transition.
Key takeaways
What shaped the engineering decisions
- Define the evidence before the interface: An attendance record feeds payroll and may be examined months later. Deciding what a punch must carry to be defensible shaped the data model, the offline design and the review workflow together.
- Flag uncertainty rather than guessing: Accepting or rejecting a punch on a poor location fix was rejected in both directions, because either choice quietly produces a wrong record. Flagging for supervisor confirmation keeps the judgement with someone who has context.
- Show pending versus confirmed: An employee who believes a punch is recorded when it is queued locally will not notice a sync failure. Making the state visible turns a silent risk into something the person can act on.
- Adjust, never overwrite: Corrections recorded as adjustments with actor and reason preserved the audit trail payroll needs, and made variance between runs explainable from the record rather than from memory.
- Detect clock drift on sync: A device clock is under the user's control, so an offline timestamp cannot be trusted unconditionally. Comparing against server time at sync makes drift a detected condition rather than an assumption.
- Extend the platform, do not duplicate it: Building against a versioned API over the existing HR system was chosen over a parallel mobile backend, which would have created a second source of attendance truth feeding the same payroll.
Want results like these?
Let's discuss how ELIVTECH can drive measurable outcomes for your business.
Start your project