Documentation Index
Fetch the complete documentation index at: https://grantmaster.dev/llms.txt
Use this file to discover all available pages before exploring further.
Widget Dashboard
| Status | Updated | Covered Files |
|---|
| 🟢 Stable | 2026-02-22 | src/components/widgets/, src/shared/platform/dashboardPresetService.ts, src/features/dashboard/ |
Overview
The Widget Dashboard provides a role-aware, tab-organized analytics surface with 85 lazy-loaded widgets across 8 categories. Each user role sees a curated default layout, and users can customize their dashboards by reordering, hiding, or adding widgets from the widget library.
Dashboard Tabs (8)
| Tab | Category | Widget Count | Audience |
|---|
| Personal | PERSONAL | 15 | All roles — daily briefing, shortcuts, notifications |
| Projects | PROJECTS | 7 | Project lifecycle, deliverables, risk |
| Finance | FINANCE | 13 | Budgets, costs, revenue, cash flow |
| Grants | GRANTS | 12 | Pipeline, applications, funders, benchmarks |
| Users | USERS | 11 | Team capacity, staffing, utilization, HR |
| Mission | MISSION | 9 | Impact, SDGs, strategic alignment, donor stewardship |
| Compliance | COMPLIANCE | 10 | Audit, regulations, policies, risk |
| Platform | PLATFORM | 7 | Cross-org intelligence (SuperAdmin only) |
Total: 84 widgets
Personal (15)
Daily briefing widgets shown on the Personal tab:
| Widget ID | Description |
|---|
action-items | Pending tasks requiring attention |
ai-insights-feed | AI-generated insights and recommendations |
cost-savings | AI-identified cost optimization opportunities |
deadline-summary | Upcoming deadlines summary |
my-deadlines | Personal deadline tracker |
notification-preview | Recent notification preview |
organization-health-scorecard | Overall org health metrics |
pending-journals | Unsubmitted journal entries |
pending-tasks | Tasks assigned to user |
personal-contract | Current employment contract summary |
quick-actions | Shortcut buttons for common actions |
quick-time-entry | Inline time entry form |
recent-activity | Activity feed |
time-reclaimed | AI time savings tracker |
upcoming-deadlines | Calendar-style deadline view |
Finance (13)
| Widget ID | Description |
|---|
budget-composition | Budget breakdown by category |
budget-health | Budget utilization health indicators |
budget-modification-tracker | Budget amendment history |
budget-utilization | Spend vs. budget progress bars |
burn-rate-comparison | Actual vs. planned burn rates |
cash-flow-forecast | Projected cash flow timeline |
donor-revenue-concentration | Revenue diversification analysis |
fund-drawdown-schedule | Grant fund drawdown timeline |
indirect-cost-recovery | IDC recovery tracking |
key-metrics | Generic KPI display (library-only) |
operating-reserve-months | Operating reserve runway |
overhead-ratio | Administrative overhead percentage |
restricted-unrestricted-funds | Fund restriction breakdown |
Grants (12)
| Widget ID | Description |
|---|
active-grant-map | Geographic map of active grants |
benchmarking | Cross-org performance benchmarks |
funder-relationship-health | Funder engagement scoring |
grant-application-calendar | Upcoming application deadlines |
grant-closeout-checklist | Closeout task tracker |
grant-health-matrix | Multi-dimensional grant health |
grant-milestone-tracker | Milestone progress timeline |
grant-revenue-pipeline | Revenue pipeline forecast |
grant-success-rate | Historical win/loss rates |
predictive-closeout-risk | AI closeout risk prediction |
proposal-win-rate | Proposal success analytics |
reporting-burden-heatmap | Report workload distribution |
See src/components/widgets/index.ts for the full registry of all 84 widgets.
Preset Service
File: src/shared/platform/dashboardPresetService.ts
Architecture
┌──────────────────────────────────────────────────┐
│ computePreset(role, tabId, widgets, filter) │
│ │
│ 1. Get curated order for role + tab │
│ 2. Apply category filter │
│ 3. Place curated widgets first │
│ 4. Append remaining (specialty tabs only) │
│ 5. Return { visibleOrder, hidden } │
└──────────────────────────────────────────────────┘
Tab Behavior
| Tab | Default Behavior |
|---|
| Personal | Only curated widgets shown; others available in library |
| Specialty (all other tabs) | All category widgets shown; curated ones ordered first |
Curated Orders
Each tab has role-specific curated widget orders (5 roles × 8 tabs = 40 configurations):
| Role | Personal | Projects | Finance | Grants | Users |
|---|
| SuperAdmin | 9 | 7 | 13 | 12 | 11 |
| Admin | 9 | 7 | 11 | 10 | 11 |
| Manager | 8 | 4 | 3 | 6 | 9 |
| Member | 6 | 2 | 1 | 2 | 1 |
| Auditor | 4 | 3 | 4 | 3 | 4 |
Some widgets are excluded from default layouts and only available through the widget library:
key-metrics — Generic KPI placeholder
All widgets use dynamic imports via WIDGET_LOADER_MAP for code splitting:
export const WIDGET_LOADER_MAP: Record<string, () => Promise<any>> = {
'budget-health': () => import('./finance/BudgetHealthWidget'),
'grant-success-rate': () => import('./grants/GrantSuccessRateWidget'),
// ... 84 entries total
};
Each widget module exports a default component and a metadata object describing its dimensions, category, and configuration.
Widgets declare their preferred size via metadata:
| Size | Grid Behavior |
|---|
COMPACT | 1×1 grid cell — small metric cards |
WIDE | 2×1 — horizontal charts and tables |
TALL | 1×2 — vertical lists and timelines |
CHART | 2×2 — full charts and complex visualizations |
The preset service orders larger widgets (TALL/CHART) before COMPACT for dense grid packing.
Key Files Reference
| File | Purpose |
|---|
src/components/widgets/index.ts | Widget registry — 85 lazy-loaded widgets |
src/shared/platform/dashboardPresetService.ts | Preset computation, curated orders, category filters |
src/features/dashboard/ | Dashboard page, tab navigation, customization UI |
src/shared/platform/widget.contracts.ts | WidgetInstance, WidgetCategory, WidgetDefinition types |
docs/engineering/frontend/widget-system.md | Widget authoring guide and metadata schema |