All work case study · flagship

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.

client Transklin Indonesiarole Independent · solo · design + buildtimeline Nov 2023 – presentstack v2 Go · React · PostgreSQL · Flutter
HRMonis v2.0.0
HRMonis v2 dashboard
the brief

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

ClientTransklin Indonesia
Scale1,472 active staff
ModelMulti-tenant · multi-site
RoleSolo · design + build
StatusLive · v2.0.0
GoReactPostgreSQLFlutterFigma
stack owned · 6/6
Design
Web
Mobile
API
Data
Infra
the evolution

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.

v1 · 2023–24 Laravel · Bootstrap
HRMonis v1 shift schedule
v2 · 2025 → Go · React
HRMonis v2 shift schedule

same feature · Shift Karyawan — weekly schedule per site & department

Frontend Bootstrap · server-rendered React SPA
Backend Laravel (PHP) Go
Database MySQL PostgreSQL
Mobile No app Flutter app · selfie clock-in
Experience Full page reloads ⌘K palette · instant nav · week replication
inside v2

The product today.

Live production screens. Tap any to enlarge.

on mobile

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.

HRMonis mobile home
Beranda Greeting, today’s shift,
one-tap clock-in + full menu
HRMonis mobile attendance
Absensi Clock-in status vs schedule
+ monthly summary
HRMonis mobile supervisor view
Manajemen · atasan Role-based supervisor view
team attendance + approvals
HRMonis mobile login
Masuk Transklin-branded sign-in
v2.0.2 · shipped
under the hood

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.