| Name / Email | Role | OPCO Scope | Capacity | Last active | Status | |
|---|---|---|---|---|---|---|
Loading… | ||||||
| Region | Code | Countries | OPCOs | Status | Modified | |
|---|---|---|---|---|---|---|
Loading… | ||||||
| Flag | Country | ISO | Region | OPCOs | Status | |
|---|---|---|---|---|---|---|
Loading… | ||||||
| Code | Name | Description | Projects | Weight | Status | |
|---|---|---|---|---|---|---|
Loading… | ||||||
| Timestamp | User | Action | Entity | Detail |
|---|---|---|---|---|
No audit entries yet Actions appear here as you configure the system. | ||||
| Family | Sub-family | OPCO | Headcount | Impact | Assessment | |
|---|---|---|---|---|---|---|
No populations added yet. | ||||||
| Project | Type | OPCO | Phase | Health | Status | PM | CAPEX | |
|---|---|---|---|---|---|---|---|---|
No projects linked yet. | ||||||||
| Project | Family | Sub-family | OPCO | Headcount | Process | Tools | Culture | Knowledge | Notes |
|---|---|---|---|---|---|---|---|---|---|
Loading… | |||||||||
| Code | Title | OPCO | Year | Status | Auth CAPEX | Committed | Remaining | Utilisation | Projects |
|---|---|---|---|---|---|---|---|---|---|
Loading… | |||||||||
| Project | Type | OPCO | RFA | CAPEX (€K) | Status | Health |
|---|---|---|---|---|---|---|
Loading… | ||||||
Portfolio Hub — Overview
A single place to run the IT project portfolio: what we're investing in, whether it's authorised, who's working on it, and how it's tracking.
The problem it solves
IT portfolio and investment tracking is usually spread across spreadsheets and inboxes. There's no single source of truth for what projects exist, no consistent link between a project and the budget that authorises it, and no auditable trail for who approved what. Decisions are slow, spend governance is weak, and reporting is a manual scramble.
The value — for sponsors
- One source of truth for the whole IT portfolio, across every region and operating company (OPCO).
- Top-down + bottom-up financial planning. A per-country Impact Plan (2026 → 2030 roadmap) and a line-level Budget, reconciled against each other and linked to the project portfolio.
- One connected money chain. Every commitment a project books points at what funds it — a budget line this year, or a provision against a future year's plan. So the plan, the budget and the actual spend are the same numbers at different distances: consumption per budget line, a reforecast of where the year is landing, and a forward view of how much of each future year is already spoken for.
- Auditable investment governance. Spend above a threshold cannot be committed until the matching investment request (RFA) has been approved through an escalating chain (L1 → L2 → L3) sized to the amount. Nothing is booked before it's authorised, and committed spend is shown against what was authorised.
- Assurance built in. A deterministic PMO Review runs portfolio-wide rule checks — unfunded spend, stalled approvals, plan gaps — graded by severity.
- Capacity visibility. See how people are loaded across projects before committing to more.
- Server-enforced, role-based access with a configurable permission matrix, plus a full audit log and project version history.
- Consolidation. Portfolio, investments, resources, and change management in one tool instead of many.
The value — for practitioners
- Create and version projects through a guided wizard.
- Group projects into programmes.
- Attach projects to an RFA and submit for validation with a single click; validators get a one-pager to decide from.
- Track committed budget in Execution, with a burn-up view.
- Manage resources with an FTE heatmap and per-person capacity.
- Run change-management impact assessments.
Capability tour
| Module | What it does |
|---|---|
| Home | World → Region → Country funnel: rotating globe, regional map, country dashboard (plan, budget, projects, KPIs) and the per-country business context. |
| Portfolio | The project list + timeline, grouped by Country → OPCO. Filter by OPCO, type, sub-type, domain, area, solution, status, health, year. |
| Financial Planning | Per-country Impact Plan (2026 → 2030 roadmap) + line-level Budget, reconciled; region-scoped. Plus per-line consumption, the year's reforecast, forward commitments, and roll-forward of provisions. |
| PMO Review | Deterministic portfolio checks graded by severity, with CSV export. |
| Programs | Group related projects into programmes. |
| Execution | Action plan, risks, and the budget ledger (planned → committed → invoiced → paid) with a burn-up. |
| Resources | FTE heatmap with per-person capacity and utilisation. |
| Change | Impact assessments across populations. |
| Investment | Portfolio-wide view of authorised vs. committed spend. |
| RFA Registry | Create investment requests, attach projects, run the approval workflow. |
| Dashboard | Reporting, incl. the CDC automation view (complexity chart + KPIs). |
| Deployment Matrix | Product deployment status: solutions × OPCOs, derived from projects + the Impact Plan, for any year 2026 → 2030. |
| Portfolio Config / Admin | Taxonomy (OPCOs, Domain → Area, roles, solutions, deployment sub-types…), users & permissions, validation thresholds, audit log. |
How governance works
Draft project → Publish a version → Attach to an RFA → Submit
→ L1 approves → L2 approves → L3 approves → Validated
→ project linked to the RFA → committed budget can be booked in Execution
The required chain depends on the amount: an RFA over the L1 threshold needs L1; over L2 needs L1→L2; over L3 needs L1→L2→L3, each in turn.
How the money connects
Impact Plan (2026 → 2030, per country, Domain → Area)
│ the first year, in line-level detail
▼
Budget line ──────────────────────────────┐
│ authorises │ funds
▼ ▼
RFA ────────────────► Project ──► commitment (planned → committed → invoiced → paid)
│
└─ cash-out in a future year?
→ provision against that year's plan envelope
→ rolled forward into that year's budget line
A commitment always points at exactly one funding source, so nothing is counted twice: consumption per budget line, the reforecast, and the forward view are all read off the same records.
Architecture at a glance
- Single-page web application (no install; opens in any modern browser).
- Firebase for data (Firestore) and sign-in (Google / Microsoft SSO), with server-side security rules enforcing role-based write access.
- Hosted on Vercel; live at promgt.app.
Process & Workflow Guide
How the core processes work end to end.
Core concepts
- Hierarchy: Region → Country → OPCO (operating company). Everything — projects, RFAs, users — is scoped through this hierarchy.
- Taxonomy: Domain (L1) → Area (L2) is the single source of truth for classifying work, shared by the Impact Plan, Budget, RFA and the project portfolio. Solutions and projects tag into it.
- Project: a unit of work with an owner (PM), a sponsor, a type (+ optional sub-type), a Domain / Area, a solution (and, for deployments, a bundle), CAPEX/OPEX, and a lifecycle.
- Financial Planning: a per-country Impact Plan (top-down roadmap) reconciled with a line-level Budget (bottom-up) — see Financial Planning below.
- RFA (Request for Approval): an investment authorisation that owns a set of projects and inherits their combined CAPEX/OPEX.
- Roles: what a signed-in user can see and do (see Roles & authorization).
Project lifecycle & versioning
- A project is created through the wizard and saved either as a Draft or a published version (V1, V1.1, …).
- Draft versions are visible only to the creator; published versions are visible to everyone in scope. Only a published project can be attached to an RFA.
- Every save writes a version-history snapshot, so you can see how a project evolved.
Project types & deployment sub-types
- Three top-level types set the milestone template at creation: Core Model, Solution Deployment, CDC Automation. Type is chosen at the "New Project" gate and locked after the first save.
- CDC requires a building sub-type (drives its complexity score). Solution Deployment takes an optional, admin-managed sub-type (e.g. Spark deployment), also chosen at the gate and locked. A sub-type can carry:
- its own milestone / action-plan template — seeded into the project on create, replacing the default deployment template; and
- a bundled solution set — pre-filled onto the project (the PM can still adjust it).
- Manage deployment sub-types in Config → Deploy Sub-types.
Financial Planning
Top-down and bottom-up planning in one page, run per country (not per OPCO — an OPCO's figures roll up to its country, overridable via a Budget country field on the OPCO, e.g. Routeco Belgium → UK).
- Impact Plan — the strategic 2026 → 2030 roadmap: for each Domain → Area, the current and target solution, status, and Build / Run amounts by year.
★marks a region's core solutions. - Budget — the bottom-up, line-level detail for the focus year. Each line has a type (CAPEX/OPEX), Build/Run, Domain/Area, an optional solution, supplier, nature and amount.
- The two are reconciled: a bridge/Δ view compares the budget lines against the plan by domain.
- Region scope: users see and edit only the countries in their region (see Roles — Region Planner / Portfolio Manager / Admin).
- Budget → portfolio: a Build line can seed a draft project with its name, Domain/Area and solution pre-filled; the PM picks the OPCO within the country. The project keeps a read-only budgeted CAPEX/OPEX (linked back to the budget line) next to the PM's working amount, with a live variance.
The RFA investment-approval process
This is the heart of spend governance.
Thresholds (configurable in Admin → Roles & Permissions → Validation thresholds, in K€):
| Band | Default | Meaning |
|---|---|---|
| L1 | > 250 K€ | Requires L1 approval |
| L2 | > 500 K€ | Requires L1 → L2 |
| L3 | > 1 000 K€ | Requires L1 → L2 → L3 |
The band is evaluated on the RFA's combined CAPEX + OPEX (summed from its attached projects).
States: Draft → Submitted (in validation) → Validated, or Refused (which can be resubmitted).
The flow:
- Create an RFA (one OPCO; the code
RFA-{year}-{OPCO}-{NNN}is generated automatically). - Attach one or more published projects from that OPCO. The RFA's CAPEX/OPEX = the sum.
- Submit. A confirmation shows the project count and totals, and the required approval chain.
- Each required level approves in turn. A validator sees a one-pager — the RFA totals plus a card per project (PM, sponsor, business area, status, health, goals, money) — and can Approve or Refuse (a refusal requires a comment).
- When the last required level approves, the RFA is Validated: each attached project is linked to it, and committed budget can now be booked for those projects in Execution.
What validation unlocks: until an over-threshold project's RFA is validated, only Planned budget lines can be added in Execution. Committed / Invoiced / Paid lines are blocked.
Roles & authorization
Default roles: Admin, Portfolio Manager, OPCO Manager, Region Planner, Read-Only, PMO, RFA Validator, Sponsor. Permissions are a configurable matrix of action × module × role.
- Server-enforced. Authorisation is enforced by Firestore security rules, not just the UI. A user's roles come from an admin-controlled, email-keyed grant record (
roleGrants/{email}); only admins can write it, so a signed-in user cannot self-escalate. The client permission matrix still shapes what the UI shows. - Region Planner: can create and operate Financial Planning (Impact Plan + Budget) for the countries in their region.
- Multi-role: a user can hold several roles and inherits the union of their rights (e.g. an OPCO director who is both PM and RFA Validator). If any of their roles is global, they see all OPCOs (broadest scope wins).
- Validator level: RFA Validators carry a level (L1/L2/L3) — the highest band they can approve.
- "View as": an admin can preview the app as any role (and OPCO) without touching data, to test what each role sees.
Resources & capacity
- The FTE heatmap shows each person's monthly load across projects, with indented per-project rows.
- Each user has an allocatable capacity %; utilisation is load ÷ capacity, flagged when over.
Budget & execution
- The budget ledger tracks lines through Planned → Committed → Invoiced → Paid; only the latter three count toward consumption.
- A burn-up chart shows cumulative committed spend over time.
- Committed spend is gated on RFA validation (see above).
Notifications & audit
- The bell raises event notifications on every RFA status change (submitted → validators; each level cleared → next tier; validated → submitter + PMs; refused → submitter).
- The Audit Log (Admin) records configuration and workflow events.
Data model reference (collections)
projects, rfas, workload, executionPlans, programs, notifications, impactPlans (keyed by country), budgets (keyed by country + year), and a system/config tree for users, roleGrants (email-keyed, read by the security rules), permissions, validation, taxonomy (regions, countries, OPCOs, domains → areas, roles, solutions, deploy sub-types, populations, suppliers, budget natures), and auditLog. Writes are gated by server-side security rules per role group (config, projects, RFA, financials).
Feature Status & Roadmap
Snapshot of what's live, what's partial, and what's planned. Updated each release.
Status by capability
| Module | Capability | Status | Notes |
|---|---|---|---|
| Portfolio | Project list, timeline, filters | ✅ Live | Country → OPCO grouping; filters incl. sub-type, domain, area, solution |
| Portfolio | Project wizard, ID card, versioning | ✅ Live | |
| Portfolio | Deployment sub-types (gate + template + solution bundle) | ✅ Live | Admin-managed; locked after save |
| Financial Planning | Impact Plan (2026 → 2030), per country | ✅ Live | Domain → Area; Build / Run by year |
| Financial Planning | Budget lines + plan reconciliation | ✅ Live | Region-scoped; Budget-country override per OPCO |
| Financial Planning | Budget line → draft project | ✅ Live | Budgeted vs working CAPEX/OPEX with variance |
| Financial Planning | Commitment funding link (budget line or plan envelope) | ✅ Live | Set on the ledger line in Execution; one-off backfill available |
| Financial Planning | Per-line consumption + remaining | ✅ Live | Over-consumption flagged |
| Financial Planning | Reforecast (budget vs landing, by domain) | ✅ Live | Committed + still-planned + provisions |
| Financial Planning | Forward commitments (N+1 → N+4) | ✅ Live | Plan envelope vs already spoken for |
| Financial Planning | Roll provisions forward into the budget | ✅ Live | Creates or attaches a budget line; existing amounts untouched |
| Home | World → Region → Country funnel + country dashboard | ✅ Live | Globe with region outlines, regional map, KPIs |
| Home | Country context (macro + local business context) | 🟡 Partial | World Bank indicators fetched; sector/industry fields entered manually |
| PMO | Deterministic portfolio review | ✅ Live | Severity-graded checks, CSV export |
| Investment | Committed vs authorised on RFAs and projects | ✅ Live | Authorised amount stays frozen at submission |
| Config | Domain → Area taxonomy, solutions (L1/L2 tags) | ✅ Live | Single source of truth |
| Programs | Programme grouping | ✅ Live | |
| Execution | Action plan, risks | ✅ Live | |
| Execution | Budget ledger + burn-up | ✅ Live | Committed lines gated on RFA validation |
| Resources | FTE heatmap, capacity %, utilisation | ✅ Live | |
| Change | Impact assessments | ✅ Live | |
| Investment | Portfolio spend view | 🟡 Partial | Reads the new RFA model; framing to be reworked |
| RFA Registry | Auto code, attach projects, submit | ✅ Live | |
| RFA Registry | Escalating L1→L2→L3 validation | ✅ Live | Thresholds configurable |
| RFA Registry | Validator one-pager, refuse + comment | ✅ Live | |
| RFA Registry | Amendment / re-baseline flow | ⛔ Planned | Flag exists; no process yet |
| Admin | Users, multi-role, validator levels | ✅ Live | Incl. Region Planner role |
| Admin | Roles & permissions matrix | ✅ Live | UI matrix + server-side enforcement |
| Admin | Validation thresholds | ✅ Live | |
| Admin | Audit log | ✅ Live | Loads & exports |
| Reporting | Dashboard / CDC | 🟡 Partial | Complexity chart + KPIs live; site photos need Firebase Storage set up |
| Reporting | Deployment Matrix (solutions × OPCOs) | ✅ Live | Derived from projects + Impact Plan; any year 2026 → 2030; CSV export |
| Reporting | Per-cell manual override / annotation | ⛔ Planned | For deck-specific labels (e.g. "Scale", "TBC") |
| Notifications | In-app bell (event-based) | ✅ Live | Keyed by email |
| Notifications | Email accept/refuse links, push | ⛔ Planned | |
| Platform | Server-side security rules | ✅ Live | Firestore rules gate writes by role (email-keyed grants) |
Known limitations
- Firestore rules must be redeployed when a new collection is added (the app change ships independently, but saving to a brand-new collection is denied until its rule is published).
- CDC site photos don't persist if Firebase Storage isn't enabled or its rules deny writes; the app now surfaces the exact error. See Deployment for the setup step.
- Test data only today; no production data-migration path yet.
- No automated tests / CI beyond the docs sync check (see below). Headless end-to-end passes are run by hand at release time and are not yet checked in.
- Country context sector data (construction / electrical-installer indicators) has no free, browser-reachable API covering the whole group — the World Bank macro block refreshes automatically; those fields are entered by hand.
- AI agents (PM / Business Analyst) are designed but not built: they need a small serverless function to hold the model API key, which is not deployed.
- Config housekeeping: a few stored fields are unused (write-only) and are candidates for cleanup or wiring — e.g. area CBF sub-function, phase start/end milestone IDs, budget-line leverage.
Roadmap (suggested order)
- CDC photos — enable Storage + rules, confirm persistence.
- Investment / reporting rethink — now that RFA amounts derive from projects and financial planning is per country.
- AI agents — PM and Business Analyst assistants, on top of the PMO checks and the country context. Blocked on a serverless endpoint for the model API key.
- GRC segregation-of-duties report — flag users holding conflicting roles (e.g. PM + validator).
- RFA amendment / re-baseline flow.
- Config data cleanup — remove or wire the unused fields listed above.
- Email accept/refuse links + push notifications.
- Automated tests + broader CI.
Changelog
All notable changes to Portfolio Hub. Newest first.
1.4.0
The theme of this release is one connected money model: the strategic plan, the budget, and what projects actually commit are now the same numbers seen from different distances, instead of four spreadsheets that happen to agree.
The money chain
- Commitments know what funds them. Every execution-ledger line now carries a funding source: either a budget line (real money in the year being budgeted) or a plan envelope (a provision against a future year's Impact Plan), plus its country, year and Domain → Area. This one link is what closes the loop between plan, budget and execution.
- Consumed / Remaining per budget line. The Budget table shows what each line has actually consumed and what is left, and flags over-consumption.
- Reforecast — what the year is landing at. Per domain: budget vs committed + still-planned + provisions, with the variance. Positive = headroom, negative = the year is set to overrun.
- Forward commitments. For every year beyond the one being budgeted: the plan envelope, how much of it is already spoken for by running projects, and what is still free. Future years stop being guesses.
- Roll provisions forward. When a future year becomes the year you are budgeting, a banner on the Budget shows the provisions waiting to land. One click turns each into a budget line — or attaches it to the line you already wrote. Existing line amounts are never rewritten; the provision shows up as consumption, so an under-sized line turns red rather than silently growing.
- Link commitments (one-off backfill). Matches commitments booked before the funding link existed to the budget lines that fund them, with a visible reason per suggestion. Ambiguous rows are left alone rather than guessed.
- Planned vs actual on investments. The RFA registry now shows committed spend against each RFA and each attached project, as a % of what was authorised, turning red on over-commitment. The authorised amount itself stays frozen at submission — this is the actual beside the plan, not a replacement for it.
Getting in
- New landing page. A World → Region → Country funnel: a rotating globe with the regions outlined, a regional map on selection, and a country dashboard with plan, budget, projects and KPIs. Financial Planning opens from where you already are, instead of a dropdown.
- Country context. Per country and year: macro indicators fetched from the World Bank in one click, alongside locally-entered business context from the OPCO's own strategic plan. This is the evidence layer that later lets prioritisation be argued rather than asserted.
Assurance
- PMO Review. Deterministic portfolio checks — spend without authorisation, RFAs stuck in the chain, budget lines with no owner, missing plan coverage, and more — graded by severity, with CSV export. No AI, no opinions: rules that either hold or don't.
Fixes
- The country-context Edit/Refresh button was permission-gated but never un-hidden.
- The Portfolio page could destroy its own list container when offline.
- The Dashboard threw when the portfolio contained no CDC projects.
- The context refresh now says why the sector fields are not fetched instead of silently leaving them blank.
1.3.0
- Deployment Matrix (Report) — a live product-deployment status grid: solutions as rows (grouped by Domain → Area) × OPCOs as columns (grouped by country). Each cell is derived, not hand-maintained: project evidence first (a completed/in-flight project deploying that solution at that OPCO), then the country's Impact-Plan target and go-live timing. An "As of year" selector (2026 → 2030) re-colours the whole grid — live / go-live / in roadmap / not scheduled — so the same view produces today's snapshot and any future year. Filter by region, domain, or a solution set (a deployment sub-type's bundle, e.g. Spark). CSV export.
- Portfolio timeline — larger scale (wider quarters, taller rows and phase bars) and key-deliverable diamonds on the Gantt: green = done, red = overdue, navy = upcoming.
1.2.0
- Financial Planning — a merged Impact Plan + Budget page, run per country. The Impact Plan is the top-down 2026 → 2030 roadmap (Build / Run by Domain → Area); the Budget is the bottom-up, line-level detail, reconciled against the plan. Access is region-scoped; an OPCO's figures roll up to its country, overridable per OPCO (e.g. Routeco Belgium → UK) via a Budget country field.
- Server-side security rules are now live. Authorisation is enforced in Firestore, not just the client: a user's roles come from an admin-controlled, email-keyed grant record, so a signed-in user can't self-escalate. New Region Planner role for Financial Planning.
- Domain (L1) → Area (L2) taxonomy is the single source of truth across Impact Plan, Budget, RFA and the project portfolio. Solutions can be tagged to a Domain/Area, which pre-filters the Impact-Plan target-solution picker.
- Budget line → draft project. A Build budget line can seed a draft Solution-Deployment project with everything pre-filled; the project keeps a read-only budgeted CAPEX/OPEX (linked to the line) alongside the PM's editable working amount, with a live variance.
- Portfolio grouping by Country → OPCO (collapsible), with a Sub-type filter and tags.
- Deployment sub-types (e.g. Spark deployment): admin-managed, chosen at the project type gate like CDC and locked, each able to carry its own milestone/action-plan template (seeded on create) and a bundled solution set (pre-filled onto the project).
1.1.0
- RFA management workflow. RFAs now own projects and inherit their CAPEX/OPEX; auto-generated codes; escalating L1→L2→L3 validation sized to spend; validator one-pager; refuse-with-comment and resubmit; committed budget gated on validation. New RFA Registry under Investment.
- Multi-role users with union of rights and per-user validator levels; validation thresholds configurable in Admin.
- Fixes: wired the Export buttons (Users, Regions, Audit Log, OPCOs); Audit Log now loads & renders; notifications reach invited users (keyed by email); site-photo upload errors are surfaced; Programs module made visible.
- Documentation built into the app (admin-only Help) and maintained by the build.
1.0.0
- Initial Portfolio Hub: portfolio, project wizard, execution, resources, change management, investment dashboard, dashboard/CDC, configurable roles & permissions, audit log.
| OPCO | Code | Country | Region | Employees | Branches | Verticals | Status | |
|---|---|---|---|---|---|---|---|---|
Loading… | ||||||||
| Role name | Description | Status | |
|---|---|---|---|
Loading… | |||
| Solution | Vendor | Description | Projects | Status | |
|---|---|---|---|---|---|
Loading… | |||||
| Name | Source | OPCO | Default role | ||
|---|---|---|---|---|---|
Loading… | |||||