Skip to content

An HR system for a furniture factory, from time clock to timesheet

Attendance, shifts, piecework and payroll for a factory in Vietnam, with a Linux agent that reads the gate time clocks.

Livechecked 23/09

Client
A furniture manufacturer in Vietnam (name withheld)
Role
Freelance build, one of a team of 4
Period
04/2026 →
Proof
6 claims
Stack
.NET · React · TypeScript · Ant Design · PostgreSQL · xUnit · Docker · Python
  1. 1ProblemAttendance ran on clock exports and spreadsheets.
  2. 2Build.NET 8 API, React client, PostgreSQL and a time-clock agent on site.
  3. 3Result79,262 punches turned into 6,354 workdays in production.
79,262 → 6,354P2
Time-clock punches turned into workdays
112P4
Permissions across 6 roles

Problem

A furniture factory in Vietnam ran attendance on exports from the time clocks at its gate and on spreadsheets. Shifts, piecework and payroll were reconciled by hand every month.

Build

A .NET 8 API with EF Core and PostgreSQL, and a React 18 client with Ant Design: an attendance engine with shift milestones, piecework slips with role-based approval, payroll snapshots and PDF slips, and an audit trail with retention.

On site, a Linux agent reads the ZKTeco and Ronald Jack time clocks over TCP and pushes punches to the API on a schedule.

Result

In production it has turned 79,262 time-clock punches into 6,354 workdays P2. It holds 254 employee records, 66 of them active P3, and 6 roles share 112 permissions P4.

The API has 22 controllers and 189 routes P5, with 153 xUnit test cases P6.

Limits

The factory is not named. The system has since grown into an ERP; my part there is the manufacturing module and the warehouse upgrade.

My part

It started from an existing EOffice codebase, used with permission. A four-person team built the factory system on it; 381 of its 510 commits are mine P1, including the time-clock agent and the acceptance report.

My commits on the HR system381 / 510 · 75%

Proof of delivery · NLV-26-HRM

#ClaimEvidenceAs ofConfidence
P1My part was 381 of the system's 510 commits.
  • Commit counts, HR backend and frontend (On request)
21 Oct 2026I hold the artifact
P2In production it has turned 79,262 time-clock punches into 6,354 workdays.
  • Acceptance report, 50 screens (On request)
23 Sept 2026I hold the artifact
P3It holds 254 employee records, 66 of them active.
  • Acceptance report, 50 screens (On request)
23 Sept 2026I hold the artifact
P46 roles share 112 permissions.
  • Acceptance report, 50 screens (On request)
23 Sept 2026I hold the artifact
P5.NET 8 API with 22 controllers and 189 routes.
  • Commit counts, HR backend and frontend (On request)
21 Oct 2026I hold the artifact
P6153 xUnit test cases.
  • xUnit test cases (On request)
21 Oct 2026I hold the artifact