Developer · Mallow Technologies
Employee Management Tool
Payroll, performance & projects with RLS
A secure, collaborative HR platform covering the full employee lifecycle — payroll, attendance, tasks, and performance reviews — with PostgreSQL row-level security enforcing access rules right at the database.
Domain
- HR / workforce
Security model
- PostgreSQL row-level security
Frontend
- Tailwind + Alpine.js
Async
- Redis-backed queues
Hosting
- AWS
Overview
HR platforms hold the most sensitive data in a company — salaries, payslips, performance reviews — and the usual approach scopes every query in application code. That works right up until one forgotten condition leaks a whole company's payroll.
This platform pushes that guarantee down into the database with PostgreSQL row-level security, so even a buggy query can't return rows a user shouldn't see. On top of that foundation it covers the full employee lifecycle: payroll, attendance, tasks and projects, performance, and recognition.
Key features
- Employee and team management with row-level security on sensitive records
- Payslip and payroll module with RLS-secured salary data
- Performance management: KPIs, reviews, and structured feedback
- Attendance with check-in/out and worked-hours tracking
- Task and project management with milestones and deadlines
- Card-based employee recognition ('kudos') and time-off approval workflows
Architecture
~/projects/employee-management-tool/architecture.md
Laravel with PostgreSQL row-level security enforcing tenant and role scoping in the database; Redis-backed queues for asynchronous emails; Tailwind + Alpine.js frontend; hosted on AWS with reporting and analytics dashboards.
What I did
- Designed the PostgreSQL row-level security policies protecting salary and personal data
- Built the payroll, attendance, performance, and task/project modules as independent units
- Implemented Redis-backed queued emails so heavy notification work stayed asynchronous
- Developed the Tailwind + Alpine.js frontend and the reporting/analytics dashboards
Outcomes
Outcome 01
Access rules enforced at the database level, not just the app — defence in depth for HR data
Outcome 02
Asynchronous, Redis-queued emails kept the UI responsive under load
Outcome 03
Modular backend let each module evolve independently
Stack
06 tools