HRMonis — a multi-tenant
HRIS for Transklin Indonesia
An HRIS serving 1,472 active employees placed across client sites nationwide — attendance with selfie clock-in, shift scheduling, leave, and payroll. Designed and built solo, then re-architected from a Laravel monolith to a Go + React platform while staying live in production.

Workforce ops, across many sites at once.
Transklin places staff at client locations across Indonesia — hospitals, branches, facilities. Running HR for that means tracking attendance, shifts, leave, contracts, and payroll for over a thousand people who don’t sit in one office, spread across sites that each run their own schedules.
HRMonis is the platform that holds all of it: multi-tenant, multi-site, with a selfie-verified clock-in from a mobile app, a weekly shift planner, an approval queue covering seven request types, and a payroll module — built around Indonesian labour rules.
I built and designed it end to end as an independent project. The first version shipped on Laravel; as it grew, I rebuilt the whole stack on Go and React without ever taking it offline.
at a glance
From a Laravel monolith to a Go + React platform.
The same product, rebuilt. Here’s the shift planner in both versions — identical job, a completely different machine underneath.


same feature · Shift Karyawan — weekly schedule per site & department
The product today.
Live production screens. Tap any to enlarge.

Dashboard. An HR command center — active headcount, today’s attendance rate, pending approvals, an approval queue across seven request types, and a “needs attention” watchlist for expiring contracts, probation, and birthdays.

Attendance. The web ↔ mobile loop: staff clock in and out with a selfie on the Flutter app, and HR sees each scan here against the scheduled shift — on-time vs late, per site — with PDF, Excel, and recap exports.

Shift scheduling. A weekly matrix per site and department with colour-coded shift codes, bulk select, “apply to week,” and replicate-week — built to schedule hundreds of staff fast, with off-days and approvals baked in.

Sign-in. A focused auth screen with the Transklin identity — the same design language that runs through the whole product: dark navy, orange accent, Plus Jakarta Sans.
The other half of the loop.
The Flutter app is where the workforce actually lives. Staff clock in with a selfie, swap shifts, request leave, and pull payslips — and supervisors approve from the same app.

one-tap clock-in + full menu

+ monthly summary

team attendance + approvals

v2.0.2 · shipped
What makes it hold together.
The interesting problems in an HRIS aren’t the forms — they’re tenancy, time, and approvals at scale.
Multi-tenant, multi-site
One platform serving staff placed across separate client sites — RS Awal Bros Batam, Transklin Pekanbaru, and more — each with its own schedules and data isolation.
Stack migration, live
Rebuilt from Laravel / Bootstrap / MySQL to a Go API + React SPA on PostgreSQL, plus a Flutter app — without taking production offline.
Flutter clock-in
Selfie-verified attendance from the mobile app, synced to the web ledger and reconciled against each employee’s scheduled shift.
Approval engine
Seven request types — onboarding, transfer, offboarding, leave, shift swap, data change, leave-balance adjustment — flowing through one unified queue.
Payroll & shifts
A weekly shift planner with replication and bulk apply, feeding a payroll module shaped around Indonesian labour rules.
Built for speed
The SPA rewrite pays off in daily use: a ⌘K command palette, instant client-side navigation, and dense tables that stay responsive at headcount.