The problem
Payslips came from a Windows-only report renderer, and getting them to each employee took a lot of manual work.
What I built
Co-built the system where HR imports the payroll CSVs, reviews them before confirming, and a background worker renders Thai payslips, encrypts them and emails them from a queue, plus all the HR request consoles.
Key features
- Two-step CSV import with a per-employee preview before confirming
- Import history and activity log
- Payslip email console: stage a month, reset failed sends
- Consoles for leave, holiday work, shift swaps and compensatory leave
- Excel export everywhere
- Company SSO sign-in
Under the hood
- Ported the old payslip layout to SkiaSharp centimetre for centimetre, with HarfBuzz shaping so Thai tone marks sit correctly
- Database email queue with leases, a concurrency cap, a per-minute rate limit, backoff, and manual reset after max attempts
- Deploy workflow that detects new migrations, waits for native DLL locks to clear, then probes a health endpoint