One portal for 500 people,and the numbers always agree.
An enterprise HR portal covering attendance, leave, onboarding, payroll and reports, with each role seeing exactly what it should.
500+employees on the portal every day
The problem
HR software fails quietly: a leave gets approved but attendance still shows an absence, and payroll pays the wrong amount a month later. With 500 people, small drifts become real money. Every module had to stay in agreement without a person reconciling them.
The engineering version
What was hard, and what I did about it
Modules that stay in agreement
Approving a leave has to change attendance, payroll and reports at once, without any of them polling the others.
What I did. Gave every module its own isolated state and put a small shared event layer under all of them, so one approval fans out to every module that cares.
Implementation notes
Big tables that feel instant
Monthly payroll runs and attendance matrices are hundreds of rows by dozens of columns, and they re-rendered on every keystroke.
What I did. Made the tables draw only the rows on screen and recompute only what changed.
Implementation notes
Right people, right views
Admins, HR managers and employees share one app but must never see each other's data.
What I did. Built the views to adapt to the role and guarded every route and action on that role.
Implementation notes
Ask me about
- How the cross-module middleware avoids circular updates
- Where normalized state paid off and where it was overkill
- How role-based access is enforced without sprinkling checks in components
Built with React, Redux Toolkit, TypeScript, Tailwind CSS, REST.