Unified Projects Progress Dashboard

Role: Product Manager & Lead Developer

A portfolio of parallel projects gets run by asking around and stitching answers together, and its percentages are estimated by impression. This board makes the number computed from the smallest unit of work, and stops completion being declared before security is tested and the work handed over.

A single page with five screens — sign-in, password change, the progress board, user management, and the audit log — browsed three layers deep rather than through successive pages: project cards, then a project's phases, then a phase's steps. Each card carries its percentage ring, the project name, the last update, its phase counts and how many are done or in progress, and a cybersecurity badge. An edit mode appears only to whoever holds the permission, and an audit log records every change and no reads.

And no progress number is typed anywhere: a phase's ratio comes from its completed steps, a project's from the mean of its phases, and the overall average from the project percentages — one chain from a single step up to the headline ring. A phase with no steps marked “in progress” counts as one half: a middle estimate instead of a false zero or an optimistic one. Every project carries two mandatory phases — cybersecurity testing, then final handover — always last in order, and the server refuses to delete them, not the interface. Security is a full phase counting toward the percentage like any other, and its badge is derived from that phase's state and steps rather than stored beside them. A companion agent reads the same data and emails a weekly digest.

Portfolio TrackingExecutive DashboardDerived ProgressSecurity GatingAudit LogRole-Based AccessAutomated ReportingArabic RTL

Key Features

The Number Is Computed From the Step, Not Typed

A step raises its phase, the phase its project, the project the average — one chain with no typed number at any link.

Two Mandatory Phases the Server Guards

Security and handover are always the last two phases, and deleting them is refused by the server — no 100% skips either.

A Security Badge That Reads the Work Itself

Derived at display time from the security phase itself, so it cannot contradict the phase it describes.

A Declared Simple Average — No Hidden Weighting

The mean of project percentages, every project weighing alike — a declared rule, because the reader needs to know what it measures.

A Permission-Gated Edit Mode

Its button never appears without the permission, and any edit from others is refused server-side.

An Audit Log of Changes Only

Records changes, sign-ins and password changes — and no reads.

A First Password That Cannot Linger, Order by Drag

A new account signs in on a temporary password the board forces it to change before anything else, and phases and steps reorder by drag and drop.

The Business Problem

With projects running in parallel, “where does everything stand?” means chasing each one separately and stitching the answers together by hand. Percentages get estimated by impression, so a project is announced as nearly complete while its security has not started — because on a sheet security is a line easy to postpone, and in a slide a line easy to delete.

Why We Built It

Progress should not be a number anyone enters. Record the step and let the system compute upward to the figure leadership reads, so the indicator becomes a trace of the work rather than an estimate of it. Then move security from being a checkbox to being a phase: it counts toward the percentage like any other, it cannot be deleted from inside the interface, and it sits before handover in the order. A project whose security was never tested simply cannot reach one hundred, however much its owner would like it to.

How We Built It

A single-page application with no router — navigation swaps sections and detail opens as layers over the board rather than new pages, so state and context survive the descent from project to phase to step. The calculation lives in one server-side unit (stepRatio → projectPct → the average), so a percentage is never computed once in the interface and again in a report. Constraints are enforced on the server rather than in the view: deleting a mandatory phase is refused with an explicit 403, and so is an edit from anyone without the permission — hiding a button is a courtesy, not a protection. The audit log is written server-side on every data change, so it never depends on the interface remembering to record one.