Getting started
- Install
spiggle/visual-dashboardsand run migrations. - Register
VisualDashboardsPlugin::make()in your Filament panel provider. - Create a dashboard under Dashboards → Custom Dashboards.
- Click Add dashlet and complete the Filament wizard: data source → filters → transform → visualization → preview and publish.
- Drag and resize cards on the grid — cards wrap to the next row and never cover each other. Layout saves after you stop moving.
- Use Edit or Remove on any card. Remove asks for confirmation.
Data sources
- Data model — Users, daily logins by role, form submissions, form audit log (when Form Builder is installed), and sample metrics.
- Database table — whitelisted tables from
config/dashlets.php. - Live API — GET a JSON URL with optional headers and a JSON path.
- File — upload a CSV and chart its rows.
Step 2 adds static filters, rolling windows, and AND/OR groups. Step 3 groups dimensions and applies COUNT/SUM/AVG/MIN/MAX. Step 5 requires a heading and subheading, and can limit the dashlet to Spatie / Shield roles.
Live preview
The finalize step renders a mini KPI card, table, or ApexCharts preview with a Filament loading indicator. It refreshes as you change earlier wizard steps (300ms debounce, up to 50 preview rows).
Export / import
From the dashboard list or view page, use Export JSON to download dashboard metadata and dashlets. Use Import JSON on the list page to restore layouts. CLI equivalents:
php artisan dashlet:export 1
php artisan dashlet:import storage/app/dashlet-export-1.json --user=1 --replace
Seed demo dashboards with every Core dashlet type:
php artisan dashlet:seed
This creates Overview, User analytics, Form operations, and Access analytics (stacked daily logins by role with in-dashlet Day / Week / Month / Year) for your first admin (or first user). Re-run safely — existing demo dashlets are updated in place. Use --fresh to remove and recreate them.
Run php artisan dashlet:verify after install to exercise schema, data entities, preview payloads, export/import, and layout sync.