Skip to content

Hilbert49/caseboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CaseBoard — pretrial caseload manager

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.

Start of Day — the morning briefing

The operational 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.

Architecture (and why it's deliberately weird)

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.

What's in the demo

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.

What it replaced, concretely

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.

Author

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

About

Pretrial caseload manager — public demo of a production tool I built for my agency's EM unit. Single-file app, serverless team sync, fictional data only.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages