Health Dashboard
What it does
The dashboard is a single page at /admin/opconsole (by default) organized into eight tabs, with a header showing a 0–100 health score, the environment badge, and the Laravel and PHP versions.
| Tab | What you get |
|---|---|
| Overview | Overall state with a status bar, summary cards (database, health, log errors, cache, queue, scheduler, disk, security), issues needing attention with copyable fix commands, runtime status, and a recent-activity feed. |
| Health | Every check grouped by area, critical issues first. Filter by status chips or by name; expand any check for its current value and fix. Filters stay in the URL (?check_status=), so a shared link opens the same view. |
| Security | Vulnerable Composer packages by severity, a scan-freshness meter, and Laravel configuration warnings. |
| Operations | Maintenance tasks split into a Safe group and a Danger zone. The last run's output appears first. |
| Failed jobs | The newest failed queue jobs with queue, failure time and error (never the payload), a filter, and a Retry button per job. |
| History | An audit trail grouped by day: who ran what, when, how long it took, and any error. |
| System | Application, PHP, performance (OPcache, JIT, Xdebug), extensions, server, database, service and cache settings, with production-risk flags and "Copy summary for support". |
| Logs | Log file list, an entries-per-hour chart, level/environment filters, search with highlighting, repeat counts, and stack traces with your app's frames highlighted. |
The health score
The ring in the header shows a 0–100 score. Any critical check caps it below 60; any warning caps it below 90.
Why it is useful
Most of the time "is anything wrong?" requires either SSH access and a handful of memorized commands, or asking someone else. The dashboard answers that question from a browser, with the fix command already written out, for anyone your Gates allow.
How to use it
- Press Ctrl/⌘ K to open the command palette and jump to any tab, check, operation, or log file.
- Use j / k to move through log entries.
- Toggle light/dark theme from the header switch (if
theme_toggleis enabled). - The dashboard works on phones, and renders right-to-left for Arabic, Hebrew, Persian, and Urdu locales.
Configuration
| Option | Env | Default | Effect |
|---|---|---|---|
theme | OPCONSOLE_THEME | auto | auto follows the visitor's system setting; light/dark forces one. |
theme_toggle | OPCONSOLE_THEME_TOGGLE | true | Shows the light/dark switch, remembered per browser in a plain cookie. |
web_fonts | OPCONSOLE_WEB_FONTS | false | Loads IBM Plex from Google Fonts. Off by default — the console makes no external requests unless you opt in. |
layout | — | null | Render inside your own Blade layout instead of the standalone page. |
back_url / back_label | — | null / Dashboard | Adds a link back to your own admin panel. |
See the full list in the Configuration Reference.
Security considerations
- The dashboard is served entirely behind the
viewOpConsoleGate (and its CSS/JS/SVG assets too, via theopconsole.assetroute). - It emits zero inline
<script>blocks and zero inlinestyle=attributes, so it works unmodified under a strict Content-Security-Policy. - No third-party CDN requests happen by default. Enabling
web_fontsis the one opt-in exception — see its CSP notes in the Configuration Reference.
Limitations
- The "recent errors" figure on the Overview tab is sampled from the bounded tail of the newest readable log file. A count of zero means no sampled errors in that tail, not proof every log is clean.
- Without JavaScript, every section still renders in page order (the tabs are a progressive enhancement), but the command palette and keyboard navigation require it.
Troubleshooting
- Blank or 403 page: you're missing the
viewOpConsoleGate, or it's evaluating tofalsefor your user. See Authentication & Authorization. - Styling looks broken after an upgrade: republish assets with
php artisan vendor:publish --tag=opconsole-assets --force, especially if you've customized views — see the Upgrade Guide. - Host layout's fixed header overlaps the sticky tab bar: set the
--oc-tabs-offsetCSS variable in your own stylesheet, for example.oc-embedded-shell { --oc-tabs-offset: 64px; }.