Enterprise HR Management Platform
One system of record for people, leave, and approvals
- Role
- Full Stack Engineer
- Timeline
- 2024
- Stack
- ReactReduxMaterial UINode.jsPostgreSQLDocker

HR data lived in spreadsheets, email threads and one administrator's head. The platform's job was simple to state and hard to do: make one place that is always right about people, leave and approvals.
Problem
Employee records, leave balances and approvals were spread across disconnected tools. The costs were constant: leave balances disputed because two sheets disagreed, approvals stuck in inboxes, and no reliable answer to basic operational questions — who is on leave next week, who reports to whom, what changed and when.
Solution
A role-aware web platform where every HR object — employee, leave request, approval, attendance record — has exactly one home. Employees see their own data and submit requests; managers approve within their span of control; HR administrates globally. Every state change is recorded, so the system can always answer "what happened here" without archaeology.
Architecture
Frontend
- React SPA
- Redux store
- Material UI system
- Role-gated views
API
- Node.js REST API
- RBAC middleware
- Validation layer
Domain
- Employee registry
- Leave engine
- Approval workflow
- Audit trail
Data & Infra
- PostgreSQL
- Docker deploys
- Backups & migrations
The leave engine is deliberately isolated: accrual rules, carry-over and balance math live in one tested module, because that is the code an HR platform lives or dies by.
Challenges
Permissions that mirror a real org chart
"Managers approve their team" sounds simple until teams nest, people act in two roles, and someone goes on leave mid-approval. Role-based access control with explicit delegation rules — enforced in the API, not the UI — kept the model coherent as the org changed.
Dense data without a dense feel
Enterprise screens drown in tables. Careful use of Material UI's data grid — saved filters, inline status chips, progressive detail panels — kept daily tasks to a few clicks while preserving depth for HR power users.
Migrating history nobody fully trusted
Importing years of spreadsheet records meant importing years of spreadsheet errors. A staged import with validation reports let HR correct source data before it became the system of record, instead of laundering mistakes into the new platform.
Technologies
- Frontend — React with Redux for predictable state across a large surface area; Material UI for the enterprise component system.
- Backend — Node.js REST API with role-based access control and a full audit trail on sensitive mutations.
- Data — PostgreSQL with migration-managed schema; relational integrity does the heavy lifting.
- Operations — Dockerised services for consistent environments from laptop to production.
Screens


Lessons Learned
- Authorization is domain logic. Model it explicitly or debug it forever.
- An audit trail added on day one costs little; added on day two hundred it costs a rewrite.
- For enterprise UI, speed of the tenth use matters more than delight on the first.