HR & Payroll
May – Aug 2026
At Goodwish
Client work — described generically
Attendance & Payroll SaaS
Biometric punches in, legally-correct Nepali payslips out — multi-tenant, with hardware on the other end.

Role
Backend and frontend engineer across four repositories
Stack
- Django
- DRF
- PostgreSQL
- React
- Vite
- TypeScript
- Tailwind CSS
- Docker
- ReportLab
- Vitest
Evidence
- Commits
- 402
- Repositories
- 4
- Evidence range
- May – Aug 2026
The problem
What this had to solve.
Organisations across Nepal — offices, schools, institutions — record attendance on fingerprint and RFID devices, then re-key the results into spreadsheets to compute salary. Every step is manual and every organisation has different shift rules. Payroll also has to satisfy Nepali statute: progressive income-tax slabs, SSF and SST contributions, and an accountant who must sign off before anything is disbursed.
Architecture
How it actually works.
Attendance terminals push logs on their own schedule, so ingestion is authenticated, throttled and idempotent — a duplicated punch cannot become a duplicated day of pay. Everything downstream is deterministic: shift rules, overtime policy, then Nepal's statutory tax and contribution bands, held until an accountant signs off.
What I built
My contribution.
- 01
Built a multi-tenant attendance and payroll platform covering employee, student, guardian, shift, calendar, leave, overtime and payroll workflows.
- 02
Implemented Nepal-specific payroll rules including income-tax slabs, SSF/SST handling, overtime policy and accountant sign-off controls.
- 03
Integrated ADMS/RFID attendance devices and hardened device endpoints with authentication, throttling, environment-managed credentials and security regression checks.
- 04
Developed tenant self-service branding, role-based portals, superadmin tenant controls and cross-organisation oversight dashboards.
- 05
Improved frontend maintainability by splitting large pages into reusable components and code-splitting routes.
The hard part
Hardware that does not care about your API design
ADMS attendance terminals are not well-behaved HTTP clients. They push logs on their own schedule, retry aggressively, duplicate records, and speak a fixed protocol you cannot change — and they sit on the open internet in whatever office bought them. The endpoint therefore had to be permissive about what it accepted and strict about what it trusted: device-level authentication, throttling to survive a terminal stuck in a retry loop, credentials moved into the environment rather than the codebase, and idempotent ingestion so a duplicated punch does not become a duplicated day of pay. I added security regression tests around that endpoint specifically, because it is the one door in the system a stranger can knock on.
Interface
What it looks like in use.

The effective-dated, marital-status-specific tax bands behind the TDS line.

Shift timings, grace windows, breaks and penalties are set in one place and feed straight into payroll.

ZKTeco terminals push punches over ADMS, and each device’s heartbeat is tracked per branch.