MBS Uptime Moniter
#MBS Uptime Monitor
MBS Uptime Monitor is a self-hosted status page and uptime monitoring platform built with Laravel, Filament, and Livewire. It combines a public status site, a private operations panel, automated checks, incident publishing, subscriber notifications, and a Laravel probe package for monitored applications.
This repository is a workspace repo. The monitor application lives in
apps/status, while the repository root is reserved for shared documentation,
API contracts, GitHub automation, and package publishing support.
#Screenshots
#Public status overview
#Public history and incident detail
|
|
|
#What This Repository Contains
apps/statusThe main monitor application with the public status page, Filament admin panel, API endpoints, incident workflow, remote integrations, and check engine.packages/laravel-status-probeThe Composer package that installs authenticated health and metadata endpoints inside another Laravel app so it can connect to the monitor.api/statusPublic API docs, schema, and example payloads for the monitor app.documentsLong-form documentation for installation, deployment, operations, and integration workflows.
#Product Capabilities
- public status overview at
/ - incident detail pages with update timelines
- Filament admin panel at
/admin - automated checks for
http,ssl,dns, andtcp - manual incident workflow with published and resolved timelines
- subscriber confirmation and unsubscribe flows
- daily uptime aggregation for 90-day reporting
- remote integration support for package-enabled Laravel apps
- public JSON endpoints for summary, services, incidents, and subscriber signups
#Workspace Layout
. ├── api/status/ # API contract, OpenAPI schema, example payloads ├── apps/status/ # Laravel monitor application ├── documents/ # Long-form documentation ├── packages/laravel-status-probe/ # Composer package for monitored Laravel apps ├── README.md # Repository entrypoint └── .github/ # CI, workflows, issue and PR templates
#Documentation Map
Start here depending on what you are trying to do:
- documents/getting-started.md Install the monitor locally, boot the app, and create the first admin.
- documents/monitoring-laravel-apps.md Connect other Laravel apps by using the probe package or manual checks.
- documents/deployment-and-operations.md Production deployment, cron, queue workers, mail, upgrades, and operational runbooks.
- documents/architecture.md Domain model, status precedence, check engine behavior, and integration architecture.
- api/status/README.md Public API reference and example payloads.
- packages/laravel-status-probe/README.md Public package README for the monitored-app probe package.
The package is also published from its own repository:
#Quick Start
#Prerequisites
- PHP
8.3+ - Composer
2.x - Node.js
22+ - SQLite, MySQL, or PostgreSQL
#Local Install
cd apps/status composer install npm install cp .env.example .env [ -f database/database.sqlite ] || touch database/database.sqlite php artisan key:generate php artisan migrate --seed composer run dev
In a second terminal, run the scheduler:
cd apps/status
php artisan schedule:work
composer run dev already starts:
- the Laravel development server
- a queue listener
- log tailing
- the Vite dev server
#First Admin Bootstrap
The first admin invite is protected by APP_SETUP_TOKEN.
- Set
APP_SETUP_TOKENinapps/status/.env. - Start the app.
- Open
/admin/setup?token=YOUR_TOKEN. - Submit the setup form.
- Complete the invite flow and sign in at
/admin.
Once the first admin exists, the setup route disables itself.
#Public Endpoints
#Web Routes
GET /GET /incidents/{incident:slug}GET /status/subscribers/confirm/{token}GET /status/subscribers/unsubscribe/{token}
#Public API Routes
GET /api/status/summaryGET /api/status/servicesGET /api/status/incidentsPOST /api/status/subscribers
#Private Integration Route
POST /api/integrations/probes/register
This private route is for package-enabled Laravel apps that push their registration payload into the monitor. It requires a bearer token configured in the monitor's Platform Settings.
#Working From The Repo Root
Use the root Makefile to work with the nested Laravel app and package without
changing directories:
make status-install make status-dev make status-test make status-build make status-pint make status-artisan CMD="migrate --seed" make probe-install make probe-test make probe-composer CMD="update --dry-run"
#Status Monitor and Probe Package
The monitor and the package are designed to work together:
- install the monitor from this repository
- install
mbs047/laravel-status-probeinside each Laravel app you want to monitor - let the monitor either pull metadata from the app or accept a pushed registration payload
- the monitor creates one service and one or more component checks from the package metadata
For the full walkthrough, see:
#Testing and Quality
Before opening a pull request, run:
cd apps/status ./vendor/bin/pint --test php artisan test npm run build cd ../../packages/laravel-status-probe composer test
#Deployment Note
If you deploy the monitor app from this monorepo, the web root must point to:
apps/status/public
Do not point your web server at the repository root.
#Package Publishing Note
The package subtree at packages/laravel-status-probe is published to the
package-facing repository so Packagist can read a root-level composer.json
there. The split-publish workflow supports both automatic publishing from
main and manual dispatch from GitHub Actions.
#Contributing
Please read CONTRIBUTING.md before opening a pull request.
#Security
Please review SECURITY.md for vulnerability reporting instructions.
#Support
Support expectations are documented in SUPPORT.md.
#License
This project is licensed under the MIT License.