A web application for tracking equipment status and coordinating repairs at community makerspaces, originally developed for Decatur Makers. Provides a single source of truth so members know what's working, technicians know what needs fixing, and staff can coordinate it all.
- Equipment Registry & Status Tracking — Maintain a registry of all equipment organized by area, with live green/yellow/red status derived from open repair records
- Repair Workflow — 10-status repair lifecycle (New through Resolved/Closed) with append-only timeline preserving diagnostic notes, photos, and assignment history
- QR Code Equipment Pages — Scan a QR sticker on any piece of equipment to instantly see its status, known issues, documentation, and report a problem
- Kanban Board — Visual overview of all active repairs by status with aging indicators to spot stuck items
- Kiosk Display — Large-screen auto-refreshing status grid for wall-mounted monitors in the space
- Static Status Page — Lightweight externally hosted page for checking status from anywhere (pushes to local directory, S3, or Google Cloud Storage)
- Slack Integration — Report problems, check status, create and triage repairs via slash commands (
/esb-report,/esb-status,/esb-repair); automated notifications for new reports, status changes, and more - MAC (Machine Access Control) Integration — Optional two-way link to a MAC instance: cache and display live machine status (in use / idle / oops / locked out) with admin-configurable per-surface visibility, auto-create a "Down" repair when a machine is oops'ed, oops / lock out / clear a machine from the equipment page, view recent machine activity, and automatically clear a machine's oops/lockout when its repair is resolved
- Role-Based Access — Three user types: Members (public, no login), Technicians (repair management), Staff (full administration)
See the Administrators Guide for full deployment instructions. The short version:
git clone https://github.com/DecaturMakers/equipment-status-board.git
cd equipment-status-board
cp .env.example .env # Edit with your settings
docker compose up -d
docker compose exec app flask db upgrade
docker compose exec app flask seed-admin admin admin@example.com --password changemeFull user guides and administrator documentation are available at:
decaturmakers.github.io/equipment-status-board
- Members Guide — Checking status, scanning QR codes, reporting problems
- Technicians Guide — Repair queue, managing repairs, Slack commands
- Staff Guide — Kanban board, equipment management, user administration
- Reservations Guide — Equipment availability, reservations, administrative holds, and reservation policies
- Administrators Guide — Deployment, configuration, Slack setup, maintenance
ESB can optionally integrate with a Machine Access Control (MAC) instance. The integration is disabled unless MAC_URL is set — leave it empty and nothing changes.
Configuration (environment variables, see .env.example):
MAC_URL— Base URL of the MAC instance (e.g.http://mac.local:5000). Setting this enables the integration.MAC_WEBHOOK_TOKEN— Optional shared secret for the inbound webhook. Empty = network-trusted (any POST accepted). When set, MAC must POST to/webhooks/mac/<token>and a mismatched/missing token returns403.
Setup:
- Set
MAC_URL(and optionallyMAC_WEBHOOK_TOKEN) and restart ESB and its worker. - In MAC, set
STATUS_WEBHOOK_URLtohttps://<esb-host>/webhooks/mac(orhttps://<esb-host>/webhooks/mac/<token>when a token is configured). Security: this receiver can create repair records and enqueue notifications, so setMAC_WEBHOOK_TOKENor firewall the endpoint on any internet-reachable deployment. As a URL path segment the token appears in proxy/access logs. - On each ESB equipment record, set MAC Machine Name to the MAC machine's
nameto link them. - Under Admin → Config → MAC Machine Status Display, choose which statuses (In Use / Idle / Oops / Locked Out / Unknown) appear on each surface (public dashboard & equipment page, kiosk displays, equipment admin/detail). Defaults: public shows only Oops and Locked Out; kiosk and admin show all five.
Behavior once linked: live machine status is cached (via the webhook plus a ≤60s worker poll of GET /api/machines) and shown as badges; oops'ing a machine in MAC auto-creates a "Down" repair; staff can Oops / Maintenance Lockout / Clear the machine from its detail page; recent machine activity is viewable on demand; and resolving (or closing "No Issue Found") the last open repair clears the machine's oops/lockout in MAC.
- Python 3.14 / Flask — Web framework
- MariaDB — Database (runs in Docker)
- Docker Compose — Container orchestration (app + db + worker)
- Slack Bolt SDK — Slack integration
- boto3 — S3 static page publishing
- google-cloud-storage — GCS static page publishing
- qrcode — QR code generation
MIT — Copyright (c) 2026 Jason Antman