Bulk Medical Toggle, Status Refinements & Stability Fixes
Added inline medical toggles to the bulk move modal, refined custody and call status logic to prevent premature clearing from tanks or check-in, fixed merge sync duplication, and improved UI stability against accidental logouts and view resets.
Inline Medical / Wheelchair Toggle
can we make it so the wheelchair button is attached to each person in the bulk move. when checking people in that is the likely time when we will identify anyone that might need one
Reinstated the quick 'Wheelchair / Medical' toggle icon directly on the Bulk Move modal rows.
Decouple Custody and Call Statuses
when refusal / waive etc are selected I do not want it to change the status also. I have had an issue where it then doesn't show that person in the check-in screen
Removed backend logic that automatically mirrored certain custody statuses into the callStatus field.
Preserve Dropped Inmates in Tanks
if they are down in a tank do not remove them from the tank just grey it out like the not needed
Prevented backend automatic tank clearances when statuses are updated to Drop or other final states.
Fix Merge/Link Sync Duplication
fine tune the link/merge. it works great the way it is but if I resync it after it adds the person I merged/linked again
Simplified the backend merge logic to prevent the creation of duplicate case records.
UI Stability & Accident Prevention
there were 2 times today that a computer lost sync and logged me out. also if I do cntrl shift R or refresh the page sometimes it resets to a different view
Added a logout confirmation prompt, fixed a hydration race condition in the view state, and debounced the audience counter.
MJC Tanks Font Scaling & Custody Link Fixes
Added a font scaling slider to the MJC Tanks View for better visibility on wide screens, kept waived/refused inmates in the tank until cleared, fixed a manual link unmerging bug, adjusted print margins, and fixed a transfer tank bug.
Main Jail Tank View Font Scaling
is it possible to scale the font on the main jail tank view. they use a large wide screen and have plenty of real estate but font is too small
Added a Font Size slider directly into the MJC Tanks View to allow deputies to customize their display.
Preserve Tank Location on Status Change
when we waive / refuse or change status of someone that is down in the tank don't just remove them from the tank. They are down there until they are dumped from the tank or cleared.
Removed automatic tank clearing logic when an inmate's status is changed to Waived, Refused, Dropped, or Done.
Fix Manual Custody Link Unmerging
can you take a look at the rules for when we link/merge a defendant. it looks like sometimes they unmerge and sometimes lose their location for an unknown reason
Updated background sync logic to fetch all inmates across all departments when verifying release status.
Fix Print View Cutoffs
both the print view in the print view and the print from calendar page live are cutting off the last name on the bottom. lets move the bottom margin in just a tiny bit
Adjusted bottom CSS page margins for printing.
Special Status Synchronization, Background Polling Backup, and Version Alert Banner
Added Ref., No TS, 5150, ISO, and Med. call status options with bidirectional synchronization to custody status, implemented a silent 15-second background polling fallback, and created a floating system update alert banner.
Special Status Options & Synchronization
I have a request to add a status option for anytime we have someone Ref, no TS, 5150, ISO or med. the status will also change to show the same thing
Added call status options for Ref., No TS, 5150, ISO, and Med. with bidirectional sync between custody and call status.
Background Polling Backup & Version Alert Banner
some of the screens are not refreshing updates. is there a way to have it verify on a timer... what would be the best way to alert all users of a new version...
Implemented a silent 15-second background polling backup and a floating system update banner.
Session-Level Printing, Visual Chat Notifications, and Protected Docket Synchronization
Added session-level printer controls to print selected calendars, customized single department AM/PM prints, implemented visual toast alerts for staff group chat, and updated docket synchronization to preserve merges and manual edits.
Session-Level Calendar Printing
can we add a print icon and option to main jail live view next to the + # check. when I click I would like it to print in the format the calendar is layed out and also have the option to select other calendars so if I wanted to print 1:30 and 1:35 it would print in their way
Added a print action button next to time slot control groups and created a print options modal to select multiple sessions to filter and print together in the calendar layout.
Custom Single Department AM/PM Printing
can we work on the print format a bit ... sort like we would the live courtroom view so Co-Defendants are together. see department number at the top where PG is and not have any header or footer and page number ...
Configured print stylesheet margins and updated print table sorting/columns for clean single department AM/PM prints.
Visual Chat Notifications & Auto-Scroll
in the chat feature can we have it go to the bottom for most recent message instead of the top when we click on it ... I wouldn't mind if a new message pops up like a notification and alert
Updated group chat widget to auto-scroll to the bottom when opened, and implemented slide-in toast notification popups for new messages.
Protected Docket Synchronization Rules
look for merged defendants don't get added again when we refresh the docket. never modify the defense and prosecutor. carry manual edits to rescheduled hearings.
Modified backend calendar synchronization to preserve manually merged defendants and protect manually edited counsel names.
Bypass Counsel Formatting Rules on Manual Entry
if I update an attorney name manually don't follow the same rules with last, f
Bypassed standard 'Last Name, First Initial' formatting for manual inputs, storing and showing exactly what was typed.
Shared Global Undo, Case Merging, Compact Control Tables & Attorney Check-In Cleanup
Introduced county-wide database-backed undo stack, automatic database case number consolidation on merge/link, compact Control View column layouts, clean attorney check-in buttons, and simplified jail cell formatting.
Shared County-Wide Global Undo Stack
can we make an undo button available for everyone?
Overhauled the undo system from a local browser history stack to a shared, county-wide database-backed undo queue utilizing full audit log snapshots, broadcast in real-time via Pusher.
Consolidate Case Numbers & Pages on Merge
when we merge / link person we also need to merge case numbers and page numbers
Configured automatic database-level case number consolidation and combined page number propagation when merging/linking two defendants.
Orange Users Icon Flagging (No Pulse/Borders)
Lets get rid of hazard icon and made it something else easier to see ... I dont want it to flash ... match the formating you already have in when last name is exact match
Replaced warning emoji alert with orange Lucide Users icon and unified manual name highlights with duplicate same-last-name highlights (removing pulsing animation and borders).
Jail Cell Formatting Combiner
200 31 is cell 231. can we follow that formating for all main jail cell locations in the control view
Parsed and combined Main Jail cell numbers mathematically (e.g. 200 31 to 231) for all Control View table displays and print templates.
Attorney Check-In QR Code Removal
lets remove the qr code icon next the each attorney name.
Removed the check-in QR Code button under the defense counsel input to simplify cell space.
Compact Control View Layout
on the control view the time, defendant and housing location boxes can be a bit smaller.
Tightened cell paddings and optimized widths for Time (w-16), Defendant (w-48), and Housing Location (w-36) columns in the Control View.
Directional Merges, Transactional Undo, and Custom Print Layouts
Introduced merge direction selector popup, transactional multi-action local undo system, custom print layout ink-saver override, and custody classification badging throughout the MJC Tanks board.
Person Merge Direction Selector Modal
The merge/link person may need a popup when names are selected to then give us the choice of which person to keep and which one merges behind it.
Implemented an interactive popup modal when merging two defendants, allowing users to choose Option A (Keep Target) or Option B (Keep Source), resolving directional ambiguity.
Transactional Undo History Stack
Is it possible to have an undo button without messing everything up?
Created a local history stack state to capture previous values before updating status, tank, notes, check-ins, or page numbers, and rendered a header Undo button to revert transactions.
Courtroom Tracker Larger Red Tanks & Floor/Class Display
In the courtroom tracker it lists the tank number. can we make that bigger and maybe red? Also, on MJC Tanks view in the courtroom tracker let's add floor and class.
Enlarged tank display in courtroom tracker cards with a red styling, and added formatted Floor and custody classification badges inside MJC Tanks courtroom tracker cards.
MJC Tanks Board Classification Badges
Make sure inmate classification is shown in the Tanks board.
Added Custody Classification badges to all inmate display cards across the entire MJC Tanks view, and formatted housing location strings to save screen real estate.
Case Numbers Popover Proximity Positioning
On the view I am giving a screenshot when I click on case number it is cutting off information I need. This is on the live courtroom view.
Measured the triggering element's screen coordinates inside CaseNumbersList to dynamically flip popovers downward with a top arrow pointer if rendered within the top 270px of the viewport.
Co-defendant Page Number Highlight Integration
When we highlight for co-defendants can we also add the same color to the page number for that person?
Updated sharedColors structure and defined high-specificity custom override CSS classes to bypass default table transparent inputs, colorizing page numbers with matching co-defendant colors.
Attorney Check-In Simple Checkmark
Once an attorney is checked in let's just make it a checkmark and not have counsel present.
Replaced the '✓ Counsel Present' text label with a single bold checkmark symbol '✓' to clean up grid space.
Light Mode Ink-Saver Printing Overrides
When printing only print in light mode color scheme but the rest looks good.
Injected media print overrides to force text colors to dark gray/black and backgrounds to white, bypassing dark mode themes when compiling printable PDFs.
In-Custody Stats Out/Present/Zoom Grouping
Next update when the stats show the number of outs it should have present / out / zoom all listed as out because if they are not in custody they are out. the total should be the sum of the custody and out.
Standardized session statistic calculation queries to group Present, Out, and Zoom under a single Out category, and calculated total as the sum of Custody and Out.
Custody Sync Priority & Auto-Reset (Bail-out Cleaner)
When we have a new custody list and sync can we make sure the only status that matters is the new one. it might be beneficial to remove all in custody status's when doing the sync and just make the priority the new list. sometimes people bail out or change housing and I always want the most current information.
Overhauled syncCustodyMatches to auto-detect and reset bailed-out inmates to OUT (clearing cells/enemies) while keeping manual links and pulling the latest custody facts.
Empty Non-Custody Tank Display
For the next change don't put N/A in the tank field just leave it blank if they are not in custody.
Removed the static 'N/A' text indicator from the Tank cell in the hearings tables, leaving it blank when the defendant is not in custody.
Manual Name Highlighting & Attention Flagging
Some of the last names are similar enough that we may want to manually make it bold or show that it needs to stand out. Either an option by the name or maybe another function of the merge / link person.
Added a highlightName Boolean database column and an interactive Users toggle next to defendant names to highlight similar or confusing names, matching the duplicate last name styling.
Full Raw Housing Location on Control Screen
on control screen I need housing location to list all of their housing, cell and info.
Replaced the shortened housing format (e.g., 5E) with the full raw location detail (e.g., MAIN: 5 EAST 200) inside the Control View table cells.
Widen Housing Loc Column & Add View Modal
its showing up now. we need to make that box bigger to see it all, or be able to click to see teh entire thing similar to how we do comments on other view.
Widened the 'Housing Loc' column header to w-72 (288px) and added a click-to-expand details popup modal.
Bailiff Group Chat, Widescreen Themes & HOF docket updates
Introduced a real-time group chat room for bailiffs and sheriffs, app-wide theme switching (Light, Grey, Dark), HOF (Hold on Floor) docket status tracking, and Custody list notes editing.
Bailiff & Sheriff Real-Time Group Chat
Create a shared chat for bailiff and sheriff users only, with no persistent history.
Implemented BailiffGroupChatWidget subscribing to county Pusher channels, restricted visibility by jobProfile, and updated Admin console to connect directly to the group feed.
App Theme Switcher (Light, Grey, Dark)
Add support for multiple app themes.
Created a theme selector dropdown saving options to localStorage and applying theme classes globally to document root.
Hold on Floor (HOF) Status & Custody Comments
Add a HOF docket status and notes editing in custody view.
Registered HOF/Order HOF status options in status options schema, applied teal docket highlights, and added comments column to the custody dashboard list.
Google Sheets Arial Font & Custody/Present Colors
Applied the default Google Sheets Arial font-family styling throughout the application and updated the In Custody and Present cell background colors to match Google Sheets exactly.
Google Sheets Arial Font & Custody/Present Colors
This app was inspired by a google sheet. can we figure out the font type used in google sheet. looks like Arial and can we have the in custody color and present color background match what we are coming from in google sheets
Configured Arial font family globally for all body, input, select, and button elements, and replaced standard Tailwind custody highlights with custom CSS classes utilizing Google Sheets' exact yellow and orange fill hex values.
Control View Widescreen Status & Notes Board
Added a widescreen Court Status view displaying all calendar sessions side-by-side with time groupings, interactive checkboxes, live department headers, and a quick-notes panel.
Control View Widescreen Status & Notes Board
Create a widescreen view showing all departments' statuses side-by-side with check-off lists and quick note adding functionality.
Introduced a layout mode for the Control View allowing bailiffs to view multiple departments in a single side-by-side dashboard.
Live Tech Support Chat Widget
Implemented a real-time tech support chat widget for bailiffs to receive live assistance directly inside the app, backed by a support bot and a live admin dashboard console.
Live Tech Support Chat Widget
Add a tech support chat system for bailiffs to communicate directly with administrators without database footprint.
Created SupportChatWidget client-side widget, added Server Actions for real-time Pusher event broadcasting, and built a Live Support Console in the admin dashboard.
MJC Tanks Sort, Search, and Location Filter
Upgraded the unassigned inmates panel in the MJC Tanks view with name searching, sorting by time/department/name, and housing facility location filters.
MJC Tanks Sort, Search, and Location Filter
Add search, sorting, and location toggle capabilities to the unassigned sidebar of MJC Tanks.
Added search, sort dropdown, and location filter tabs to the unassigned sidebar panel to improve navigation and speed up tank assignments.
Master Show/Hide Done Toggle
Re-introduced a master 'Show Done' checkbox to the top actions header bar, enabling users to show or hide completed cases across all sessions simultaneously with a single click.
Master Show Done Toggle
I still need a hide done button at the top so I can hide done cases on that page or put the hide button option in the filter next to each court time.
Added a master 'Show Done' checkbox back into the header actions that updates all session-level done visibility preferences at once.
Inline Session Stats & Interactive Remand Counters
Moved all session statistics (total, in-custody, out-of-custody, and remaining cases) along with interactive database-backed Remand counters directly into each session header row.
Inline Session Stats & Remand Counters
Move the stats to that same line for each time. Let's do total defendant in / out / remaining and Remand either + or - or a selector similar to audience checkin.
Removed the header Stats dropdown and integrated dynamic inline stats pills and +/- Remand counters into session headers.
Calendar Header Preservation for Completed Sessions
Modified session filtering logic to keep the session header rendered even if all cases are Done and hidden, enabling bailiffs to easily toggle them back visible.
Session Header Toggle Retention
Bring back all done cases from a calendar after they are hidden and they are all done.
Shifted per-session completed case filtering from rawMerged query level to JSX rendering level.
Dismissible DONE TANK Glow & Bubble Badges
Added a dismiss/clear ('X') action on completed blue glowing tanks, allowing bailiffs to temporarily mute the glowing state and hide the floating DONE TANK badge until the assigned inmates change.
Dismissible DONE TANK Glow
On the last update for the highlight glow and tank done lets let them have an X or some way to clear it once it displays in case they can't clear it right away.
Added a close button inside the floating DONE TANK bubble and created a self-resetting dismissedTanksMap state based on inmate list hashes.
Per-Session Show/Hide Done Filtering
Moved the global Show Done filter from the top header to a per-session control box next to the add-case (+) and auto-number (#) buttons in the session headers, allowing custom done visibility per calendar individually.
Per-Session Show/Hide Done Toggle
On the live calendar view, move the show done next to the + # so that we can check or uncheck done view for each calendar individually.
Removed the global header checkbox and integrated a custom Check-icon toggle button into the session header action split boxes.
Blue Glowing Completed Tanks & DONE TANK Bubble Badge
Re-themed completed ready-to-empty tanks to blue, adding a pulsing blue glow, a blue header highlight, and a floating 'DONE TANK' bouncing bubble badge with a live status indicator dot.
Blue Glowing Completed Tanks & DONE TANK Badge
The all done is great. Let's make it blue and a floating bubble that says 'DONE TANK' should look good.
Changed completed tank glow styles to blue, styled the clear button to blue-pulse, and rendered an absolute-positioned floating bubble badge.
MJC Ready-to-Empty Yellow Glowing Tanks
Added a visual yellow glow effect to MJC Tank containers when all assigned inmates are completed (Done / Drop / Waive) to indicate they are ready to empty.
Ready-to-Empty Tank Glowing
If everyone is listed as done in a tank, have the entire box for the tank glow yellow to indicate its ready to empty.
Computed an isAllDone flag for each tank and applied a custom yellow border/glowing shadow class list.
MJC Tanks Wheelchair Toggle Support
Added support for editing and toggling a defendant's wheelchair flag directly inside the MJC Tanks view details popup modal.
Tanks View Wheelchair Toggle
Add the option to add a wheelchair in the MJC Tanks view, potentially inside the info popup as an option.
Added an interactive Wheelchair Status action button inside the Defendant Details modal on the MJC Tanks board.
Partial Custody and Present Row Coloring Tweak
Modified the custody (in custody / present / zoom) row styling to restrict background coloring to the first three cells (Page number, Name/Audience counter, and Custody status badge). Custody highlights override state colors like Ready/Tanks/Ordered, but priority states (Live, Done, Drop, Waive) remain on top.
Partial Row Coloring for Custody and Present
For in custody and out of custody marked present, do not color the entire row, but only the first section, with custody color taking priority over Ready/Tanks/Ordered but overridden by Live/Done/Drop.
Restricted presentZoomBg and inCustodyBg style classes to the first three table columns in renderHearingRow under non-priority states.
Header Action Stabilization, Right-to-Left Alignment, and Fixed Width Containers
Stabilized the header actions layout by enforcing fixed dimensions on interactive containers, moving the MJC Tanks Board Count badge next to left-hand department filters, and reorganizing header buttons right-to-left as Logout, Refresh, View, Search, and Stats.
Right-to-Left Header Actions Order
Make the top header buttons consistent: Logout -> Refresh -> View -> Search -> Stats.
Reordered actions bar elements to layout in the specified DOM sequence (Stats -> Search -> View -> Refresh -> Logout).
Fixed Widths & Shift Prevention
Prevent layout shifting when switching between views.
Applied fixed Tailwind widths to all action containers and used visibility hidden instead of conditional mounting.
MJC Tanks Board Count Relocation
Move MJC Tanks Board Count card to the left-hand Date/Dept filter bar.
Relocated the Board Count component from the actions bar to the left-side filters container.
Pro Per Attorney Formatting, Interactive Custody Status Selector, Unified Add Case Button, and Not-Needed Sync
Intercepted pro per designations in attorney name formatting, enabled interactive custody status editing inside Control view, moved Add Case button directly into session headers as a split button box, synchronized inmate Not-Needed statuses between Supabase and Prisma, and cleaned up table bulk action button headers.
Pro Per / Self-Represented Attorney Formatting
Do not format pro per / self-represented designations as names (First/Last initial).
Normalized and intercepted variations of 'pro per', 'pro se', 'self represented', and standard pd/da generic labels in formatAttorneyName.
Not-Needed Custody Sync & Greying Out
Sync Not Needed status from link custody view to grey them out in the custody (Control) list.
Synchronized Supabase is_nn flag to Prisma custodyStatus as 'Not Needed' and refactored status checks into a centralized isStatusGreyedOut helper.
Add Case next to Number Session (+ / # split button)
Move Add Case next to Number Session as a split box with icons and no text.
Created a unified + and # split button container in session headers. Added context pre-filling for manually added cases.
Interactive Custody Selector in Control View
Allow editing custody status/classification (Housing) directly in the Control view.
Replaced static text badge in the Housing column with the interactive CustodySelector dropdown.
Group-Level Bulk Actions Cleanups
Remove group-level bulk action buttons from the custody list table headers.
Removed the per-group bulk action header menus from the Control view custody tables.
Live Status Sorting Order Reset
Reset callOrder to 0 when moving an inmate to Live status.
Enforced setting callOrder to 0 in all status change selectors when status transitions to Live.
Empty Tank Verification Status Indicators
Show a status color circle next to inmate names in the Empty Tank verification dialog.
Added status circles utilizing getSingleStatusCircle next to names in the Empty Tank confirmation checklist.
MJC Tanks Status Color Legend
Add a legend for yellow, green, and blue circles on the MJC Tanks view.
Added color legend (Yellow = Ready, Green = Live, Blue = En Route) to the main unassigned list header.
Custody Linking Optimizations, Time Filters, and RCCC Classification Grouping
Deduplicated unmatched hearings in custody linking, added dynamic time filter toggles to the unmatched view, applied department-specific color styling, grouped RCCC inmates by classification instead of housing barracks, fixed prosecutor name formatting, and added housing details to the Empty Tank confirmation popup.
Unmatched Hearings Deduplication & Exclusions
Consolidate duplicate unmatched hearings for the same defendant, and exclude defendants who are already matched to a custody record.
Updated GET sync endpoint to group by unique defendantId, exclude already-matched defendants, and prevent double-matching in the auto-sync loop.
Unmatched View Time Filters & Color Coding
Add filter buttons to ignore specific times in the unmatched hearings view, and colorize department buttons using theme colors.
Implemented ignoredTimesFilter state, dynamic unique time extraction, interactive toggle buttons, and colored active department buttons with their corresponding theme colors.
RCCC Classification Grouping & Iconography
Group RCCC inmates in the custody view by classification (custody status) instead of housing location, and update headers.
Modified sorting value resolvers, active grouping keys, and completed separators to group RCCC inmates by classification. Rendered RCCC group headers with a Shield icon.
Prosecutor Name Formatting & Empty Tank Popups
Fix prosecutor name formatting (Last Name, First Initial) and add housing locations to the Empty Tank confirmation dialog.
Updated formatProsecutorName helper to parse LASTNAME FIRSTNAME format, and included housing location details in the tank clearing checklist subtext.
Audit Logging, Real-Time Updates, and Control Board Upgrades
Added database audit logging for modifications, replaced background polling with real-time WebSocket updates via Pusher, renamed Control Housing Board to Control, and added a toggle to group completed/done cases together or at the bottom.
Database Audit Logging for Hearing Modifications
Add audit logging to track who modifies hearings (status, tanks, page numbers, etc.) and when the changes occurred.
Created AuditLog Prisma model, implemented a shared audit logger utility, integrated logging into single and bulk PATCH endpoints, and created a dedicated Admin Audit view.
Real-Time WebSocket Updates via Pusher
Replace the 5-second background polling with instant real-time updates when another user makes changes.
Installed Pusher dependencies, triggered events on the backend upon hearing changes, and updated the client dashboard to subscribe to county-specific Pusher channels.
Control Board Renaming & Done Toggles
Rename the Control Housing Board view to just Control, and support a toggle to list completed inmates inline or keep them collapsed in a separate table at the bottom.
Renamed view routes, sidebar menu options, and panel headers to Control. Implemented a dual-state combineCompletedCustody filter toggle, updating table filters and hiding the bottom completed list when combined.
Check-in Custom Columns, Embedded Reports, and Color-Coded Department Typography
Added a streamlined Check-in view with customized columns, embedded analytics directly in Settings, renamed Link Custody to Custody Link under MJC Tanks, and styled all department selector texts and Print View inactive buttons to match courtroom color branding.
Streamlined Check-in View, Integrated Analytics & Department Branding
Make the department writing match the colors. Duplicate Live Docket as Check-in view. Rename Live Docket to Court Calendar (Live). Rename Custody View to Control View. Rename Main Jail Tanks to MJC Tanks. In Check-in view, remove Tank #, Cases, Order number, and Prosecutor. Put the reports view as a box in settings. Call Link Custody 'Custody Link' and place it under MJC Tanks in the list.
Implemented check-in view table column exclusion toggles, moved reports monthly stats table into a container inside settings panel, adjusted view switcher drop down item labels and positions, defined department HSL colors, and styled active/unselected department selectors dynamically.
Docket Column Scaling, Comments Expansion & Print Customizations
Added comments full view modals, collapsed case columns, repeating transport chime alerts, and print optimizations (hiding court headers, omitting OUT status, and ink-saver thin borders).
Docket Layout, Comments Modals & Cases Compression
Add comments full view expansion, collapse docket cases column, make text boxes match row highlight backgrounds, separate print preview department filter, beep SEND UP alerts every 10 seconds, hide print title headers, ignore OUT status when printing, and make print borders thinner to save ink.
Implemented expandable Bailiff comments modal, compressed cases column by shifting hearing types to dropdown popup, added row-wide status highlights, set daInfo/tank/cases print columns to false by default, styled print view borders as thin hairlines, added repeating chime interval for SEND UP, omitted OUT custody text on print, and added print:hidden to print headers.
Main Jail Layout Optimization & View-Specific Count
Moved the Total Board Count to the top navigation header for the Main Jail Tanks view, removed the board title and sub-title to maximize space, removed Top/Bottom Row grid titles, and made the dashboard height-responsive on large screens.
Viewport-Fitting & Cleaned Up Main Jail Holding Board
Clean up the Main Jail Holding Board: move the count to the very top header only in this view, remove the main title, remove Top/Bottom Row grid titles, and maximize available real estate.
Added conditional board count in top header, removed layout title/sub-title, removed row labels, reduced padding/gaps, and implemented height-filling flex layouts on xl screens.
Custody List Synchronization & Inmate Link Matcher
Added direct synchronization with the Custody List Supabase database. Integrates automated and manual inmate name linking for courtrooms 60-63, populates housing locations, X-Ref numbers, and imports/displays keep-away enemies alerts.
Database Sync, Manual Linker UI & Keep-Away Warnings
Connect Court Checkin to Custody List database. Auto-match inmates in depts 60-63. Add manual linker for spelling discrepancies, display X-Ref #s, housing cells, and enemies list in Custody View and Live Docket.
Created Supabase auth/REST sync engine, implemented a dual-pane Link Custody matcher interface, updated database schema for X-Ref / Enemies, and added red visual warning badges for keep-away alerts.
Split-Row Tanks Layout & Courtroom Tracker Sidebar
Added dedicated split-row holding tank layout to stabilize spatial organization, converted the alerts panel into a courtroom tracker for departments 60, 61, 62, 63, and added Pass/Done actions.
Split-Row Tanks & Courtroom Tracker Console
Keep Tanks 1-5 on top row, Tanks 6-9 & Bench on bottom row. Convert alerts panel to tracker for courtrooms 60-63, with Pass/Done buttons. Pulse SEND UP in orange and EN ROUTE in blue.
Restructured Tanks grid container to split tank options, mapped Courtrooms 60-63 in the sidebar with active count badges, added Pass (put back in tank) and Done (clear from court) actions, and updated active transport status colors.
SEND UP & EN ROUTE Multi-Stage Transport Workflow
Added courtroom transport request visual chime alarms, stable top centered warning alerts, silent auto-refreshing polling, multi-stage status dispatches, and browser refresh state persistence.
Courtroom SEND UP Transport alerts & multi-stage status
Add new status SEND UP to trigger chimes and visual warning popups on the Main Jail Tanks board, support browser refresh state persistence, silent background polling, and transition to EN ROUTE when acknowledged/sent.
Updated status options, mount loader syncing, silent background polling, fixed warning popup modal, right-sidebar Send Up alerts panel, card actions (Acknowledge and Sent), top-of-tank list sorting, and localStorage persistence hooks.
Split PM 1:30 and 1:35 Session Stats Tracking
Separated the PM statistics session into two distinct tracks: PM (1:30) and PM (1:35) for more granular custody, out, and remand analytics.
Split PM Session Analytics
Lets change the PM to be 2 different stats. 1:30 and 1:35 should get their own stat tracking
Added pm135Remands column to SessionStats database schema, split the Live Docket stats panel, and updated monthly aggregates.
Tank Status Transitions & Normalization Rules
Refined status transitions when tank numbers are assigned or cleared, ensuring proper classification to R/Tanks for ordered defendants and Tanks for other defendants.
Tank Status Transitions & Normalization
So if status was order / ordered and a tank number gets assigned it should change to R/Tanks. If there is a tank number and no other status it should say Tanks
Updated both API routes and client-side state managers to enforce status transitions when tank numbers are edited, cleared, or loaded.
Granular Admin Permissions & Layout Optimizations
Added checkboxes/toggles in the Admin Console to allow restricting user privileges (Call Order modifications, Comment viewing, and Tank number visibility) and optimized the admin dashboard layout to fit all columns.
Granular Feature Restrictions
For admin control can we add checkboxes for allowing to restrict the ability to set order and another to restrict seeing comment box and another to not see tank number
Added canSetOrder, canSeeComments, and canSeeTank columns to database, and added backend toggle actions.
Optimized Admin Directory & Compact Checkboxes
Add permission toggle controls to admin console and optimize layout to avoid left-to-right scrolling.
Replaced wide allowed/restricted buttons with compact checkboxes, added truncation on Name and Email columns, and converted layout to top horizontal tabs.
Collapsible Completed Views & Custody Board Customizations
Added collapsible sections to hide completed inmates on both dashboard views, interactive sorting, custom housing locations tracking, and custody classification highlights.
Collapsible Completed Sections
Hide completed inmates that are no longer in a tank in a section that can be hidden/expanded.
Created collapsible completed/done panels at the bottom of the Custody table and inside the Main Jail unassigned sidebar.
Jail Housing Locations & Custom Cells
Add a column for housing location on Custody board, and display it next to inmates on the Main Jail holding board.
Added housingLocation field to model and routes. Implemented editable Loc / Cell inputs in the table, and location badges in the tank grid.
Custody Sorting, Transitions, and Header Cleanup
Support sorting on custody board, remove floor selectors, adjust tank headers, and automatically map placed inmates to tanks status.
Built interactive headers for sorting, implemented automatic callStatus updates in the PATCH action, and simplified tank card layouts.
Wheelchair Tracking & Unified Custody Metrics
Introduced dedicated wheelchair need tracking, unified custody UI indicators and backgrounds, restructured the custody selection sequence, and corrected docket stats calculations.
Dedicated Wheelchair Need Tracking
Add a way to flag when a defendant requires a wheelchair without having to remove their location/classification.
Added a needsWheelchair boolean field to the database, updated the PATCH endpoint to save the field, and added an interactive wheelchair ♿ icon toggle next to the name of in-custody defendants.
Unified Custody Indicators & Ordered Dropdown Options
Unify custody row backgrounds and checks, sort classification options with correct backgrounds, and resolve duplicate MJ options.
Consolidated in-custody checks to target all custody classifications consistently. Sorted dropdown menus sequentially (base, OPP, PC, IOP, ADSG) and removed duplicate MJ boxes.
Corrected Docket Statistics Counting
Ensure Present and Zoom checked-in people are not counted as in-custody in statistics.
Updated the Live Docket stats dropdown counters to align with unified custody logic, grouping checked-in Present and Zoom defendants under 'Out' instead of leaving them out of counts.
All-Department Live Docket Alphabetical Sorting
Added a sorting exception for the 'All' departments selection in 'Live Docket' mode so that co-defendants remain sorted purely alphabetically.
All-Department Live Docket Alphabetical Sorting
When in Live Docket view with 'All' departments selected, do not group/sort co-defendants; leave them sorted alphabetically instead.
Updated the client-side sorting logic to skip case-grouping and co-defendant matching in Live Docket view when the department filter is set to 'All'.
Granular Permissions & Case Page Numbering
Added granular access control overrides (SUPERUSER roles, canEdit dashboard write permissions, custody restrictions) and automated court calendar case page numbering.
Automated Case Page Numbering System
Automatically calculate and assign page numbers to court hearings, grouping co-defendants under a single cell and displaying the Pg column.
Created client-side co-defendant page grouping and numbering algorithms. Enabled customizable column toggles showing the new 'Pg' column, and supported manual overrides via inline inputs.
Granular Access Control Overrides
Add granular permissions for users (edit vs view-only, custody views toggling) and introduce SUPERUSER management controls.
Updated user schema with accessCustody and canEdit fields. Expanded Admin Console with role dropdowns, toggle buttons for custody and edit privileges, and secured mutation APIs.
Permanent Custody Board Done/Drop Visibility
Remove the 'Show Done' filter toggle on custody/tank views and ensure completed items are permanently visible.
Bypassed hideCompleted checks on custody housing boards and jail tanks, and hid the redundant 'Show Done' UI toggle on those views.
Email Verification OTP Loop & Silent Session Refresh
Fix verification issues where manually approved users are still prompted for email OTP codes.
Automatically verified email checkins upon manual admin approval. Implemented silent session refreshment when DB role/status credentials diverge.
Bulk Calendar Sync Optimizations
Optimize calendar sync queries and update department name parsing fallbacks.
Replaced sequential database updates during docket sync with bulk queries. Updated court fetcher to scrape clean department names from rows.
Production Ready System Release
First official release of Bailiff Master, moving out of the local development sandbox into cloud hosting on Vercel with a production PostgreSQL database.
Production PostgreSQL Database Migration
Transition the local database storage out of SQLite to a production-grade relational database for live multi-user coordination.
Configured PostgreSQL provider in schema.prisma, established Vercel build scripts for Prisma client generation on deploy, and migrated local schema seeding.
Custom Domain & DNS Setup
Resolve Squarespace domains and Vercel hosting setup conflicts to host the live app securely.
Configured domain CNAME/A records pointing to Vercel, resolved SSL/TLS issues, and linked domain bailiffmaster.com.
Admin Access Controls & Domain Restricts
Set up auto-approval email domains and role-based custody access constraints (full access for @sacsheriff.com, restricted custody board for @saccourt.ca.gov and @saccounty.gov).
Added accessCustody toggle to User model, enforced in dashboard view. Integrated Admin settings panel to toggle controls per account.
Bailiff Master Branding & Guide
Rename the system from Court Check-in to Bailiff Master.
Updated all logos, icons, titles, and README documentation to match the new brand identity.
Department Dropdown UI Improvements
Refine the department dropdown styling to match the rest of the Master Dashboard buttons.
Modified style classes and transition effects on dropdown selectors to match the high-contrast view actions.
Session Validation & OTP Middleware Checks
Ensure pending or rejected users cannot bypass route security using outdated session cookies.
Enhanced middleware.ts and getSessionUser to automatically invalidate and clear cookies for accounts not marked as APPROVED.
Build System Spec
- Build Versionv2.16.0
- Client HostVercel Edge
- DB ConnectionPostgreSQL
- ORM LayerPrisma ORM
- Platform FrameworkNext.js 16 (App Router)
- Runtime EnvNode.js 18+ / React 19
- Routing MiddlewareJWT Cookie Checked
Deployment Health
The application state is monitored for secure and performant connection handling across agency domains.