Skip to main content
Back to ScopeForged

ScopeForged Documentation

Technical documentation, guides, and feature references for the ScopeForged client portal.

Dashboards & UI/Admin Dashboard

Admin Dashboard Guide

Last Updated: 2026-01-19 Status: Implemented Plan Reference: 012-admin-dashboard.md, 075-admin-dashboard-improvement.md, 123-universal-dashboard-builder.md, 124-dashboard-builder-improvements.md, 136-widget-service-refactoring.md, 137-dashboard-widget-expansion.md, 138-dashboard-widget-expansion-phase-2.md


Overview

The Admin Dashboard system provides administrators with comprehensive dashboards for monitoring the client portal. The system includes:

  1. Static Dashboard - The original dashboard with fixed widgets (/admin/dashboard?static)
  2. Universal Dashboard Builder - Create unlimited custom dashboards with 149+ widgets across 10 categories

Table of Contents

  1. Accessing Dashboards
  2. Dashboard Builder
  3. Widget Library
  4. Widget Categories
  5. Creating Dashboards
  6. Managing Widgets
  7. Dashboard Templates
  8. Technical Architecture
  9. Static Dashboard
  10. Related Features

Accessing Dashboards

Access PointURLDescription
Home Dashboard/admin/dashboardRedirects to default dashboard or static view
My Dashboards/admin/dashboardsDashboard manager
Specific Dashboard/admin/dashboards/{id}View a custom dashboard
Static Dashboard/admin/dashboard?staticOriginal static dashboard

Permissions

Only users with the Admin role can access admin dashboards.


Dashboard Builder

Overview

The Universal Dashboard Builder allows admins to:

  • Create unlimited named dashboards
  • Add widgets from a categorized library (145+ widgets across 10 categories)
  • Drag-and-drop to rearrange widgets
  • Resize widgets
  • Set a default dashboard
  • Share dashboards with other admins

Edit Mode

Click Edit Dashboard to enter edit mode:

  1. Widget Library - Sidebar appears with available widgets
  2. Drag & Drop - Reorder widgets by dragging
  3. Resize - Use +/- buttons to adjust widget width
  4. Remove - Click X to remove widgets
  5. Done Editing - Click to save and exit edit mode

Dashboard Settings

SettingDescription
NameDashboard title (editable in edit mode)
DescriptionOptional description
Is DefaultSet as your default dashboard
Is SharedMake available to other admins

Widget Library

Categories Overview (149+ Total Widgets)

CategoryWidget CountDescription
Revenue & Financial31Financial metrics, invoicing, payments, trends
Clients31Client metrics, pipeline variants, health, surveys/feedback
Projects21Project status, tasks, milestones, deadlines
Activity18Activity feed, meetings, documents, reports
System Health15System health, API monitoring, webhooks
Compliance & Security16Compliance checks, alerts, workflows
Time & Resources11Time tracking, utilization, team scheduling
Communication8Messages, conversations, internal notes
Files & Storage7File uploads, share links, storage metrics
Navigation & Links2Quick navigation widgets

Widget Categories

Communication (8 widgets)

Messages, conversations, and internal notes tracking.

Widget KeyTypeDescription
unread_messagesmetricTotal unread client messages
recent_conversationslistLatest active conversations
messages_todaymetricMessages sent/received today
conversation_response_timemetricAverage time to respond to clients
internal_notes_recentlistLatest internal notes added
unread_mentionsmetric@mentions awaiting attention
messages_by_clientchart (bar)Message volume by client
communication_summarymetric_gridMessages, notes, mentions counts

Files & Storage (7 widgets)

File uploads, share links, and storage metrics.

Widget KeyTypeDescription
active_share_linksmetricCurrently active file share links
expiring_share_linkslistShare links expiring in 7 days
recent_file_uploadslistLatest files uploaded
file_storage_by_clientchart (bar)Storage usage per client
file_versions_todaymetricNew file versions created today
virus_scan_statusmetric_gridPassed, failed, pending scans
file_activity_trendchart (line)Upload/download trend over 30 days

Revenue & Financial (31 widgets)

Core revenue metrics and financial analysis.

Widget KeyTypeDescription
total_revenuemetricRevenue this month
outstanding_invoices_countmetricCount of unpaid invoices
pending_invoicesmetricDraft and sent invoices
outstanding_amountmetricTotal outstanding $
total_invoicedmetricTotal invoiced in period
total_paidmetricTotal paid in period
total_overduemetricOverdue amount
collection_ratemetricPayment collection %
avg_payment_timemetricAverage days to payment
monthly_recurringmetricMonthly recurring revenue
total_revenue_financialmetricTotal revenue with invoice count
invoice_status_chartchart (doughnut)Draft/Sent/Paid/Overdue
invoice_aging_chartchart (bar)Aging buckets
revenue_trend_chartchart (line)6-month revenue
revenue_trend_1_monthchart (line)Daily revenue last month
revenue_trend_12_monthschart (line)Monthly revenue last year
revenue_chartchart (bar)Monthly revenue visualization
revenue_by_clientlist_progressClient revenue with progress bars
invoice_aging_detailedagingAging buckets with chart
revenue_forecastforecastNext 6 months prediction
financial_summaryfinancial_summaryInvoiced, paid, outstanding, overdue
revenue_by_servicechart (doughnut)Revenue by service type
invoice_payment_methodschart (doughnut)Payments by method
recurring_revenue_trendchart (line)MRR trend over 12 months
Payments
payments_this_monthmetricTotal payment count this month
payment_trendchart (line)Payments received over 6 months
recurring_invoices_activemetricActive recurring invoice count
recurring_revenue_projectionmetricNext month's expected recurring

Clients (31 widgets)

Client management and stage tracking.

Widget KeyTypeDescription
total_clientsmetricTotal client count
active_clientsmetricActive client count
new_clients_this_monthmetricNew this month
client_retention_ratemetricRetention %
average_client_ltvmetricAverage lifetime value
average_client_tenuremetricAverage months as client
churn_ratemetric12-month churn rate
client_stage_pipelinepipelineAll 14 stages visual (original)
client_stage_pipeline_groupedpipeline_groupedStages grouped by phase (Lead/Active/Completed/Ended)
client_stage_pipeline_rowspipeline_rowsTwo-row layout for better readability
client_stage_pipeline_listpipeline_listVertical list with progress bars
client_stage_pipeline_cardspipeline_cardsCompact cards with abbreviations and tooltips
client_stage_summarymetric_grid4 key stage counts
client_stage_distributionchart (doughnut)Clients by stage
recent_clientstableRecently updated
top_clientslist_progressBy revenue with progress
at_risk_clientslistLow health score clients
client_health_distributionchart (doughnut)Distribution by health
client_growth_trendchart (line)New vs churned over time
client_ltv_analysistableRevenue, projects, health by client
client_summarysummaryTotal, active, new with retention
client_health_trendchart (line)Health score trend over 6 months
clients_by_sourcechart (doughnut)Distribution by acquisition source
client_acquisition_trendchart (line)Where clients come from over time
Surveys & Feedback
satisfaction_scoremetricAverage client satisfaction rating
recent_feedbacklistLatest project feedback submissions
nps_scoremetricNet Promoter Score calculation
pending_approvalsmetricDeliverables awaiting client approval
feedback_by_ratingchart (doughnut)Distribution of ratings
satisfaction_trendchart (line)Satisfaction scores over 6 months

Projects (21 widgets)

Project status and milestone tracking.

Widget KeyTypeDescription
active_projectsmetricActive project count
completed_projectsmetricCompleted count
overdue_projects_countmetricOverdue count
completion_ratemetric% completed on time
on_time_ratemetric% delivered on time
total_project_valuemetricTotal contract value
avg_project_durationmetricAverage project length
project_status_chartchart (doughnut)Draft/Active/Completed
project_timelinechart (line)Projects over time
upcoming_deadlineslistDue in next 14 days
overdue_projectslistPast deadline
recent_fileslistRecently uploaded files
projects_by_typechart (doughnut)Distribution by type
milestone_progresslist_progressMilestone completion
project_health_overviewmetric_gridHealth metrics summary
Tasks & Milestones
tasks_due_todaymetricTasks with today's deadline
tasks_overduemetricTasks past deadline
upcoming_milestoneslistMilestones due in 14 days
milestone_acceptance_ratemetricClient milestone approval rate
tasks_by_statuschart (doughnut)Task distribution by status
project_progress_overviewlist_progressProgress bars for active projects
tasks_completed_this_weekmetricTasks completed in current week

Activity (18 widgets)

Activity feed, meetings, and documents.

Widget KeyTypeDescription
activity_feedlistRecent activity
activity_summarysummaryPeriod stats
user_activity_chartchart (bar)Activity by user
activity_by_typechart (doughnut)Activity distribution
login_activitylistRecent logins
Meetings & Discovery
upcoming_meetingslistClient meetings in next 7 days
discovery_calls_this_weekmetricScheduled discovery calls
meeting_completion_ratemetricCompleted vs scheduled %
questionnaire_submissionsmetricNew submissions this month
discovery_pipelinepipelineLeads by discovery stage
Documents & Approvals
pending_documentsmetricDocuments awaiting client action
document_requests_listlistRecent requests with status
avg_document_turnaroundmetricAverage days to completion
documents_by_statuschart (doughnut)Pending/Signed/Expired
Reports
scheduled_reportsmetricActive scheduled report count
reports_generated_todaymetricReports generated today
recent_reportslistLatest generated reports

Compliance & Security (16 widgets)

Compliance scores, security alerts, and workflows.

Widget KeyTypeDescription
compliance_scoremetricOverall compliance %
framework_statusmetric_gridSOC2/GDPR/General scores
mfa_adoptionmetricMFA adoption %
inactive_accountsmetricAccounts inactive 90+ days
audit_logs_todaymetricToday's log count
security_alertsmetricActive security alerts
compliance_checkstableAll checks + status
open_findingslistFindings needing attention
Alerts & Workflows
active_alertsmetricUnresolved alerts by severity
alerts_by_typechart (bar)Alert distribution by category
workflow_executionsmetricWorkflows executed today
workflow_success_ratemetricSuccessful vs failed %

Time & Resources (11 widgets)

Time tracking and team utilization.

Widget KeyTypeDescription
billable_utilization_ratemetricBillable vs total hours %
time_by_projectchart (bar)Hours by project
time_by_clientchart (doughnut)Hours by client
team_workloadlist_progressHours per team member
unbilled_timemetricTotal unbilled hours value
weekly_time_summarymetric_gridThis week's hours breakdown
Team Scheduling
pending_time_offmetricTime off requests awaiting approval
upcoming_time_offlistApproved time off in next 14 days
running_timerslistCurrently active timers
timesheet_approval_pendingmetricTimesheets awaiting approval
team_availabilitylist_progressWeekly availability overview

Quick navigation and shortcuts.

Widget KeyTypeDescription
analytics_hublink_gridFinancial/Project/Client/Custom
compliance_linkslink_gridReports/Timeline/History

System Health (15 widgets)

System health, API monitoring, and quick actions.

Widget KeyTypeDescription
system_healthmetric_gridQueue/Cache/DB status
quick_actionsactionsCreate client/project/invoice
personalized_insightsinsightsAI-powered insights
API & Webhooks
active_api_keysmetricCount of active API keys
api_calls_todaymetricAPI requests in last 24 hours
api_usage_trendchart (line)API calls over 30 days
webhook_delivery_ratemetricSuccessful webhook delivery rate
webhook_failureslistRecent webhook delivery failures
api_rate_limit_statusmetric_gridKeys approaching rate limits

Widget Types

TypeComponentDescription
metricmetric.blade.phpSingle value with optional trend
chartchart.blade.phpChart.js visualization (bar, line, doughnut)
listlist.blade.phpClickable list items
list_progresslist-progress.blade.phpList with progress bars
tabletable.blade.phpData table with headers
pipelinepipeline.blade.phpHorizontal stage pipeline (original)
pipeline_groupedpipeline-grouped.blade.phpStages grouped into phase columns
pipeline_rowspipeline-rows.blade.phpTwo-row layout for 12+ stages
pipeline_listpipeline-list.blade.phpVertical list with progress bars
pipeline_cardspipeline-cards.blade.phpCompact cards with abbreviations
metric_gridmetric-grid.blade.phpGrid of metrics
link_gridlink-grid.blade.phpNavigation cards
insightsinsights.blade.phpAI insights banner
actionsactions.blade.phpQuick action buttons
summarysummary.blade.phpSummary card with multiple metrics
financial_summaryfinancial-summary.blade.phpFinancial metrics layout
agingaging.blade.phpAging buckets with visualization
forecastforecast.blade.phpPrediction chart

Creating Dashboards

From Scratch

  1. Navigate to Dashboard > My Dashboards
  2. Click Create Dashboard
  3. Enter a name and optional description
  4. Click Create
  5. Enter Edit Mode to add widgets

From Template

  1. Navigate to Dashboard > My Dashboards
  2. Click From Template
  3. Select a template:
    • Admin Overview - Clients, projects, revenue, activity
    • Client Focused - Pipeline, stages, client metrics
    • Compliance - Security checks, audit logs, MFA
    • Analytics Overview - Financial trends, insights

Managing Widgets

Adding Widgets

  1. Enter Edit Mode
  2. Browse widget library (left sidebar)
  3. Click a widget to add it

Removing Widgets

  1. Enter Edit Mode
  2. Hover over widget
  3. Click the red X button

Resizing Widgets

  1. Enter Edit Mode
  2. Hover over widget
  3. Use +/- buttons to adjust width (3-12 columns)

Reordering Widgets

  1. Enter Edit Mode
  2. Drag widgets to new position
  3. Drop to reorder

Dashboard Templates

Admin Overview

Default dashboard for administrators:

  • total_clients, active_projects, outstanding_invoices_count, total_revenue
  • invoice_status_chart, project_status_chart, revenue_trend_chart
  • activity_summary, upcoming_deadlines, quick_actions

Client Focused

Pipeline and client management:

  • client_stage_pipeline (full width)
  • client_stage_summary, total_clients, new_clients_this_month
  • recent_clients, top_clients, at_risk_clients

Compliance Dashboard

Security and compliance monitoring:

  • compliance_score, framework_status
  • mfa_adoption, inactive_accounts, audit_logs_today, security_alerts
  • compliance_checks, open_findings

Analytics Overview

Financial analysis:

  • personalized_insights (full width)
  • total_invoiced, total_paid, total_overdue, collection_rate
  • revenue_trend_chart, invoice_aging_chart
  • top_clients

Technical Architecture

Services (Federated Provider Pattern)

The widget system uses a federated provider architecture where each category has its own registry and data provider.

app/Services/Dashboard/
├── Contracts/
│   ├── WidgetDataProviderInterface.php
│   └── WidgetRegistryProviderInterface.php
├── AbstractWidgetDataProvider.php
├── WidgetRegistry.php              # Orchestrator
├── WidgetDataService.php           # Orchestrator
└── Widgets/
    ├── Activity/
    │   ├── ActivityWidgetDataProvider.php
    │   └── ActivityWidgetRegistry.php
    ├── Client/
    │   ├── ClientWidgetDataProvider.php
    │   └── ClientWidgetRegistry.php
    ├── Communication/
    │   ├── CommunicationWidgetDataProvider.php
    │   └── CommunicationWidgetRegistry.php
    ├── Compliance/
    │   ├── ComplianceWidgetDataProvider.php
    │   └── ComplianceWidgetRegistry.php
    ├── Files/
    │   ├── FilesWidgetDataProvider.php
    │   └── FilesWidgetRegistry.php
    ├── Project/
    │   ├── ProjectWidgetDataProvider.php
    │   └── ProjectWidgetRegistry.php
    ├── Revenue/
    │   ├── RevenueWidgetDataProvider.php
    │   └── RevenueWidgetRegistry.php
    ├── SystemHealth/
    │   ├── SystemHealthWidgetDataProvider.php
    │   └── SystemHealthWidgetRegistry.php
    └── TimeResources/
        ├── TimeResourcesWidgetDataProvider.php
        └── TimeResourcesWidgetRegistry.php

Controllers

ControllerPurpose
DashboardControllerStatic dashboard, redirects
DashboardBuilderControllerCRUD for custom dashboards

Models

ModelDescription
DashboardUser's dashboard with name, settings
DashboardWidgetWidget instance with position, config

API Routes

MethodRouteDescription
GET/admin/dashboardsList dashboards
POST/admin/dashboardsCreate dashboard
GET/admin/dashboards/{id}View dashboard
PUT/admin/dashboards/{id}Update dashboard
DELETE/admin/dashboards/{id}Delete dashboard
POST/admin/dashboards/{id}/widgetsAdd widget
DELETE/admin/dashboards/{id}/widgets/{widget}Remove widget
PUT/admin/dashboards/{id}/layoutUpdate layout
PATCH/admin/dashboards/{id}/set-defaultSet as default

Key Files

app/
├── Http/Controllers/Admin/
│   ├── DashboardController.php
│   └── DashboardBuilderController.php
├── Models/
│   ├── Dashboard.php
│   └── DashboardWidget.php
├── Services/Dashboard/
│   ├── Contracts/
│   ├── AbstractWidgetDataProvider.php
│   ├── WidgetRegistry.php
│   ├── WidgetDataService.php
│   └── Widgets/
│       ├── Activity/
│       ├── Client/
│       ├── Communication/
│       ├── Compliance/
│       ├── Files/
│       ├── Project/
│       ├── Revenue/
│       ├── SystemHealth/
│       └── TimeResources/

resources/views/
├── admin/dashboards/
│   ├── index.blade.php      # Dashboard manager
│   ├── show.blade.php       # Dashboard view with edit mode
│   └── create.blade.php     # Create form
├── components/dashboard/
│   ├── widget-library.blade.php
│   └── widgets/
│       ├── metric.blade.php
│       ├── chart.blade.php
│       ├── list.blade.php
│       ├── list-progress.blade.php
│       ├── table.blade.php
│       ├── pipeline.blade.php
│       ├── pipeline-grouped.blade.php
│       ├── pipeline-rows.blade.php
│       ├── pipeline-list.blade.php
│       ├── pipeline-cards.blade.php
│       ├── metric-grid.blade.php
│       ├── link-grid.blade.php
│       ├── insights.blade.php
│       ├── actions.blade.php
│       ├── summary.blade.php
│       ├── financial-summary.blade.php
│       ├── aging.blade.php
│       └── forecast.blade.php

Adding New Widgets

To add a new widget:

  1. Add to Registry: In the appropriate *WidgetRegistry.php, add the widget definition:

    'my_new_widget' => [
        'key' => 'my_new_widget',
        'name' => 'My New Widget',
        'description' => 'Description here',
        'category' => 'clients',
        'type' => 'metric',
        'icon' => 'chart-bar',
        'default_size' => ['w' => 3, 'h' => 1],
        'data_provider' => 'getMyNewWidget',
        'click_url' => 'admin.clients.index',
    ],
    
  2. Add Data Provider Method: In the corresponding *WidgetDataProvider.php:

    public function getMyNewWidget(): array
    {
        return [
            'value' => 42,
            'label' => 'My Metric',
        ];
    }
    
  3. Register in getSupportedWidgets(): Add the widget key to the provider's supported list.

Technical Notes

Tailwind Dynamic Classes

Widget column spans use dynamic class names (col-span-{width}). These are safelisted in tailwind.config.js to prevent purging:

  • col-span-1 through col-span-12
  • md:col-span-1 through md:col-span-12
  • lg:col-span-1 through lg:col-span-12

Drag and Drop

The drag-and-drop system uses HTML5 native drag events with a placeholder-based approach:

  • Dragged widget is marked with isDragging: true and styled as semi-transparent
  • A dashed placeholder appears at the drop position
  • Position is calculated based on mouse position relative to widget centers
  • Charts are reinitialized after drop via $nextTick(() => this.initCharts())

Chart Reinitialization

Charts must be reinitialized after certain operations:

  • After drag-and-drop (finalizeDrop())
  • After widget resize (resizeWidget())
  • After widget deletion (removeWidget())
  • This is handled via this.$nextTick(() => this.initCharts())

Widget Key Format

Widget keys in the JavaScript widgets object use string prefixes (e.g., widget_102) to preserve PHP's insertion order, since Object.entries() sorts numeric keys.


Static Dashboard

The original static dashboard remains available at /admin/dashboard?static:

Overview Cards

CardMetricDescription
Total ClientsCountAll registered clients
Active ProjectsCountProjects with "active" status
Pending InvoicesAmountUnpaid invoice total
This Month RevenueAmountPaid invoices this month

Charts

  • Invoice Status (doughnut)
  • Project Status (doughnut)
  • Revenue Trend (line)

Activity

  • Activity summary by period
  • Recent activity feed

Lists

  • Overdue invoices
  • Upcoming project deadlines

FeatureRelationship
AuthorizationAdmin role required
Client ManagementClient metrics, surveys & feedback
Project ManagementProject metrics, tasks & milestones
InvoicingFinancial metrics, payments
AnalyticsAnalytics widgets
Audit & ComplianceCompliance widgets
Time TrackingTime & Resources, team scheduling
Workflow AutomationWorkflow widgets
MessagingCommunication widgets
File ManagementFiles & Storage widgets
API ManagementAPI & Webhooks widgets

Best Practices

For Dashboard Design

  1. Start with templates - Use pre-built templates as starting points
  2. Group related widgets - Keep metrics together by category
  3. Use full-width wisely - Pipeline and insights work well full-width
  4. Limit widgets - 8-12 widgets per dashboard for clarity

For Performance

  1. Refresh sparingly - Data is cached for performance
  2. Use specific dashboards - Different dashboards for different tasks
  3. Remove unused widgets - Keep dashboards focused

Troubleshooting

IssueSolution
Dashboard won't loadCheck browser console for errors
Widget shows emptyVerify data exists for that metric
Drag-drop not workingEnsure you're in Edit Mode
Layout not savingCheck network requests for errors
New widget not appearingCheck widget is in getSupportedWidgets()

See Also