Live demo: hilbert49.github.io/caseboard · fictional data only, everything stays in your browser
CaseBoard is the public, sanitized build of a production tool I built and still run as an operations supervisor at a community corrections agency: a case-management app my team uses every day to supervise a pretrial electronic-monitoring caseload for a municipal court.
I'm not a professional developer. I'm the supervisor of the team that had the problem.
A pretrial EM unit lives or dies on daily bookkeeping: who reports today, who missed, whose court date is tomorrow, which GPS alert is still unresolved, what the court needs to be told and in exactly what format. When I took over the unit, that bookkeeping lived in a shared spreadsheet, a paper sign-in sheet, individual staff memories, and a case-management system that couldn't see any of it. Every missed check-in was discovered late, every court notification was composed by hand, and every supervisor question ("who's behind on progress reports?") was a twenty-minute audit.
CaseBoard replaced that with one screen per moment of the workday:
- Start of Day — the morning picture: missed reporting, team exceptions, new violations, today's schedule.
- Today's Roster / Client Roster — check clients off as they report; a missed check-in is flagged the moment it's late, and the failure-to-report workflow writes the court-ready narrative.
- Alert Processing — GPS/alcohol-monitoring alerts with dispositions, court-notification tracking, and generated email text.
- Generate Note — one client, one button: a formatted, court-ready case note.
- End of Day / Front Desk / Team Sync — sign-in reconciliation, a reception-desk view, and the supervisor's team oversight board.
One HTML file. The production app is a single self-contained HTML file. That's not a
limitation — it's the entire deployment story. The agency environment offers no servers,
no admin rights, no package installs, and an IT queue measured in months. A single file
runs from a browser, a shared drive, or a USB stick, wrapped identically in an Electron
portable for desktop niceties. Source lives in src/ as ordered modules; scripts/build.py
does a deterministic concatenation (--check proves the artifact matches the source —
that property is the code-review process).
Sync without a server. Teams need shared state; there was no server to share it on.
The production build syncs through a plain folder on the shared network drive with a
single-author-per-file protocol: the supervisor alone writes broadcast.json, each
monitor alone writes snapshot_<name>.json, so there are no write collisions by
construction. The shared roster uses last-write-wins merges with per-record edit
stamping, tombstones so deletions don't resurrect from another machine's copy, and
nothing ever merges into a caseload without an explicit Apply click. The folder is
reached through one adapter interface (SyncFS) with three backends: the File System
Access API in a browser, an IPC bridge in Electron — and in this demo, a localStorage
mock (src/js/85-demo-mode.js), which is why the whole team-sync layer works on a
static GitHub Pages site with no backend at all.
Everything else is the same discipline: no frameworks, no build-time dependencies, plain global-scope modules in fixed load order, vendored libraries checked in verbatim, and a Playwright suite against the private build.
The demo seeds ~48 fictional clients from a fixed PRNG (see src/js/85-demo-mode.js —
every visitor gets the same believable day), plus two fictional teammate snapshots so
the supervisor views have a team to oversee. Names are deliberately synthetic; nothing
you enter leaves your browser. Reset any time with the banner button or ?reset=1.
This is a sanitized rebrand of the production app: agency configuration is swapped for fictional data and internal system/vendor names are genericized. The private build is versioned separately and runs in production with a shared-folder sync layer this demo mocks out.
A shared Excel roster nobody trusted, a paper front-desk log, hand-typed court emails, and end-of-shift handoffs by sticky note. The team runs on this app daily: shared roster with team-wide sync, front-desk check-in alerts to the right monitor's machine, court-date synchronization against the court's case portal, generated court notifications, and a supervisor dashboard that answers "how is my unit doing" in one glance.
Built by Thomas Hilbert — operations supervisor (pretrial & electronic monitoring), former ED/ICU RN, self-taught developer. I build the software my frontline teams run on.
Reach me on LinkedIn: linkedin.com/in/ThomasSHilbert
