Professional
HR Management System
Replaced an Italian industrial contractor's paper personnel files with a web application built around the question the office actually asks: who can weld this, and how well.
An Italian industrial contractor kept its personnel records on paper. This replaced them with a web application: searchable employee profiles, uploaded documents, and a competence rating per trade, so that staffing a job stops being a question you answer from memory.
- Engagement
- Freelance
- Domain
- Nine metalworking trades, rated 0–5
- Stack
- Next.js · Firebase Auth, Firestore and Storage
- Interface
- Italian, with all copy centralised in one file
- Repository
- VincenzoImp/human-resources-management-system
The problem
The records were physical files in a cabinet. Finding out whether someone was available, what they were qualified for, and where their documents were meant walking to the cabinet, and answering “who on the books can do this job” meant asking whoever had been there longest.
Retrieval that used to be a search through physical files is now a single query, which is the whole point of the exercise and the only measure that mattered to the client.
What I built
The employee record is twenty-two fields, nearly all optional, because records migrated from paper arrive incomplete and a schema that refuses them is a schema nobody fills in. Ten fields are required at entry – enough to identify a person and reach them – and the rest accumulate.
The part that is actually specific to this business is the qualification model. Nine trades – pipe-fitter, welder, carpenter, fitter, labourer and the rest – each rated from zero to five in half-steps rather than held as a yes-or-no certificate, because competence in a trade is a gradient and the office already thought about it that way. The welder record carries two extra fields, technique and material, since those decide whether a given welder can take a given job.
That model then inverts: a second view lists the workforce by qualification, ranked by rating, which is the query the business runs most and the reason the whole thing exists.
Documents attach to an employee record, and an orphan sweep removes stored files no record references any more, so deleting an employee does not leave their documents behind.
Hard parts
Modelling competence rather than certification. A boolean “qualified” field is easier and answers the wrong question. Rating each trade means the data can distinguish someone who can weld from someone you would put on a pressure vessel, and that distinction is the one the office was holding in its head.
A permission model small enough to be correct. Access is two levels: anyone signed in can read, and writing is restricted to an explicit allowlist enforced in the database’s own security rules rather than only in the interface. For a company of this size that is honest and verifiable; anything more elaborate would have been enforced in the client and therefore not enforced at all.