← All projects

Web

Imara Attendance — attendance, leave and payroll

A live attendance, leave and payroll system for the Imara office, fed by the fingerprint machine, with an Android app that sends alerts when someone is late or a device goes offline.

  • React
  • Node.js
  • Express
  • SQLite
  • Android
  • Firebase

The problem

The Imara office clocks in on a ZKTeco K40 Pro fingerprint machine, but the punches sat on one office PC inside ZKBio Time. To answer simple questions like who is late today or how many no-pay days someone had this month, HR had to sit at that PC and work it out by hand. Payroll, EPF/ETF and payslips were a separate job again, built from those same numbers.

What I built

A small agent on the office PC reads ZKBio Time every 30 seconds and pushes the punches over HTTPS to a dashboard on our server. The ZKBio Time server is never opened to the internet; the agent only makes outgoing calls.

The dashboard, in React with a Node and Express back end on SQLite, shows who is in, on a break, late or not in yet, plus a live punch feed. HR enters and approves leave, half days, short leave and work-from-home requests, and staff can send their own requests from a portal that signs them in with an emailed 6-digit code instead of a password.

Month end runs from the same data: attendance cuts, EPF 8% / 12%, ETF 3%, loans and salary advances, an Excel salary sheet with bank transfer and EPF/ETF sheets, and payslip PDFs with the company logo. A lock-month button freezes the figures once they're paid. There's also an Android app with push alerts for late arrivals, half days, a morning headcount and the office PC or fingerprint machine going offline, and a daily SMS to staff who were late with the deduction it caused.

How it turned out

It's live and in daily use at Imara. HR sees the day as it happens on the web or on their phone, and month-end payroll now comes straight out of the attendance data, with locked months that stay exactly as they were paid.