Dashboard Overview
The Dashboard module is your fully customisable, role-based analytics and operations hub. It consolidates real-time metrics, charts, lists, calendars, and AI-powered insights into a single interface — giving every user an at-a-glance view of what matters most to their role.
Accessing the Dashboard
Click Dashboard in the main sidebar navigation. The Dashboard is the first page you see after logging in, accessible at /dashboard. All authenticated users have access to their own dashboards regardless of role.
Key concepts
Before diving in, familiarise yourself with the core building blocks:
- DashboardLayout — A saved dashboard configuration. Each layout stores its name, description, grid settings, and the collection of widgets it contains. You can create multiple layouts and switch between them at any time.
- DashboardWidget — An individual widget placed on a dashboard. Each widget has a type (e.g., kpi_tile, line_chart, overdue_invoices), a position on the grid, sizing constraints, and its own configuration and cache settings.
- Templates — Pre-built dashboard configurations for different roles: Executive, Operations, Financial, Warehouse, and Crew. Templates provide a starting point that you can customise freely.
- Sharing — Dashboards can be shared with individual users or entire roles, with separate view and edit permissions.
- Forced Dashboards — A CoreAdmin feature that assigns dashboards to users or roles in additive mode (appears alongside personal dashboards) or exclusive mode (replaces all personal dashboards).
Grid layout system
Dashboards use a 12-column grid powered by GridStack. The default layout configuration is stored in layout_config with the following defaults:
- Grid columns — 12 columns across the full width
- Row height — 80 pixels per grid row
- Margins — 10 pixels horizontal, 10 pixels vertical between widgets
- Container padding — 10 pixels on all sides
Widgets snap to the grid automatically. Drag any widget to reposition it, or drag the corners to resize. Collision detection prevents widgets from overlapping.
Widget library
NexusRMS provides 50+ pre-built widgets across seven categories:
- KPI — Key performance indicator tiles with trend arrows and live update animations
- Charts — Line, bar, donut, pie, area, gauge, funnel, scatter, heat map, and combo charts (all Chart.js)
- Lists — Data lists for recent projects, overdue invoices, upcoming deliveries, maintenance due, and top equipment
- Calendar — My schedule, project calendar, and equipment availability calendar
- Activity — Activity feeds showing recent system events, tasks, and notifications
- Financial — Cash flow chart, payment collection rate gauge, profit and loss summary, revenue by category
- AI — Predictive revenue forecast, at-risk clients, equipment investment recommendations, anomaly alerts (requires Analytics & AI addon)
Role-based default dashboards
When a user first accesses the Dashboard, NexusRMS creates a default dashboard tailored to their role. Five system templates are available via DashboardTemplateService:
- Executive — Revenue KPIs, revenue trend line chart, profit by category, quote conversion funnel, cash flow area chart
- Operations — Active projects, equipment on rent, project calendar, equipment availability heat map, crew utilisation
- Financial — Revenue and margin KPIs, revenue vs expenses combo chart, payment collection rate gauge, overdue invoices list, aged receivables
- Warehouse — Available equipment, pending check-ins, low stock alerts, equipment by status, packing lists due today
- Crew — My schedule today and this week, hours and earnings KPIs, my tasks, notifications, available shifts
Real-time updates
Widget data updates in real time via Laravel Reverb WebSockets through the useDashboardRealTime composable. If the WebSocket connection fails after five reconnection attempts, the system automatically falls back to HTTP polling at a 30-second interval. A connection status indicator shows whether you are connected via WebSocket (Live), polling (Polling Mode), or disconnected.
Widget caching
Each widget has an independent cache with a configurable TTL. The default is 300 seconds (5 minutes), stored in cache_ttl_seconds. Caching significantly reduces database load — the WidgetCacheService stores calculated data with an expiry timestamp and serves it on subsequent requests until the TTL expires.
Email subscriptions
Subscribe to any dashboard to receive automated snapshots by email. Subscriptions support daily, weekly, or monthly frequency, delivered as PDF, PNG, or an interactive link to the live dashboard.
Forced dashboards and widget locking
CoreAdmins can assign dashboards to specific users or roles using the ForcedDashboardService. Additive mode adds the forced dashboard alongside the user’s personal dashboards. Exclusive mode replaces all personal dashboards entirely. On forced dashboards, individual widgets can be locked via the WidgetLockingService — locked widgets cannot be moved, resized, or deleted by non-admin users.
Mobile responsiveness
On phones, the 12-column grid collapses to a single column with full-width widgets. Touch-friendly controls support drag and swipe gestures, and any widget can be expanded to a fullscreen view for detailed inspection.
Tips for getting started
- Start with the default template for your role and customise from there — it is quicker than building from scratch
- Pin KPI tiles in the top row for at-a-glance metrics, with charts and lists below
- Set a dashboard as your default using the star icon so it loads automatically on login
Next steps
Continue to the next article to learn about the main Dashboard page, including the stats section, widget grid, edit mode, and real-time connection status.
Was this article helpful?