dashboards
sidebar_position: 26 title: "PPM Dashboards" description: "Create, configure, and share customizable PPM dashboards with drag-and-drop widget grids scoped to personal, team, portfolio, project, or program contexts."
PPM Dashboards
PPM Dashboards give every stakeholder a configurable view of the data that matters to them. PMO leads can build organization-wide executive summaries, project managers can assemble project-specific health monitors, and team members can maintain personal dashboards with the widgets most relevant to their daily work — all within the same dashboard infrastructure.
Overview
A dashboard is a named grid canvas containing one or more widgets. Each widget occupies a position on a 12-column grid and displays a specific data visualization, from simple KPI cards and budget bars to full EVM S-curves and resource heatmaps. Dashboards are scoped to a level — personal, team, organization, portfolio, project, or program — so the same infrastructure serves every layer of the PPM hierarchy.
The dashboard list page at /{workspaceSlug}/portfolio/dashboards is the management hub for creating, duplicating, setting defaults, and deleting dashboards. Individual dashboards open in the dashboard builder, where widgets can be added, resized, and repositioned by dragging.
Getting Started
- Navigate to Portfolio > Dashboards in the sidebar.
- Click New Dashboard to open the creation dialog.
- Choose a name, optional description, and scope.
- For entity-scoped dashboards (portfolio, project, or program), select the target entity.
- Click Create. The empty dashboard canvas opens.
- Click Add Widget and choose a widget type to populate the canvas.
- Drag widgets to rearrange them. Resize by dragging the bottom-right corner.
- Toggle Set as Default to make this dashboard the landing view for its scope.
Key Concepts
Dashboard Scopes
Every dashboard belongs to exactly one scope. Scopes determine who sees the dashboard and what data context it operates in:
| Scope | Description |
|---|---|
personal | Visible only to the creator |
team | Shared across a workspace team |
organization | Shared across the full organization |
portfolio | Attached to a specific portfolio |
project | Attached to a specific project |
program | Attached to a specific program |
Entity-scoped dashboards (portfolio, project, program) require a scopeEntityId that identifies which portfolio, project, or program the dashboard belongs to.
Default Dashboard
Each (scope, entity) combination can have at most one default dashboard. Marking a dashboard as default automatically unmarks the previous default for the same scope and entity. Default dashboards are presented as the first view when a user navigates to a portfolio, project, or program — reducing the number of clicks needed to reach key information.
Widget Types
ProBeya supports 13 widget types, each with preset default and minimum grid dimensions:
| Widget Type | Label | Default Size (w × h) |
|---|---|---|
kpi_card | KPI Card | 3 × 2 |
chart | Chart | 6 × 4 |
table | Data Table | 6 × 4 |
metric | Single Metric | 2 × 2 |
milestone_timeline | Milestone Timeline | 12 × 3 |
gantt_mini | Mini Gantt | 8 × 4 |
resource_heatmap | Resource Heatmap | 6 × 4 |
pipeline_funnel | Pipeline Funnel | 4 × 4 |
bubble_chart | Bubble Chart | 6 × 5 |
evm_s_curve | EVM S-Curve | 8 × 4 |
budget_bar | Budget Bar | 6 × 3 |
risk_heatmap | Risk Heatmap | 5 × 5 |
custom_query | Custom Query | 6 × 4 |
How It Works
Grid Layout
Widget positions are stored as JSONB objects with x, y, w, and h integer fields matching the react-grid-layout coordinate system. The grid uses a 12-column layout. When the user finishes dragging widgets, a single batchUpdateWidgetPositions call persists all position changes at once, avoiding one round-trip per widget.
Duplicate
The duplicate procedure deep-clones a dashboard: it creates a new dashboard record with a (Copy) name suffix and inserts fresh copies of every widget with new IDs. The clone is never marked as default, preventing it from displacing the original default dashboard.
Widget Data Resolution
Fetching a dashboard via getById returns the dashboard metadata and widget configurations without resolving live data. Widget data is resolved separately via getWidgetData, which accepts a widget ID and returns the current metric or visualization data for that widget type. This separation keeps the dashboard load fast — layout is rendered immediately and data loads per-widget.
Batch Position Updates
After a drag-drop rearrangement, the UI sends a single batchUpdateWidgetPositions call containing an array of { widgetId, position } objects. The server verifies each widget belongs to the same dashboard before updating, preventing cross-dashboard position tampering.
Configuration
| Setting | Location | Description |
|---|---|---|
| Dashboard name | Dashboard > Edit | Display name for the dashboard |
| Scope | Dashboard > Edit | Determines visibility and data context |
| Scope entity | Dashboard > Edit | Required for portfolio/project/program scopes |
| Default flag | Dashboard > Set Default | Makes this the landing dashboard for its scope |
| Widget type | Widget > Add Widget | Determines which data visualization renders |
| Widget configuration | Widget > Edit | Type-specific settings (metrics, filters, chart type) |
| Widget position | Drag & drop on canvas | x, y, width, height on the 12-column grid |
Permissions
- View dashboards: all organization members with PPM access can view dashboards in their scope.
- Create dashboard: all authenticated users can create personal dashboards; team/org/entity dashboards require the corresponding manager or admin role.
- Edit dashboard: dashboard creator or PPM admin.
- Delete dashboard: dashboard creator or PPM admin. Deletion cascades to all widgets.
- Set as default: dashboard creator or PPM admin.
- Duplicate dashboard: any user with view access to the source dashboard.
Tips & Best Practices
- Start with a template dashboard: duplicate an existing well-configured dashboard as a starting point rather than building from scratch each time.
- Use scope intentionally: a
portfolio-scoped dashboard automatically filters its widgets to data from that portfolio. Anorganization-scoped dashboard shows data across the full organization. - Pin the EVM S-Curve for active projects: the
evm_s_curvewidget is the most information-dense single widget for monitoring project health. Place it in the top-left of project-scoped dashboards. - Keep personal dashboards focused: personal dashboards work best when limited to 4-6 widgets covering your direct responsibilities. Organization-level dashboards can be broader.
- Set one default per scope: the default dashboard is what stakeholders see when they open a portfolio or project. Choose the most broadly useful dashboard for each scope rather than a personal view.
Before making significant changes to a shared dashboard, duplicate it and experiment on the copy. This prevents disrupting other users who rely on the original layout.
Dashboard deletion cascades to all widgets via the database foreign key. There is no soft-delete for dashboards — exports or screenshots before deletion are recommended for record-keeping.
Related Features
- PPM Overview -- Introduction to the full PPM module
- Earned Value Management -- EVM data that powers the S-Curve and KPI widgets
- Risks -- Risk data used by the Risk Heatmap widget
- Resource Reports -- Resource utilization data used by the Resource Heatmap widget
- Financial Reports -- Budget and cost data used by Budget Bar and KPI widgets
- Governance Framework -- Health rules that feed dashboard health indicators