technobase / laravel-system-status
Self-hosted status page, uptime monitor and incident tracker for Laravel: health checks, real traffic, automatic incidents, Telegram / Slack / Discord alerts, SLA reports and security monitoring.
Package info
github.com/TechnoBase-krd/laravel-system-status
pkg:composer/technobase/laravel-system-status
Requires
- php: ^8.3
- illuminate/console: ^12.0|^13.0
- illuminate/database: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- spatie/laravel-health: ^1.29
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
Suggests
- barryvdh/laravel-dompdf: Adds PDF export to the monthly uptime report.
- laravel-notification-channels/telegram: Sends status changes to a Telegram chat.
- laravel/pulse: Shows a System Status card on the Pulse dashboard.
- spatie/laravel-permission: Provides hasRole() for the page's role check.
Provides
None
Conflicts
None
Replaces
None
README
A self-hosted status page, uptime monitor and incident tracker for Laravel. It shows whether every part of your application works (database, Redis, queues, APIs, backoffice screens, payment and delivery integrations), keeps 90 days of uptime history, opens incidents by itself and alerts you on Telegram, Slack, Discord, mail or webhooks. Like githubstatus.com, but inside your own Laravel app.
Features
- Health checks (probes): database, Redis, Horizon, queues, HTTP endpoints, CDN, TLS certificate expiry, disk space, DNS, TCP ports, failed jobs, and your own integrations.
- Real traffic monitoring: every request is counted per route; 5xx error rates and slow p95 response times change the status.
- Signals: one line around paid or side-effect calls (SMS, OTP, social login, AI APIs).
- No false alarms: two checks must agree, flapping is grouped, and a failure caused by a dependency is folded into one alert.
- Incidents: opened and resolved automatically, or posted by hand with a timeline and a postmortem.
- Maintenance windows and deploy markers: planned work raises no alert; incidents show "6 min after deploy v1.8.2".
- Alerts: Telegram, mail, Slack, Discord, signed webhooks and Laravel events.
- Security monitoring (opt-in): scanners, SQL injection and XSS attempts, brute-force logins, logins from new countries, honeypots, auto-block with Cloudflare.
- SLA reports: monthly uptime per component, as a page, CSV or PDF.
- History: 1 hour (live), 24 hours, 7 days and 90 days.
- Languages: English, Arabic and Sorani Kurdish, right to left included.
- Works with PostgreSQL, MySQL / MariaDB and SQLite, inside your admin layout or as a standalone page. Optional Laravel Pulse card.
Requirements
PHP 8.3+, Laravel 12 or 13, Redis (for traffic counters) and a running scheduler. Details in Installation.
Quick start
composer require technobase/laravel-system-status
php artisan vendor:publish --tag=system-status-config
php artisan migrate
php artisan status:doctor # checks the setup
Open /system-status as a Super Admin. The package registers the page, counts traffic and
schedules status:check every minute by itself; you only need the Laravel scheduler running.
Then describe your application as components in config/system-status.php:
use Spatie\Health\Checks\Checks\DatabaseCheck; use Technobase\SystemStatus\Probes\HttpEndpointProbe; use Technobase\SystemStatus\Probes\SpatieCheckProbe; 'groups' => [ 'platform' => [ 'database' => ['probes' => [['class' => SpatieCheckProbe::class, 'with' => ['check' => DatabaseCheck::class], 'every' => 1]]], ], 'mobile_api' => [ 'api_orders' => [ 'probes' => [['class' => HttpEndpointProbe::class, 'with' => ['path' => '/api/v1/health'], 'every' => 2]], 'uris' => ['api/v1/orders*'], // real traffic on these routes counts too 'depends_on' => ['database'], ], ], ],
Choose alert channels (Telegram is the default):
'alerts' => [ 'channels' => ['slack'], // any of telegram, mail, slack, discord 'slack_webhook' => env('SYSTEM_STATUS_SLACK_WEBHOOK'), ],
php artisan status:test-alert
The full walkthrough is in Installation and setup.
Screenshots
| Real time (1 hour) | 7 days |
|---|---|
![]() |
![]() |
| Component details | Ongoing problem |
|---|---|
![]() |
![]() |
| Arabic (RTL) | Phone |
|---|---|
![]() |
![]() |
Documentation
| Topic | |
|---|---|
| How it works | how a component's status is decided |
| Installation and setup | requirements, integration steps, deployment |
| Configuration reference | every option |
| Probes and signals | built-in probes, custom probes, signals, latency, dependencies |
| Incidents and maintenance | incidents, maintenance windows, deploy markers |
| Alerts and events | channels, webhooks, Laravel events |
| Security monitoring | suspicious activity, auto-block, security probes |
| SLA reports | monthly uptime reports |
| Access, layout and translations | roles, branding, languages, Pulse card |
| Commands and tables | artisan commands, database tables |
| Troubleshooting | common problems and fixes |
| Upgrading and contributing | upgrades, releases, tests |
Common commands
php artisan status:doctor # check the setup php artisan status:check # run the checks now php artisan status:routes --fallback # routes that match no component php artisan status:maintenance --all --minutes=15 # start a maintenance window php artisan status:deploy 1.8.2 # record a deploy php artisan status:report --previous # last month's uptime
Upgrading
composer update technobase/laravel-system-status php artisan migrate
1.x releases never break config keys, routes, translations or events. See
CHANGELOG.md.
Contributing
Issues and pull requests are welcome. Run composer test and composer lint, and use
Conventional Commits. See
Contributing.
License
MIT. See LICENSE. Made by TechnoBase.






