Gifted platform. District owns it. Developer walks away.
MSAD 17 IT receives the full source, data, connector packages and runbooks. There is no license key, no phone-home and no subscription. A generalist IT administrator can operate it: add a device brand with the Integration Bot, promote it with a second reviewer, and never open an integrator change order.
Ships to District IT
- Application source (PHP 8.2+, SQLite → Postgres optional) — no build step, no runtime licenses
- Installer for an Ubuntu LTS VPS on the district network (planned; this host is the demo face)
- Private data directory outside the web root; one file to back up
- Every Integration Bot package: source, mapping, schema, fixtures, tests, SHA256SUMS
- Draft LE MOU terms mirrored by the portal's enforcement
- Runbooks: add a site, add a brand, promote/rollback a connector, monthly audit review
Hard lines — not built, not supported
- Facial recognition, emotion detection, “predictive violence” scoring
- Software door unlock / lockdown — stays on hardwired buttons and the host ACS
- Unreviewed bot code reaching production (sandbox + two reviewers, always)
- Developer as 24/7 NOC or on-call after handoff
- Any claim the platform “prevents shootings” — it shortens detection and response
- Requiring new cameras or panels to adopt it
Role permission matrix
enforced server-side on every endpoint · SSO groups replace demo roles on the VPS| Permission | District Ops · Monitoring | District IT · Platform owner | Oxford County RCC · LE viewer (MOU) |
|---|---|---|---|
| Operations pages view | ● | ● | — |
| Acknowledge alarms alarm.ack | ● | ● | — |
| Resolve with disposition alarm.resolve | ● | ● | — |
| Escalate P1/P2 to RCC alarm.escalate | ● | ● | — |
| Drill injector (SIM) sim.inject | ● | ● | — |
| Forensic search search | ● | ● | — |
| Inventory import inventory.import | — | ● | — |
| Network discovery inventory.discover | — | ● | — |
| Build connectors bot.build | — | ● | — |
| Run sandbox bot.sandbox | — | ● | — |
| Approve (reviewer A) bot.approve | — | ● | — |
| Promote / demote (reviewer B) bot.promote | — | ● | — |
| View audit log audit.view | ● | ● | — |
| Export audit audit.export | — | ● | — |
| LE viewer session le.session | — | — | ● |
| Reset demo scenario demo.reset | — | ● | — |
Sit-down readiness
| Unified operations view — OHCHS, Paris Elementary, new OHMS profile | WORKING |
| Alarm queue with P1–P4 taxonomy, ack targets, MTTA, dispositions | WORKING |
| Door event → auto-linked video with pre/post-roll bookmark | WORKING |
| SOP checklist per alarm type; resolution captures completed steps | WORKING |
| Escalation to County RCC with reason-bound, time-boxed LE sessions | WORKING |
| SHA-256 hash-chained audit log with verification and export | WORKING |
| Integration Bot: 8 stack profiles → full connector packages | WORKING |
| Sandbox executes generated code against fixtures, no network | WORKING |
| Dual-control promotion (reviewer B ≠ reviewer A) + rollback | WORKING |
| Inventory registry, validated CSV import, NDAA/firmware/Wiegand findings | WORKING |
| Role permissions enforced server-side; CSRF on every write | WORKING |
| Device telemetry, video and alarms | SIMULATED |
| Persistent ONVIF/RTSP/MQTT ingest workers + live thumbnails | VPS PHASE |
| District SSO (Entra ID / Google) replacing demo role switcher | VPS PHASE |
| Installer package (single command onto district VPS) | VPS PHASE |
Path to live devices
- Inventory. IT exports camera/door lists (or runs the Milestone/Axis connector reconciliation). Registry replaces the representative set.
- VPS on district network. Ubuntu LTS, reachable to camera/ACS VLANs only through a firewall rule set the connector manifests declare.
- One lab device. Promote ONVIF or Axis connector against one camera at OHCHS; verify events + video; measure false alarms for two weeks.
- Widen by site. OHCHS → Paris Elementary → remaining schools. New OHMS ships with owner requirements that name this event schema.
- Execute the MOU with Oxford County RCC; enable LE seats.
- Flip SIM_MODE off. The banner disappears only when no synthetic telemetry remains.