Cost curve (S-curve)
Plots accumulated actual bookings over time against the budget and a linear target curve. Shows at a glance whether money is draining faster than planned.
Templates for the custom widget editor: cost curve, earned value, risk exposure, portfolio timeline. Paste the code, set the scope, save - the tile is done.
15 templates · project and portfolio level · every query runs with the viewer's permissions
All it takes is the administration permission and two minutes. None of it requires programming skills.
Administration → Custom widgets → 'New widget'. Give it a name and an icon, then set the scope to project or portfolio.
Copy the template's complete code block into the editor. The live preview renders it against sample data right away.
Enter the recommended tile size and save - the widget is then available for selection in the dashboards.
If you would rather start than search: each of these bundles covers one recurring meeting.
The four tiles that answer the same four questions every week: what is coming up, where is it stuck, what does the risk cost us, and on whose desk is it piling up.
Governance gaps before someone else finds them: untreated risks, fair-weather status lights, overdue reports and quality gates nobody has decided on.
The portfolio on four tiles: when things land, where the benefit sits, where the money clusters, and whether output matches spend.
Filter by scope, target role and topic. The code can be copied straight from the card.
15 templates
Plots accumulated actual bookings over time against the budget and a linear target curve. Shows at a glance whether money is draining faster than planned.
Derives the two classics SPI and CPI from progress, planned and actual costs of the work breakdown structure, and shows them as gauges with a plain-language reading.
Multiplies each risk's probability by its cost impact and sums that into an expected loss - placed next to the project budget.
Lists the next milestones with their remaining days and highlights overdue ones with the delay they have accumulated.
Separates quality gates from ordinary milestones and shows them as a ladder with decision dates: passed, pending, overdue.
Shows the work breakdown structure as an indented list with WBS code, progress bar and a counter of overdue tasks per element.
Groups open and overdue tasks by the responsible person across every element of the work breakdown structure.
Finds every highly rated risk and opportunity with not a single recorded measure, and lists them as a governance gap.
Shows opportunities whose window closes within the next 30, 60 or 90 days, and highlights those without a measure.
Groups all projects by when they are due to finish and flags those whose progress does not support that date.
Works out how many days ago each project's last status report was written and puts the laggards and never-reported projects on top.
Looks for projects reported as green even though the end date, the progress or the report age says otherwise.
Places every running project as a slim bar on one shared time axis, colored by schedule status, with a today line and a monthly grid.
Distributes projects across four quadrants of benefit rating and urgency, with bubble size representing the budget.
Sorts projects by budget and lays the cumulative curve over them: how few projects tie up 80 percent of the money.
A custom widget is a small, self-contained function. It receives a context, may load more data, writes HTML into an output target and reports back when it is done. There is no more contract than that - which is why the templates are this short and why they run without a single dependency.
widget.dataThe tile's context: the project with its dates and budget, plus the active color scheme so the tile stays readable in light and dark mode.
widget.query("…")Load what the context does not carry: costs, work breakdown structure, risks, opportunities, milestones or the projects of a portfolio - page by page, with the viewer's permissions.
widget.elThe output target in the dashboard. The templates write finished HTML and SVG into it, with no framework and no external library.
widget.done()Tells the dashboard that the tile has finished drawing. Until then it shows its loading state.
There is a chat below the code in the editor. Describe what the tile should show - the AI writes the code, runs it itself in the real sandbox, corrects its own errors and presents a validated proposal as a diff. Accepting and saving stay a deliberate click. The templates here are still the faster route whenever one of them fits.
What tends to be open before the first widget of your own.
Not to copy one. Create the widget, paste the code block, set the scope and size, save. To adapt it, the constants at the top of the file are usually enough - currency, thresholds, time windows. Only rewriting the presentation itself calls for actual code, and even then the AI widget agent can take over.
Creating, editing, activating and deleting requires the administration permission. Every signed-in person may see the widgets and add them to their dashboard - what numbers they see inside is still governed by their own permissions.
No. Every query inside a widget runs with the viewer's permissions, not with those of the person who created it. Anyone not allowed to see a project's cost data gets an explanatory note instead of the tile at that point. Every template in this library handles that case explicitly.
In the personalizable dashboards: the portfolio dashboard, the dashboard of a portfolio container and the project profile. The scope decides where a widget is offered at all. Inside the dashboard, tiles can be dragged, resized and hidden freely.
Yes. Every save that changes the code automatically creates a revision - the last thirty per widget, with timestamp, the person who saved and whether the version was written by hand or came from an accepted AI proposal. An older version can be loaded back into the editor and becomes the current one again with a normal save.
No. Custom widgets are part of the feature set regardless of edition. Only the AI widget agent in the editor requires a configured AI module, because it runs through the tenant's AI provider.
Width by height in grid units. The dashboard grid has twelve columns, and one height unit is roughly 38 pixels. The figure is a starting point that makes the tile look right immediately - inside the dashboard, every tile can be resized freely afterwards.
Try WORKSPACE.PM for thirty days with every feature. The templates on this page work in a trial tenant exactly as they do in production.