Dashboard
The monorepo includes a web UI adapted from the pg-boss dashboard under apps/queue-service-dashboard. Use it when a job is stuck, a cron did not fire, or you need to read a payload without digging through Postgres.
What you can see
| Area | Use |
|---|---|
| Overview | Aggregate stats, problem queues, recent warnings |
| Jobs | Filter by state and queue; open a job for payload and output |
| Queues | Per-queue stats |
| Schedules | Cron schedules registered in pg-boss (YAML cron_jobs and related) |
| Warnings | Warning history when persistence is enabled |
You can cancel, retry, resume, or delete jobs from the UI when debugging. Example: a delayed publish never ran → open Jobs, find the queue and state, inspect runAt / payload, then retry or cancel.
Run with Docker Compose
Root docker-compose.yml starts Postgres, queue-service, and a dashboard service on port 3000.
# from repo root, after docker/database/.env and dashboard env are set
docker compose up -d database
# start queue-service once so the pg-boss schema exists
docker compose up -d queue-service-dev
docker compose up -d pg-boss-dashboardOpen http://localhost:3000 .
Compose’s pg-boss-dashboard image uses @pg-boss/dashboard and reads docker/dashboard/.env:
# Same DB as queue-service (queue-service uses POSTGRES_DATABASE_URL)
DATABASE_URL=postgresql://user:pass@database:5432/bq_queue
# Optional basic auth
# PGBOSS_DASHBOARD_AUTH_USERNAME=admin
# PGBOSS_DASHBOARD_AUTH_PASSWORD=secretPoint DATABASE_URL at the same database queue-service uses. Default pg-boss schema is pgboss unless you set PGBOSS_SCHEMA.
Run the adapted app from source
cd apps/queue-service-dashboard
# Set DATABASE_URL (and optional PGBOSS_SCHEMA, auth vars); see env.ts
npm run devThis is the workspace package with Schedules and the rest of the UI. Prefer it when you want the in-repo adaptations rather than the upstream npm image.
Access control
The dashboard talks directly to Postgres. Treat it as an admin surface.
- Prefer private network only, or put it behind your edge with auth.
- Set dashboard auth env vars when it is reachable beyond localhost.
- It does not use
REQUEST_SIGNING_SECRET; locking down the UI is separate from job API signing.