Leave Planning & Management System
An internal HR system where permissions follow the reporting line, not a role table.
No public link — internal system. Screenshots below.
- Role
- Sole designer and developer — data model, backend, interface, balance engine, reporting and exports
- Type
- Internal HR system, client work — confidential
- Stack
- PHP, MySQL, JavaScript
- Status
- Delivered. Live link: unavailable — internal system.
The problem
Leave planning across mixed working patterns is hard to see and easy to get wrong. Requests arrive by email, entitlements live in spreadsheets, and nobody can answer the only question that matters on a given day: who is off, and can we still cover the shift? The cost is not paperwork — it is discovering a coverage gap too late to fix it.
The approach
One system of record, three views onto the same data. Employees see their own balance, working-day pattern and request history. Managers see their team's coverage and approve against it. HR sees the whole organisation — a full-year planning grid, every request, every balance, and an audit trail of who changed what.
Key decisions
Permissions follow the reporting line, not a role table
Each profile carries a manager, so a manager's own request routes upward while their team's requests route to them. One rule generates the entire hierarchy, and adding a department requires no code.
The app reads the planners' existing spreadsheet
Working patterns were already maintained in an Excel workbook people knew and trusted. Rather than force a migration, the system synchronises from that file automatically and becomes the layer on top of it. Adoption stopped being a negotiation.
Concurrency limits warn, they don't block
Each position and shift has a maximum number of people off at once. When it's reached, the employee sees a warning and a human still decides. Rules that hard-block get worked around; rules that inform get used.
Screenshots
Outcome
Leave moved from scattered email threads and spreadsheets to a single auditable record, with same-day coverage visible to the people who plan it and full-year exports for the people who report on it.