Skip to content
Delivery management In development Laravel

ProjectHubs: one record of the work, for everyone who touches it

Agencies and delivery teams run projects for clients, and increasingly with AI agents doing part of the work. ProjectHubs is the control plane in the middle: one team-scoped record of every work item, milestone, request and decision. Staff plan from it, clients see the slice that was deliberately shared with them, and agents get executable work orders without ever holding the authority to approve, merge, deploy or close.

ProjectHubs board for a demo project: filter bar above Todo, In Progress, In Review and Done columns with priority-tagged cards
1Work item record behind backlog, board, list and portfolio
7Work item types, from epic to change request, on that one record
6Project roles, three staff and three client-side
0Approvals, merges or deploys an agent can perform

The problem

When a team delivers for a client, the truth about the project lives in three places: the tracker the developers use, the deck or spreadsheet the client is shown, and the chat where decisions actually get made. The counts disagree, an approval is a message someone has to find later, and the moment an AI agent starts closing tickets nobody can say who authorised what. ProjectHubs exists because we run engagements this way ourselves and wanted a tool that would refuse to let those three drift apart.

What it does

Every project starts from a template that matches how we sell — Blueprint, Build, Care & Growth — with a named accountable owner. Epics, stories, tasks, bugs, service requests, change requests and subtasks are one record type; backlog, board, saved views and the portfolio are views of it, so a number on the portfolio is the same number on the project screen and links back to the list it came from.

Client governance is a first-class part of the record rather than an export. Client requests are immutable at intake and triaged with an SLA clock; decisions have a log with outcomes and supersession; an approval is bound to the exact revision being approved and requires two-factor and a verified email. The client workspace shows overview, plan, updates, requests and decisions, and nothing marked internal. Comments and attachments are internal by default and shared on purpose.

Agents are delegated identities with per-project capability grants that expire. They can read and draft, and a CLI and SDK let them work a Git-backed ticket on the customer’s own machine or CI. Git stays the source of truth for code; approval stays with a person.

Built with restraint

Every surface — staff panel, client workspace, agent API — goes through the same application actions and policies, so a permission is enforced once. State machines and the authority matrix are held as contracts, not scattered conditionals. Project progress is computed and shown with its calculation basis and freshness, and the client workspace is server-rendered plain HTML on purpose while the domain settles: the styling is the cheap part to change later, the authority model is not.

Where it is today

Pre-release. The foundation, marketing site, work item model and client governance are built and under test; planning, agent identity and the commercial layer are in progress; no release gate has been passed and no pilot client has been chosen yet. It is the tool we intend to run our own engagements in, and it will be offered to clients only after it has done that job for us.

At a glance
ForAgencies and delivery teams answering to clients
ShapeHosted, team-scoped; staff panel, client workspace, agent API
StackLaravel 12 modular monolith, MySQL, Redis, TypeScript CLI & SDK
PlansEntitlement-based tiers; client workspace and agent execution unlock upgrades
StatusIn development, pre-release
Capabilities
Projects from Blueprint, Build and Care & Growth templates One work item record: backlog, board, saved views, My Work Milestones, sprints and releases with client visibility Versioned project updates with health and cadence Client requests with immutable intake and an SLA clock Decision log and revision-bound approvals with 2FA Portfolio view with calculation basis on every figure Agent identities, expiring grants, CLI and SDK
Evidence status

Screens on this page are ProjectHubs running on a seeded demonstration dataset: every team, project, person and work item is fictional. No adoption figures are shown because the product has not been released.

The product

Four screens, one record

Each screen reads from the same project record. Change a work item on the board and the backlog rank, the portfolio count and the client’s shared view all agree without a sync step.

Project overview hub with links to work items, backlog, board and client governance, and an at-a-glance panel showing lifecycle, dates and commercial phase
Project overview. The hub for one project: which delivery view to open, the client governance entry points, and the commitment the project runs under — lifecycle, dates, commercial phase and setup checks.
Ordered backlog with saved views, a filter bar, and rows showing reference, title, type, state, priority and rank
Backlog. One ordered list of intended work. Filters narrow the canonical list without changing any item, and a filter can be saved as a view for the whole team.
Portfolio view listing projects with owner, target date, next milestone, health, progress with calculation basis, update freshness and pending client actions
Portfolio. One row per project the viewer may read. Every figure is the same figure the project screen shows, and every count links to the list it was taken from.
Project members list with internal team and client contact filters, each member's project role and status, and a manage member action
Members. Internal team and client contacts on one list, each with a project role rather than a team role. A suspended member is visible, not silently removed.
Decisions

Three calls that shaped it

Agents get work orders, never authority An agent can brainstorm, spec, plan and implement under a grant that expires. Approving, merging, deploying and closing stay human, by design of the authority matrix rather than by convention.
The client sees a slice, not a filter Client responses are built from field allowlists, so a new internal column is invisible by default. Sharing something with a client is an explicit act that leaves a trace.
Every number says how it was computed Progress and health carry a calculation basis and a freshness stamp. A metric without either is a guess with a decimal point.
Running client projects across a tracker, a deck and a chat? Ask to be considered as a pilot, or start with a Blueprint for the delivery system your team actually needs.
Request a call →