OpsHub is a Laravel 12 / PHP 8.3 application for managing incidents, runbooks, postmortems, action items, and public status updates. The goal is to give on-call teams an “ops control center” that’s easy to onboard, auditable, and visually consistent.
- Domain: Incident lifecycle (report → triage → timeline/events → artifacts → runbooks → postmortem → action items).
- RBAC: Admin / On-call / Member / Viewer with policy-backed access; seeded demo accounts for quick trials.
- Design system: Custom AppShell (sidebar + topbar), tokens, dark/light theme toggle, responsive table→card patterns.
- Data flows implemented: incidents with filters and severity/status transitions, runbook linkage, postmortem draft/publish, action items tied to incidents/postmortems, search/export/audit, public status page toggle.
- Operability: Queue jobs (notifications/webhooks/digest), HMAC-protected webhooks, rate limiting, security headers, CI for lint/tests.
- Laravel 12, PHP 8.3, MySQL 8
- Vite + Tailwind v4-based custom tokens/components
- Queue: database driver; jobs for notifications/webhooks/digests
- PDF/CSV exports, auth+policies, status page, audit log
- Access & seed: Auth flows, roles, demo users; admin UI for role assignment.
- Incidents: CRUD, status transitions, filters (status/severity/service/owner/date), timeline events, artifacts (link/log/file).
- Runbooks: Markdown CRUD, tagging, service mapping, version snapshots; link runbooks to incidents.
- Postmortems: Generate from incident, edit/publish flow, action items linked back to incidents/postmortems.
- Action Items: Status/priority/due/assignee; quick updates; global filtered view.
- Notifications & webhooks: Slack/email toggle, webhook handler with HMAC, digest/check jobs.
- Public status page: Optional token-protected view with services and public incident updates.
- Search/Export/Audit: Global search, incident/postmortem PDF exports, action items CSV, audit log with filters.
- Custom design system in
resources/css/design-system/*with reusable tokens, dark/light theme switcher, and responsive cards/tables. - Sidebar/topbar AppShell with global search, quick actions, and language toggle (SR/EN for static copy).
- Incident list: filter bar, accessible focus states, no horizontal scroll on mobile (cards).
- Dashboard: quick stats, recent incidents, runbook/postmortem/action-item shortcuts, seeded credential hints.
composer installcp .env.example .envand setDB_*php artisan key:generatephp artisan migrate --seed- Run:
php artisan serve(or./start.shfor LAMPP) - Frontend:
npm installthennpm run dev(ornpm run buildfor prod)
- Admin
admin@opshub.test/password - On-call
oncall@opshub.test/password - Member
member@opshub.test/password - Viewer
viewer@opshub.test/password
- Tests:
php artisan test(uses sqlite memory; switch to MySQL via env vars if needed) - Formatting:
./vendor/bin/pint(add--testto verify) - CI:
.github/workflows/ci.ymlinstalls deps, generates key, runs Pint and tests on clean checkout.
- Templated incident playbooks per service/severity
- Better SLA/SLO tracking with burn-rate alerts
- Rich editor for timelines and artifact previews
- Service-level status analytics and uptime reports