← All projects

Project Management System

PROMIS

Project and Change Request tracking for the IT team, from the request being raised through scheduling to the work being marked done.

Role & scope
Fullstack Developer
Technology stack
Next.js · NestJS · MySQL
Illustrative PROMIS Change Request flow: backend checks the previous status, user role, and allowed workflow stage before the API provides validated status, owner, and progress to the frontend; not a production screenshot.
Conceptual illustration with fictional data or statuses. Not a production screenshot.

Context & problem

A Change Request raised to the IT team passes through several teams and several workflow stages before it closes. Every move is a status change, and which move is legal depends on where the request currently sits and who is asking.

Those rules lived in the frontend. A request could be moved into a status it should never have reached, or moved by someone whose role did not permit it.

Users & team

The teams a Change Request passes through, and the requesters waiting on it. Both need the same thing from the system: the current status, who owns the request now, how far along it is — and for that to be trustworthy.

Personal contributions

  • Moved Change Request status-transition rules from the frontend to the backend.
  • Validated every change against three things: the previous status, the user’s role, and the workflow stage the request is allowed to be in.
  • Exposed only validated status through the API.
  • Rebuilt the frontend status, owner, and progress displays on top of that validated data.

Architecture & decisions

Next.js on the frontend, NestJS on the backend, MySQL for storage.

A rule enforced in the frontend is a suggestion. It holds only for users going through that interface, on that build, with no direct API call in between. Moving the transition rules server-side made the backend the only thing that decides whether a status change is legal, and left the frontend one job: display what the API says is true.

Key features

  • Change Request status transitions validated on the backend.
  • Every transition checked against the previous status, user role, and allowed workflow stage.
  • Status, owner, and progress displayed on the frontend from validated data only.

Challenges & solutions

No single check is sufficient on its own. Role alone lets a manager push a request through a stage it has not reached. Previous status alone lets anyone advance a request they have no claim on. Workflow stage alone ignores who is asking.

The transition is therefore validated against all three together, before the change is written. A request that fails any one of them is rejected rather than saved and corrected afterwards.

Results

A Change Request can no longer skip a stage or be moved by someone without the right role, because the backend rejects the transition before it is saved.