All projects

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.

Employee Management Tool — Payroll, performance & projects with RLS

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

LaravelPostgreSQLRedisTailwindAlpine.jsAWS