Skip to content
All projects
CompletedWeb app · 2026

HR Management System

A Flask and MySQL application for managing employees, attendance, payroll, leave and recruitment across 16 related tables.

HR dashboard showing employee, department, pending leave and training totals

Overview

A web application that gives HR administrators one place to manage staff records. It runs on a relational database designed from an entity-relationship diagram of 16 tables: departments, jobs, employees, attendance, leave, payroll, salaries, benefits, recruitment, performance reviews and training.

The problem

Staff records, attendance, payroll and leave are often kept in separate files, which makes them hard to keep consistent. A single relational database keeps each record linked to the right employee, department and job.

My contribution

  • Designed and created the HR database: 16 tables built from the ERD, with their keys, relationships and constraints.
  • Worked on the user interface: the dashboard, navigation and record-management screens.

Built by the wider team

  • Administrator sign-in with CSRF protection
  • Create, edit, delete and search for every table
  • CSV import and export, including an all-sections ZIP
  • Light and dark themes and automated tests

Key features

  • Overview dashboard with headcount, department breakdown and pending leave
  • Navigation grouped into five areas: employees, attendance & leave, payroll & benefits, recruitment, performance
  • Forms with dropdowns for linked records
  • Net salary calculated from basic salary, allowances and deductions

Implementation highlights

  • One schema runs on MySQL and on SQLite for local previews
  • Integrity rules: unique emails, one attendance record per employee per day, valid date ranges
  • Foreign-key deletes are restricted, so history is preserved

Screenshots

Captured from a local run with fictional demo data.