OpsBoard is a complete portfolio-grade operations and reliability platform for technology teams. It tracks services, incidents, service health, SLA/SLO targets, MTTR, MTTD, operational logs, postmortems, audit logs, and runtime health.
Tagline: Know what is failing. Understand why. Recover faster.
Engineering teams need a single operating view for service reliability: what is down, who owns it, how long it has been failing, what changed, and whether recovery practices are improving.
OpsBoard is a modular monolith. The API owns domain rules, tenant isolation, authentication, RBAC, auditing, service status rules, and metrics. The React app is a client of the versioned API.
flowchart TD
Browser --> Web[React Web]
Web --> API[Fastify API /api/v1]
API --> PostgreSQL[(PostgreSQL)]
API --> Redis[(Redis cache)]
API --> Metrics[Prometheus /metrics]
- Authentication with Argon2id, JWT access tokens, refresh token hashes, rotation, and logout revocation.
- RBAC roles: ADMIN, MANAGER, ENGINEER, VIEWER.
- Organization-scoped multi-tenancy enforced by authenticated identity.
- Services with status, environment, criticality, owner team, target availability, and incident history.
- Incident lifecycle with controlled transitions: OPEN -> ACKNOWLEDGED -> INVESTIGATING -> MITIGATED -> RESOLVED.
- Timeline events, operational notes, mitigation entries, resolution entries, and postmortems.
- SLA/SLO-oriented availability, incident counts, active incidents, MTTR, and MTTD calculated from incident data.
- Health, readiness, Prometheus-compatible metrics, structured Pino logging, request IDs, and OpenTelemetry base.
- Audit logging for sensitive actions.
- Dark-first SaaS operations console with responsive layouts and accessible controls.
- Backend: Node.js, TypeScript, Fastify, Prisma, PostgreSQL, Redis, Zod, Vitest.
- Frontend: React, TypeScript, Vite, React Router, TanStack Query, CSS.
- Infra: Docker, Docker Compose, Nginx, GitHub Actions.
- Observability: Pino, Prometheus metrics, health/readiness endpoints, OpenTelemetry base.
npm install
npm run prisma:generate
npm run prisma:validate
npm run builddocker compose up --buildLocal URLs:
- Web: http://localhost:8080
- API: http://localhost:3333
- API docs: http://localhost:3333/docs
- Health: http://localhost:3333/health
- Readiness: http://localhost:3333/ready
- Metrics: http://localhost:3333/metrics
- Email:
admin@opsboard.local - Password:
demo-password
Login -> Dashboard -> Services -> Checkout API -> Create Incident -> Acknowledge -> Start Investigation -> Add Note -> Mitigate -> Resolve -> Create Postmortem -> Dashboard metrics update.
Base path: /api/v1
- Auth:
POST /auth/register,POST /auth/login,POST /auth/refresh,POST /auth/logout,GET /auth/me - Services:
POST /services,GET /services,GET /services/:id,PATCH /services/:id,DELETE /services/:id - Incidents:
POST /incidents,GET /incidents,GET /incidents/:id,PATCH /incidents/:id - Incident actions:
POST /incidents/:id/acknowledge,POST /incidents/:id/status,POST /incidents/:id/events,POST /incidents/:id/resolve - Postmortems:
POST /incidents/:id/postmortem,GET /incidents/:id/postmortem,PATCH /postmortems/:id - Audit:
GET /audit/logs - System:
GET /system/dashboard,GET /system/status
Every request receives a request ID. Logs are structured and redact authorization, cookies, tokens, and passwords. /metrics exposes HTTP request count, request duration, incident counters, active incident gauge, service status changes, and default process metrics.
See SECURITY.md.
npm run lint
npm run typecheck
npm test
npm run buildADRs are stored in docs/adr.
Place final portfolio screenshots in docs/screenshots/ after running the Docker demo.
- Rich postmortem listing and search.
- Optional external alert source ingestion.
- Background availability recalculation worker if data volume justifies it.
- SSO and SCIM for enterprise identity.