Write perfect custody notes in 3 minutes — Try CustodyNote FreeStart Free Trial

Changelog

Every update shipped to Custody Note, newest first.

v1.4.215

Latest
  • Billing workflow: instructing firm name now stays correct — meta is refreshed after invoice data loads, firms list backfills missing firmName, open workflow syncs form first
  • Finish matter: step 3 is Archive + Close only — archiving records billing and office completion automatically (no separate mark-complete buttons)

v1.4.214

  • Fix: 'Mark billing complete' and 'Mark office work complete' buttons now work correctly inside workflow (confirm dialog z-index fix)
  • Invoicing: line item names standardised — 'PS Attendance Fixed Fee', 'Mileage', 'Parking'
  • Invoicing: attachment filename now follows format 'Name - Station - Date - police station attendance note - Firm.pdf'
  • CRM1: fixed NI number going into UFN header boxes — UFN combs now left blank, NI mapped to correct comb fields
  • CRM1: capital section now fills investments row and above-threshold field when savings data entered

v1.4.213

  • Time recording: social/unsocial minute fields and total minutes are now editable (type to override auto-calculated values)
  • Time recording: section heading and note updated to explain auto-fill and manual override

v1.4.212

  • Billing step 2: 'Next: complete without invoice' button lets you skip invoice and go straight to archive/complete
  • Billing step 2: skip button confirms before proceeding (no accidental skips)
  • Billing step 2: action guide now mentions the skip-invoice option for previously invoiced matters

v1.4.211

  • Fix: critical app startup crash caused by corrupted source in billing readiness panel
  • Fix: restored getBillingReadinessWarnings function deleted in v1.4.209 overhaul
  • Tests: 4 new source integrity regression guards (syntax check, native code detection, orphan call detection)

v1.4.210

  • Billing workflow: step-by-step action guide on every screen (What to do on this step)
  • Billing step 2: Generate Invoice button now explains why it is locked (tick all 3 checkboxes)
  • Billing step 2: live lock/unlock status with progress count (1/3, 2/3, 3/3)
  • Billing step 2: Review Confirmation card highlighted with amber border so it cannot be missed
  • Billing step 3: numbered buttons show exact order (1. Mark billing complete → 2. Office work → Final: Archive)
  • Billing workflow: all steps now labelled Step 1 / Step 2 / Step 3 in headers
  • Billing workflow: primary action buttons visually prominent, secondary actions smaller
  • Tests: 184 automated tests covering full QuickFile billing workflow

v1.4.209

  • Billing: auto-fill mileage from station table
  • Billing: departure time nudge on record re-open
  • Billing: disbursement prompt after departure
  • Billing: hard readiness gate (blocks incomplete records)
  • Billing: escape fee auto-detection
  • Billing: workflow adapts for non-QuickFile users
  • Billing: summary card with LAA rate breakdown
  • Billing: one-page billing summary PDF export
  • Billing: auto-detect weekend/bank holiday from date

v1.4.208

  • Fix: office postcode now persists correctly in settings
  • Licence: 3-month grace period before revocation
  • Billing: mark billing complete and archive record options
  • Licence: concurrent device limit with admin bypass

v1.4.207

  • Bug fixes and improvements

v1.4.206

  • Chore: redeploy web build (Vercel)

v1.4.205

  • Quick Email: central template renderer (tokens + aliases), template metadata in settings (id, requiredFields, timestamps)
  • Quick Email modal: Case details / Email template / Actions layout, template-applied hint + field flash, help popover, softer missing-field strip
  • Home screen: scroll column width aligned with other views on large screens
  • Tests: quick-email-template-render, email policy allowlist

v1.4.204

  • CRM1 official PDF: USN left blank; weekly income from annual; capital/dependants; equal opportunities ethnicity and disability field maps
  • CRM3 PDF: Yes1/No1 action started; counsel ticks; involved another way; clear header UFN; advocacy reason fallback
  • Applicant Declaration: clear Text4 USN
  • Billing default narrative: Police station attendance prefix
  • LAA Declaration: CRM3 fields (counsel, advocacy, involved another way)
  • Tests: crm1PdfFill regression

v1.4.203

  • QuickFile: sync next invoice number with ledger before create
  • retry on duplicate invoice number
  • Invoice # (QuickFile reference) field in attendance form section 9
  • IPC quickfile-suggest-next-invoice-number
  • tests updated

v1.4.202

  • CRM1 official PDF: fill Comb1-9 for NI
  • normalise NI
  • fix numeric fields (0)
  • middle name in first name
  • Fee earner signature: Settings choice draw per record vs saved scan/image
  • getEffectiveFeeEarnerSig for PDFs LAA and conflict cert
  • main LAA merge
  • Conflict certificate: attendance date row and rep signature from effective sig

v1.4.201

  • Matter completion workflow (step 3) with office checklist and post-invoice CTAs
  • clearer practice-wide vs current-matter billing labels
  • billing readiness panel wired
  • finalised to completed status for office handoff
  • tests and audit updates

v1.4.200

  • End-to-end auto-update test from v1.4.199 with customRemoveFiles override

v1.4.199

  • CRITICAL: override NSIS customRemoveFiles to skip un.atomicRMDir that aborts on locked files — use Delete /REBOOTOK + RMDir /r instead
  • Root cause: Cursor IDE holds app.asar handle; un.atomicRMDir rename fails → 'Failed to uninstall old application files' error 2 → abort

v1.4.198

  • End-to-end auto-update verification from v1.4.197

v1.4.197

  • CRITICAL FIX: remove /T (tree-kill) from NSIS taskkill — it was killing the installer itself because Windows sees it as a child of Custody Note.exe
  • Fix lock probe: bypass Electron ASAR intercept with process.noAsar for accurate file-lock detection

v1.4.196

  • End-to-end auto-update verification from v1.4.195 with NSIS REBOOTOK fix

v1.4.195

  • NSIS: Delete /REBOOTOK on app.asar and main exe so locked files (IDE/AV) no longer abort uninstall with error 2
  • Updater: disable differential downloads to avoid checksum mismatch fallbacks; persist debug NDJSON to %APPDATA%\custody-note\debug-1083ef.log
  • Updater: count each install failure once (lastCountedInstallAttemptAt); do not clear failure state on spurious update-not-available while pending

v1.4.194

  • Smoke-test: end-to-end auto-update from v1.4.193 (with NSIS pre-clear fix)

v1.4.193

  • NSIS installer: pre-clear app.asar and exe with rename fallback to survive external file locks from IDE indexers and antivirus
  • Root cause found: Cursor IDE holds file handles on app.asar, blocking all NSIS uninstall/replace operations

v1.4.192

  • Smoke-test release to verify end-to-end auto-update from v1.4.191

v1.4.191

  • Force app.exit(0) 500ms after quitAndInstall to release file handles immediately, preventing NSIS 'failed to uninstall old application files' errors caused by slow graceful shutdown

v1.4.190

  • Smoke-test release to verify the fixed installer handoff from v1.4.189

v1.4.189

  • Fix critical installer handoff race condition: window destruction in closeForInstall triggered app.quit() before quitAndInstall could spawn the NSIS installer
  • Harden NSIS custom script with retry kill, 6s total wait (up from 2s), and file-based diagnostic logging to cn-nsis-install.log
  • Add non-silent diagnostic install mode for visible NSIS error diagnosis
  • Suppress disableWebInstaller warning by setting autoUpdater.disableWebInstaller = true

v1.4.188

  • Smoke-test release for the new modular updater to validate 1.4.187 to 1.4.188 update flow
  • No functional app changes beyond the updater verification bump

v1.4.187

  • Replace the monolithic main.js updater with dedicated updater.js and updateState.js modules
  • Add persisted updater state, electron-log based updater logging, and explicit failed-install loop protection
  • Use a single guarded quitAndInstall path and remove the unsafe direct install fallback
  • Keep existing update IPC/UI wiring while improving recovery messages and aligning status text with the 6-hour check cadence
  • Make NSIS runAfterFinish explicit and add focused updater regression tests

v1.4.186

  • Restore a direct end-of-case button for Documents, Attachments and Invoice
  • Make the documents and invoice workflow reachable from the final page without relying on the bottom nav or post-finalise banner

v1.4.185

  • Billing empty-state now distinguishes 'no records yet' from 'no matches for current filters'
  • Uploaded file checkboxes in billing invoice no longer misleadingly appear selectable (they cannot be auto-attached to QuickFile)
  • Finalise: duplicate-check and confirm-dialog failures now show user-visible warnings instead of failing silently
  • Add .catch error handling to all fire-and-forget setSettings and firmSave calls
  • Fix null-safety crash in billing preview recalculation when elements are not yet rendered
  • Remove dead _wfBillingLoaded variable from billing screen
  • Add diagnostic logging to billing view load, invoice creation, and email-modal save

v1.4.184

  • Fix billing view showing empty — archived records that still need invoicing now appear in the billing list
  • Include archived_at in billing view data for UI badges

v1.4.183

  • Fix billing failure — remove duplicate IPC handler registration that blocked all billing and QuickFile handlers from loading
  • Clean up duplicate previewPdfBase64 entry in preload bridge

v1.4.182

  • Fix blank document preview — PDFs now open in system viewer
  • Add Save to Desktop and Email buttons for each generated form
  • Remove redundant Section 9 billing card — use post-finalise bar or bottom nav instead

v1.4.181

  • NSIS installer now kills running app before overwriting files — prevents 'Failed to uninstall old application files' error
  • Hardened auto-update shutdown: force-exits process after quitAndInstall to release file handles
  • Enabled elevation for installer to handle locked files

v1.4.180

  • Billing workflow: generate CRM1-3, Conflict Cert, Client Instructions, Prepared Statement, and Attendance Note PDFs directly in the Documents step
  • Select which generated forms and uploaded files to attach to QuickFile invoices
  • Multiple PDF attachments now uploaded to QuickFile with each invoice
  • Wider 20px scrollbars for improved accessibility

v1.4.178

  • Fix views not displaying content - replaced broken absolute-positioned CSS transitions with reliable display toggle
  • Ensure all screens are scrollable and responsive

v1.4.177

  • Fix faint button text colors for better readability
  • Bump border-radius on all buttons to 10px
  • Widen scrollbar from 8px to 14px for easier scrolling

v1.4.176

  • Deep auto-update fix: circuit breaker prevents restart loops after failed installs
  • version transition detection on startup
  • file-based update logging to cn-auto-update.log
  • remove window-focus auto-check and redundant 30m interval
  • single quitAndInstall guard
  • user confirmation before every restart
  • loop recovery dialog with manual retry
  • clear stale state on successful version advance

v1.4.175

  • Fix update restart loop: stop auto-installing after download, ask user to confirm restart
  • save draft before install
  • re-enable autoInstallOnAppQuit for graceful close
  • clean stale updater cache

v1.4.174

  • UI modernization: section expand/collapse redesign with visible chevron toggle and field count hints
  • smooth CSS transitions on buttons, cards, nav items
  • panel resizer with RAF-based dragging
  • animated view transitions
  • navigation history with Alt+Left back
  • print layout fixes

v1.4.173

  • Fix NSIS installer failure: switch to oneClick installer (no uninstall step)
  • add single-instance lock
  • full resource cleanup before install (DB, sync, windows)
  • 3s delay for OS file handle release
  • disable allowElevation to prevent Program Files installs

v1.4.172

  • Fix NSIS 'Failed to uninstall old application files' by fully closing window and DB before launching installer
  • use silent mode for NSIS
  • disable autoInstallOnAppQuit to prevent file-lock race

v1.4.171

  • Fix NSIS installer error: updates now install silently on app quit instead of forcing mid-session restart
  • manual Install Now button closes app cleanly before running installer in silent mode

v1.4.170

  • Auto-update now installs silently without requiring user action
  • toast notifications show download progress and restart countdown
  • retry logic hardened with exponential backoff

v1.4.169

  • Add N/A option to PACE Search
  • Add conflict check date auto-fill
  • UX: progressive disclosure, improved spacing, section headings, keyboard focus

v1.4.168

  • Fix postcode lookup: show real error messages instead of generic connection error
  • Fix auto-update loop: defer startup check until renderer loads, persist update state across restarts

v1.4.167

  • Fix Quick Email to Officer: templates now update live as fields are typed
  • single isManualMode flag replaces unreliable dual edit-lock flags

v1.4.166

  • Fix Quick Email to Officer: templates now update live as fields are typed
  • single isManualMode flag replaces unreliable dual edit-lock flags

v1.4.165

  • Bug fixes and improvements

v1.4.164

  • Fix: Check for updates no longer shows Unknown error
  • manual checks bypass cooldown and correctly show checking/downloading/ready states

v1.4.163

  • Firm fields start blank on new records
  • Change Firm button clears all contact fields
  • Office postcode pulled from Settings instead of hardcoded

v1.4.162

  • Remove unsafe-inline from script-src CSP (move inline scripts to renderer/init-events.js)
  • remove broken stations script ref
  • deep audit now 59/59

v1.4.161

  • Main process IPC path hardening
  • updater re-download loop fix
  • deep audit tests (test:deep)

v1.4.160

  • Remove Ready to Archive workflow step
  • two-step Documents to Billing with Close
  • archive from main form only
  • tests updated

v1.4.159

  • Ready to Archive: invoice no longer required to enable Archive
  • two-item checklist only

v1.4.158

  • Remove Invoice sent field from billing
  • invoiced status only
  • billing/tests/UI cleanup

v1.4.157

  • Ready to Archive: no separate Invoice sent step
  • Jamie Crouch invoice scenario tests
  • billing/main tweaks

v1.4.156

  • UX: post-finalise next-step hint, post-finalise Documents & billing bar, status tooltips, clearer autosave indicator
  • UX: billing view filter persistence, workflow firm callout + jump to Case Reference, sharper archive/delete copy
  • UX: home subscription features hint, gear Navigate de-dupe, Help recommended order of work
  • CI: auto-tag on version/changelog push, manual release workflow_dispatch, website sync path fix (WEBSITE_ROOT)

v1.4.155

  • Draft dedupe: do not merge into archived records
  • full-app audit report
  • regression tests (fullAppAudit)

v1.4.154

  • Audit fixes: XSS prevention, billing rounding, file size guards, duplicate invoice prevention, archive confirmation, 18 regression tests

v1.4.153

  • Documents & Billing promoted to top-level navigation
  • New Billing view with record table, filters, status badges
  • Home screen billing widget and nav badge
  • Section 9 streamlined with link to billing view

v1.4.152

  • Bug fixes and improvements

v1.4.151

  • End-of-matter workflow: Documents, Billing, Complete stepper
  • Filename and billing utility helpers
  • Fix verify-release-consistency website path

v1.4.150

  • Add Document_Upload preflight validator
  • Comprehensive attachment test coverage (40+ tests)
  • Improved error surfacing in success modal

v1.4.149

  • Fix Document_Upload attachment (Type wrapper)
  • Sequential invoice numbers (006066, 006067, ...)
  • Invoice name shows client - station instead of generic text

v1.4.148

  • Bug fixes and improvements

v1.4.147

  • Fix QuickFile Invoice_Create: nest SingleInvoiceData inside Scheduling wrapper per API schema
  • Add Language field to invoice payload
  • Fix Qty type: send as number not string
  • Add preflight payload validator (validateQuickFileInvoicePayload)
  • Improve error parsing: extract structured QuickFile errors from HTTP 400 responses
  • Trim firmName before client search to prevent matching failures
  • Remove debug instrumentation
  • Add 32 new tests for schema compliance, preflight validation, auth, error parsing

v1.4.146

  • Harden QuickFile API: input validation, HTTP error handling, PDF size guards, double-submit protection
  • Invoice success modal with Escape key and single-instance guard

v1.4.145

  • Fix QuickFile SearchParameters error (missing OrderResultsBy/OrderDirection)
  • Invoice success confirmation modal

v1.4.144

  • Release script auto-commits version bump and pushes to trigger Vercel
  • removed dead website sync

v1.4.143

  • Remove billing panel print preview, PDF/Word controls, and iframe preview area

v1.4.142

  • Hardened Outlook Web email policy tests with full codebase compliance scan and edge-case coverage

v1.4.141

  • Refactored officer email templates to placeholder-driven rendering
  • Fixed stale time/date bug in email body (timeArrival field missing)
  • Added 6 new built-in officer email templates
  • Unified built-in and custom template rendering pipeline
  • Improved missing-field detection for all template types

v1.4.140

  • Fix invisible input text on all themes (critical)
  • Fix dark mode default on fresh install with prefers-color-scheme detection
  • Extract email templates to data/email-templates.json
  • Migrate custom email templates from localStorage to SQLite
  • Add Template Manager with 26 placeholders and live preview
  • Add missing-field warnings to officer and quick email modals
  • Auto-save OIC email address back to record on first send

v1.4.139

  • Outlook Web only: single emailAPI path, invokeOutlookWebCompose guard, lib/outlookWebComposeUrl
  • remove api.openOutlookEmail
  • Windows Edge launch for OWA
  • automated tests

v1.4.138

  • Postcode lookup via custodynote.com only (no local API key)
  • multi-device sync API
  • settings cleanup

v1.4.137

  • Add Discord community server link (discord.gg/XcEeUe6q) in support and useful links

v1.4.136

  • Remove placeholder Discord links, use custodynote.com/support as community hub

v1.4.135

  • Licence store: support full subscription statuses (cancelled, expired, past_due, trialing) instead of collapsing to active/revoked
  • Auto-migrate existing encrypted licence databases to new schema on startup

v1.4.134

  • Admin licence dashboard: view all users, stats, filter, export CSV, resend keys from server
  • Fix gear menu overflow (bottom items hidden)
  • Add admin email fallback (robertdavidcashman@gmail.com)
  • Add Discord community link in support and useful links
  • Add SES health-check API route to website
  • Rename appId to com.custodynote.app

v1.4.133

  • Fix gear menu overflow (bottom items hidden)
  • Add admin email fallback (robertdavidcashman@gmail.com)
  • Add Discord community link in support and useful links
  • Add SES health-check API route to website
  • Rename appId to com.custodynote.app

v1.4.132

  • Sync: blocked items now auto-retry on app start and every 30 min
  • close guard debounce fix

v1.4.131

  • Fix: close guard now detects unsaved edits in debounce window
  • Sync: blocked items now auto-retry on app start and every 30 min (up to 3 times)
  • QA audit fixes from v1.4.130

v1.4.130

  • Windows: Create desktop shortcut and Open app folder from Settings
  • Preserve Ideal Postcodes API key and user token when saving other settings (empty field no longer wipes stored values)
  • User token field uses text input to avoid browser password quirks
  • Auto-retry blocked/failed sync queue after successful licence activate/validate
  • Click sync footer when it shows blocked/retrying to force retry
  • getAppVersion includes platform for UI (desktop shortcut visibility)
  • Tip: pin to taskbar banner shown on first launch (Windows)
  • Fix: voluntary PDF now renders instruction signatures correctly
  • Fix: autosave failure now shows a warning toast instead of failing silently
  • Fix: CSV export Net Travel and Net Waiting columns now use calculated values
  • Fix: billing duplicate invoice dialog uses in-app modal instead of native confirm
  • Fix: custody PDF no longer duplicates Sufficient Benefit Test
  • Fix: telephone PDF title uses file number fallback
  • Fix: voluntary PDF section numbering no longer collides
  • Fix: CRM3 'Has action started?' reads from record data instead of hardcoded Yes
  • Fix: session lock screen respects dark mode theme
  • Security: PDF exports no longer embed hidden base64 copy of full record data
  • Fix: warn before closing app with unsaved changes
  • Fix: voluntary PDF now includes Consents & Retainer section

v1.4.129

  • Fix magic link login not appearing for trial users
  • Fix delete showing 'failed' on successful deletes
  • Fix data corruption when converting telephone to attendance
  • Fix 'Email my key' hitting wrong API endpoint
  • Add error handling to auto-save, amend, delete, finalise, and settings
  • Fix toast queue race condition and escape key listener leak in dialogs
  • Fix case-sensitive licence key lookups on backend
  • Fix magic link double-click race condition
  • Fix recovery route blocking licence key fallback on expired token
  • Fix CSS theme-light duplicate variables and undefined --border-color
  • Add accessibility labels to search inputs and modal overlays
  • Add past_due subscription grace period support

v1.4.128

  • Fix toast queue draining — toasts after the first now display reliably
  • Add error handling to PDF and Word export when settings fail to load
  • Fix competing database writes during first-launch wizard setup
  • Add 5-minute timeout to magic-link session unlock polling
  • Persistent auto-save indicator in form header and footer bar

v1.4.127

  • Word/DOCX export alongside PDF — export attendance notes as editable Word documents
  • Light theme fix — theme-light now uses genuinely light backgrounds
  • Home dashboard restored — shortcuts, LAA forms, and status strip visible by default
  • Custody outcome codes CN09-CN11 added (released no bail, bail varied/extended)
  • Expanded first-launch wizard with email, backup folder, and quick start guide
  • Self-service session unlock via magic link email (forgot password recovery)
  • Station Mileage shortcut added to home screen
  • Toast notifications now queue instead of overwriting, with screen reader support
  • Silent error handlers replaced with visible feedback across the app

v1.4.126

  • Magic link login: sign in with just your email address — no password needed
  • Polling-based auth flow for reliable desktop login
  • Licence key activation kept as fallback
  • Session persists across restarts — stay signed in until you log out

v1.4.125

  • Fix invisible text in licence overlay inputs (white-on-white)
  • Remove dead account sign-in code
  • Licence overlay always uses dark styling for reliable contrast
  • Open mode: app fully usable without licence for testing

v1.4.124

  • Fix invisible text in licence overlay inputs (white-on-white)
  • Remove dead account sign-in code (5 unused auth IPC handlers, 5 server endpoints)
  • Remove hardcoded admin email from source code
  • Licence overlay always uses dark styling for reliable contrast

v1.4.123

  • Zero-friction redesign: paste licence key to activate — no email codes or passwords
  • Welcome email sent on purchase with licence key and download link
  • Postcode lookup works out of the box via server-side proxy
  • Simplified first-launch: just name and DSCC PIN
  • Settings decluttered: advanced options hidden behind toggle
  • Expired licence shows a non-blocking banner instead of blocking the app
  • Fix CI: skip Linux build in deploy-website step

v1.4.122

  • Fix postcode source-code tests for proxy-first lookup

v1.4.121

  • Zero-friction UX redesign: licence key activation, simplified wizard, settings collapse, non-blocking expiry

v1.4.120

  • Fix input visibility on email and code fields

v1.4.119

  • Simpler sign-in: just enter your email and verify with a 6-digit code — no password or registration needed

v1.4.118

  • Fix auto-update: releases now publish immediately instead of as drafts

v1.4.117

  • Licence overlay visibility: brighter text, visible box border, password input styling, improved contrast across all overlay elements

v1.4.116

  • Improve sign-in form input visibility (higher contrast background and border)

v1.4.115

  • Security: re-enable TLS certificate validation for API connections
  • Security: send Bearer auth headers on recovery, licence, and deactivation API calls
  • Account sign-in UI: settings licence section shows signed-in email instead of synthetic key
  • Cloud backup links updated to custodynote.com/pricing

v1.4.114

  • Account-based sign-in (email + password) on licence overlay
  • Bearer token auth for licence validation and cloud backup API calls
  • auth:register now runs cloud backup entitlement check and returns subscription like login
  • cloud-backup-restore accepts account auth (authToken) as well as licence key

v1.4.113

  • Fix Outlook Web compose: refresh settings from the database before every email open (was using stale cache)
  • loadSettings uses merge instead of full cache replacement to prevent losing in-flight preference changes
  • removed redundant legacy email preference fallback that could reset to default

v1.4.112

  • Billing: LAA forms checklist with preview and attach confirmation for CRM1-3, Declaration, CRM14, CRM15
  • Applicant Declaration added to generated documents
  • LAA PDF Desktop filenames use client - station - date - form - firm
  • Billing readiness panel: clearer finalise, invoice, archive workflow steps
  • Progress bar rebuilds correctly when switching between form types (e.g. custody to telephone)
  • Smoke test updated to handle attachments-before-billing confirm dialog

v1.4.111

  • Auto-migrate legacy saved templates: old templates with hardcoded names are automatically converted to {{placeholders}} on first use
  • Saved templates now correctly fill in current officer name, client name, station and date instead of showing stale values from when they were saved
  • Billing: LAA forms checklist (attach official PDFs), Applicant Declaration in generated docs; previews without forced print; Desktop LAA PDF filename client — station — date — form — firm
  • Billing readiness: clearer finalise → invoice → archive steps; rebuild section progress dots when switching form type (e.g. telephone)
  • Smoke test: dismiss attachments prompt before asserting billing overlay

v1.4.110

  • Fix: Settings Save no longer overwrites Outlook Web email defaults
  • Sync email settings to DB value at startup (prevents stale defaults)
  • saveSettings merges cached values with stored settings consistently
  • Add comprehensive Quick Email template integration tests (jsdom)

v1.4.109

  • Fix scroll flickering: add hysteresis and cooldown to chrome-collapse auto-hide
  • Fix cloud backup banner reappearing after updates (respects permanent dismiss in DB)
  • Auto-save postcode API key and user token on blur (no longer requires Save Settings click)
  • Telephone fields: add None / N/A / Not applicable preset buttons
  • Phone validation: accept sentinel values (None, N/A, Not applicable, Not known, Unknown)
  • Fix duplicate backup-now-btn IDs causing form-view backup button to be unresponsive
  • Remove redundant event dispatches from email and tel preset buttons
  • Add showView rapid-fire guard to prevent view flashing
  • Disconnect MutationObserver during form rebuild to prevent scrollbar flicker
  • rAF-throttle custom scrollbar updates for smoother fast-scroll performance

v1.4.108

  • Fixed postcode 'Check credits' showing undefined — uses Ideal Postcodes /keys/.../details for balance when available, otherwise /keys/... availability (API key validity)
  • Optional User Token field (from ideal-postcodes.co.uk/account) for exact remaining lookups when the API requires it
  • Postcode API key and user token now included when you click Save settings (Integrations tab)
  • Cloud backup home banner: dismiss is permanent (stored in settings + localStorage) — no more re-prompt every 7 days after updates
  • Cloud restore prompt: snooze extended from 7 days to 180 days if you choose Continue without restoring

v1.4.107

  • Full UI overhaul — bigger buttons, cleaner layouts, easier to use on all screen sizes
  • All buttons and form inputs now meet 48px minimum touch target (Material Design guidelines)
  • Home screen decluttered — only essential actions visible, shortcuts and stats hidden for a calmer experience
  • Form editing simplified — header shows only title + autosave indicator, page turner reduced to 3 large buttons
  • Section picker now slides up from bottom with large 56px tap targets for each section
  • Gear menu reorganised — top 5 quick actions shown first, 'More...' toggle for everything else
  • Settings reorganised into 6 tabbed sections (Account, Appearance, Integrations, Backup, Advanced, Support)
  • Responsive font scaling with clamp() — text scales fluidly across all screen sizes
  • Form layout switches to single column under 900px width; max-width capped at 1100px on wide displays
  • Bottom navigation enlarged — bigger icons (1.8rem), larger labels, 'New' button stands out

v1.4.106

  • Fixed scroll cut-off — Reports, Authorities, Help, Station Mileage and Quick Capture screens now scroll fully to the bottom
  • Fixed attendance form content being clipped in compact and comfortable density modes
  • Slimmed the right-side scrollbar from 44px to 10px — cleaner, more space for content
  • Native scrollbars across the app are now thin (8px default) and scale via Settings
  • App layout now adapts to viewport height — smaller windows reduce nav bar size and hide text labels to save space

v1.4.105

  • Fixed postcode URL encoding — postcodes with spaces (e.g. SW1A 2AA) were being sent as SW1A%2B2AA instead of SW1A2AA, causing lookups to fail even with a valid API key

v1.4.104

  • Fixed postcode lookup — 'Find Address' button now correctly reads the API key from settings and fills all address fields

v1.4.103

  • Fixed: billing emails open via Outlook Web compose consistently
  • Fixed settings save for email-related options
  • Fixed race condition in Officer Email modal that could overwrite compose routing mid-flight
  • Added settings note clarifying Outlook Web requires a work/school Microsoft 365 account

v1.4.102

  • Bug fixes and improvements

v1.4.101

  • Bug fixes and improvements

v1.4.100

  • Bug fixes and improvements

v1.4.99

  • Bug fixes and improvements

v1.4.98

  • Bug fixes and improvements

v1.4.97

  • Bug fixes and improvements

v1.4.96

  • Bug fixes and improvements

v1.4.95

  • Bug fixes and improvements

v1.4.94

  • Calendar date picker for Date of Birth
  • Medication field now starts with Yes/No/N/A dropdown

v1.4.93

  • Fix: Outlook Web email defaults no longer reset when saving other settings

v1.4.92

  • Add built-in Disclosure Request and Bail Confirmation templates to Quick Email

v1.4.91

  • Audit fixes
  • New custody fields (strip search, device seizure, special warnings, property, interpreter details)
  • Extended detention reviews
  • Deleted records restore
  • Configurable billing rates
  • NI/DOB/date validation
  • Unsaved work guards

v1.4.90

  • Fix Quick Email templates not filling in officer name, client name, station and other details when a template is selected
  • Live-update template body and subject as form fields are typed, so placeholders reflect the latest values
  • Fix Save as Template not detecting typed values and converting them to reusable placeholders
  • Prevent auto-subject from overwriting template-set subject line

v1.4.89

  • Protect attendance data on startup: stop instead of opening a blank database when encrypted records or licence files cannot be read
  • Prevent portable builds from auto-updating into a different data location and force a synchronous database flush on shutdown
  • Fix records list false-empty states for Custody / Voluntary / Telephone filters, stale pagination, and broaden indexed search
  • Improve new attendance screen readability with corrected form text colours, visible context bar, and better compact/high-contrast text sizing

v1.4.88

  • Fix Quick Email button not appearing on Home screen and Records list after app launch

v1.4.87

  • Quick Email: add type of attendance, date and time fields; templates save with placeholders (e.g. {{oicName}}, {{clientName}}) for reuse

v1.4.86

  • Quick Email: email an officer without creating a record first (Home screen + Records list)
  • Save as Template: save any email you compose as a reusable template directly from the email modal
  • Fix: Outlook Web compose applied to OIC emails when settings cache was empty

v1.4.85

  • Fix app initialisation failure caused by variable scope conflict in renderField (SyntaxError: Identifier wrap already declared)
  • Fix cloud backup connectivity when antivirus HTTPS scanning is active

v1.4.84

  • Fix cloud backup connectivity when antivirus HTTPS scanning is active (self-signed certificate in chain)

v1.4.83

  • Authority auto-fill: select a record and authority type, auto-fill from record data, prompt for missing fields, generate print-ready PDF
  • Authorities view: dynamic cards with Fill from record button and record picker modal
  • In-record authority picker: Generate Authority PDF dropdown in standalone Authorities section

v1.4.82

  • Add in-record Email Instructing Solicitor section with template picker and open-in-email-app
  • Custom email templates: scope (Use anywhere / Officer only / Solicitor only) and Edit in Settings
  • Officer Email OIC modal: saved custom templates (officer/all) with placeholders; remember last template used
  • Solicitor email picker shows default preset plus scoped custom templates; subject/body in PDF when present
  • Peer-review fields (representations, follow-up) and solicitor email block included in PDF output

v1.4.80

  • Open the QuickFile invoice automatically after creation when a preview link is available
  • Improve billing panel contrast so text, inputs, and totals stay readable
  • Add explicit dark-mode billing panel styling for clearer review screens

v1.4.79

  • Surface Billing & Invoice directly in the time recording section
  • Show invoice status and the billing workflow in a clearer in-form card
  • Refresh the billing card immediately after QuickFile invoice creation

v1.4.78

  • Make attachments easier to spot in the time recording section
  • Promote the add attachment action with clearer styling and messaging
  • Add an empty state so users can see where files will appear

v1.4.77

  • Fix QuickFile credential clearing and cloud backup modal listener issues
  • Restore firm context and concise no-reply officer email templates
  • Make Auto section navigation responsive and align installed modules messaging with licensed add-ons

v1.4.76

  • Added home-page section visibility controls so busy front-page blocks can be hidden
  • Saved the new home visibility preferences in settings for a cleaner default workspace

v1.4.75

  • Visual layout redesign across dashboard, editor shell, and settings control centre
  • Added layout/display/accessibility preferences with richer status states and responsive polish

v1.4.74

  • Admin and authorised accounts now automatically receive all add-ons (QuickFile, Email Templates)

v1.4.73

  • Font size slider range extended up to 50px for maximum readability
  • Header and navigation auto-clamp at large font sizes so controls stay usable
  • Adjustable scrollbar size slider in Settings (1x to 4x width)
  • Display density toggle: Compact, Default, or Comfortable spacing
  • Persistent section sidebar on wide screens (1200px+) for quick navigation
  • Context bar stays visible while scrolling instead of auto-hiding

v1.4.72

  • Larger, more visible scrollbar that is easier to grab
  • Font size slider now goes up to 28px for better readability
  • Offence field in Quick Capture is now full-width for longer descriptions
  • Time arrived labels clarified: your arrival vs client arrival at station
  • New client arrival time field in Quick Capture separate from your arrival
  • Offence auto-populates from Quick Details into Section 4 when empty
  • Scroll performance improvements to reduce glitching

v1.4.71

  • Billing: new Billing & Generated Documents panel on each custody record with matter details, billing preview, document list, review confirmation checklist, and one-click QuickFile invoice creation
  • Billing: invoice narrative auto-generated from client, station, date and offence with manual editing, live recalculation of attendance fee, mileage, parking, VAT and totals
  • Billing: duplicate invoice protection with warning prompt, billing audit log tracking all invoice and document actions, and email pack preparation for sending invoice to instructing firm
  • Station Mileage: new admin view to set mileage from base for each police station, with search and bulk save — mileage auto-populates on billing panel
  • Reports: new Billable Attendances report showing all completed but uninvoiced records with search, date range and firm filters, summary totals, and direct invoice shortcuts
  • QuickFile: full invoice creation service that matches or creates the firm as a QuickFile client, adds line items for attendance fee, mileage and parking with VAT, and stores the invoice ID, number and link back on the custody record

v1.4.70

  • Add-on licensing now gates QuickFile and Officer Email Templates by entitlement
  • New Authorities section with proposed wordings and shortcut access from home and the gear menu

v1.4.69

  • QuickFile: easier setup and import flow with Save and test / Save and import actions, plus a direct shortcut from Firms to QuickFile settings
  • QuickFile: firm import now fetches clients in supported pages, improves client/contact mapping, and keeps imported firm details editable in the app
  • Outcomes: removed case outcome status in favour of decision-only flows, with corrected bail fields for charged with bail, bail without charge and released under investigation
  • Charges and email add-on: charged outcomes now pre-fill offence details from earlier sections, and email subject/body wording has been updated
  • QuickFile firms remain local to each user's own encrypted app database and are not bundled into app updates

v1.4.66

  • Reliability: database and backup writes now use atomic temp-file persistence to avoid dropped saves and rename races
  • Sync: remote pull no longer overwrites dirty local records and now surfaces protected conflicts in diagnostics and the footer
  • Security: supervisor approval now requires re-auth with the recovery or admin password before it is logged
  • Security: idle session lock now requires a real password check before unlocking
  • Sync: supervisor approvals now update sync metadata so approval state propagates correctly across devices

v1.4.65

  • Records list: type filter (Custody/Voluntary/Telephone) now works; date sort has newest and oldest options.
  • List actions: open, delete and duplicate show error toasts on failure; archive has 5-second Undo before committing.
  • Duplicate record: time-sensitive fields (instruction time, waiting times, arrival notes) are cleared for the new visit.
  • Bank holidays: fallback extended to 2030; GOV.UK API cache used when available.
  • Recovery password: after 3 wrong attempts you can quit and try again later instead of being forced to a fresh database.
  • Settings: auto-lock after inactivity (5/10/15/30 min); plaintext licence warning when safeStorage unavailable.
  • First-launch wizard: recovery password prompt with machine-ID warning; optional set before finishing.
  • Reports: CSV export with date range; Firms table: Edit button for in-place editing.
  • Record form: History button shows amendment log; Add-Ons: custom email templates with placeholders.
  • Fix: home backup status refreshes after success or failure; local restore checks for IPC before calling APIs.

v1.4.64

  • First launch: a dismissible tip banner now appears suggesting users pin Custody Note to their taskbar or Start Menu for quick access. Shown once on Windows only.

v1.4.63

  • Settings: backup restore lists now show readable labels — 'Latest snapshot' or '12 Mar 2026, 10:00 — hourly archive' — instead of raw filenames, for both cloud and local restore panels.

v1.4.62

  • Settings: remove redundant App Status card (Backup/Network/Version). These values are shown in the footer and the main Backup card.
  • Records list: PDF button now opens a print/preview window instead of silently saving to Desktop — choose Print or Save as PDF from the dialog.
  • Backup: smarter retention — keeps last 24 hourly archives plus one per day for 7 days (max 31 files). Previously kept 48 hourly which only gave 2 days of history.
  • Backup restore: after restoring from cloud or local backup, the scheduler is suppressed for 60 seconds then takes a fresh backup of the restored state — prevents the restored database being immediately overwritten by a stale scheduled run.

v1.4.61

  • Settings: fix permanent 'Checking…' spinners in the Status card — network and backup values now update instantly when Settings opens.
  • Settings: fix 'Backup now' button — now calls backup directly without requiring a record to be open.
  • Settings: fix 'Check for update' button — now triggers the update check correctly from the Status card.
  • Settings: add 'Restore from Local Backup' panel — lists backups from your local and off-site folders, lets you select and restore any one. Safety copy saved first.
  • Email OIC templates: outcome-aware body text. When outcome is known, Templates 2 and 3 pre-fill charges, court date/time, and bail details from the record. When charged without bail or remanded, bail conditions are never mentioned.

v1.4.60

  • Installer: Start Menu shortcut now reliably appears in the Windows apps list. Added menu category folder 'Custody Note' and explicit shortcut name so the app is easy to find and pin.

v1.4.59

  • Records list: add PDF button to each row — exports directly to Desktop without opening the record.
  • First-launch setup: add email address field; email is saved to Settings and pre-fills the From address. Test-email button appears as you type your address.
  • First-launch setup: email is now saved when you click Save & Finish.

v1.4.58

  • Outcome section: add Court Time field. When 'Charged without Bail', 'Charged with Bail', or 'Remanded in Custody' is selected, Court Date auto-fills to the next day and Court Time auto-fills to 10:00 — both remain fully editable. Court time also appears in the custody note print view.

v1.4.57

  • Officer Email Templates: compose opens in Outlook Web (Microsoft 365). Copy Email, Mark Sent, and Cancel. Optional add-on in Settings → Add-Ons.

v1.4.56

  • Fix Officer Email Templates add-on toggle: corrected layout rendering in Settings, toggle now auto-saves instantly without requiring the Save button, and the Records list updates immediately when the add-on is enabled or disabled.

v1.4.55

  • Fix: Officer Email Templates add-on now activates correctly on app startup. Previously the Email OIC button would not appear until Settings had been visited in the same session.

v1.4.54

  • Add Officer Email Templates add-on module. When enabled in Settings → Add-Ons, an Email OIC button appears on each record in the Records list. Click it to open a modal with three pre-filled templates: First Attendance Disclosure Request, Follow-Up / Outcome Request, and No Reply Follow-Up. Templates auto-populate officer, client, station, firm, date and fee earner details from the record. Supports Open in Outlook Web, Copy Email, Mark Sent, and Cancel. A Sent badge appears on the list row after marking sent. Feature is fully optional and has no effect on the core app when disabled. Designed for future paid licensing.

v1.4.53

  • Remove PDF buttons from header and bottom bar. Add Print PDF button to each record in the list. First form section now has attendance type selector (custody/voluntary) to switch modes. Remove CRM1 signature requirement. Remove pre-charge engagement field and CN12/CN13 codes. Fix app version display in Settings. Updated PDF advert: Free trial at www.custodynote.com. Hide custody number from voluntary records. Responsive footer layout. Updated help documentation.

v1.4.52

  • Fix PDF: attendance note and declaration now combined into a single PDF. Print buttons now open in-app print preview with Print dialog. Fixed voluntary attendance interview data missing from PDF output. Removed duplicate form element ID.

v1.4.51

  • Bottom nav bar
  • sticky PDF export button
  • compact PDF layout
  • firm inline edit
  • auto-fill default firm on new record
  • settings status card
  • backup off label when unconfigured

v1.4.50

  • Voluntary interview: hide custody/arrest/PACE fields
  • LAA declaration partner question
  • gear menu Documents/Data labels
  • backup settings simplified with Detect cloud folders
  • auto-update checks every 45 min and on app focus
  • PDF export now renders all form sections

v1.4.49

  • Export PDF and Declaration in custody and voluntary forms
  • Declaration saved separately with attendance
  • accessible from form and Records list

v1.4.48

  • Privacy notice above declaration
  • auto-fill client name and date on LAA declaration
  • compliance fixes for Consultation and telephone Sign Off

v1.4.47

  • Privacy notice above declaration
  • auto-fill client name and date on LAA declaration

v1.4.46

  • Off-site backup: auto-detect OneDrive/Dropbox/Google Drive, simple one-click folder choice
  • Improved iCloud Drive detection

v1.4.45

  • Applicant declarations in records: Declared badge, Print Declaration button
  • Unsigned declaration prompts for reason and shows on PDF

v1.4.44

  • Print PDF button added to records list — export and open PDF directly from the record list
  • LAA Declaration with client signature now embedded in Consultation section (after client understanding checkboxes, before conflict check) for both custody and voluntary attendances
  • Fixed voluntary form checklist groups not rendering ('Data & disclosure' group was missing from render order)

v1.4.43

  • Check for Updates button added to hamburger menu — visible on every page
  • DB export cached — avoids re-serialising the entire database when data hasn't changed
  • saveDb() is now idle-aware — defers disk writes until user has been idle for 3 seconds
  • All backup functions (quick, hourly, manual) now use async file writes instead of blocking synchronous ones
  • Manual Backup Now button uses cached export for near-instant response

v1.4.42

  • Renamed 'First contact within 45 mins of instruction' to 'Within 45 mins of duty call' with Yes/No/N/A options (all form types)
  • Fee Earner / Rep field added to custody form section 1, auto-fills from settings
  • Firm contact details (name, phone, email) now saved back to firm database for auto-populate on future use
  • Major performance fix — DB flush interval increased from 500ms to 30s, disk writes made async to stop main-process blocking
  • Autosave debounce increased to 3s, autosave interval to 30s, backup scheduler much calmer (30min quick, 90s idle grace)
  • Sync worker deferred from 1s to 15s after record change to reduce contention
  • Added prominent green Backup Now button in form and app header for manual save+backup on demand
  • Scrollbar widened from 8px to 16px with visible track and larger grab area

v1.4.41

  • Voluntary outcome simplified — merged caseOutcomeStatus and outcomeDecision into single Outcome field
  • Added new voluntary outcomes: Officer to Notify, Released Under Investigation, Youth caution, Referred to diversion programme, Further voluntary interview required
  • Removed Charged options from voluntary form (use convert-to-custody instead)
  • Removed Client Aftercare section from voluntary form
  • Removed QuickFile integration from settings
  • Removed editable LAA fee rates from settings (hardcoded defaults retained)
  • Added Additional Modules Installed section to settings (placeholder for future modules)
  • Website changelog now shows only the last 5 releases

v1.4.40

  • Voluntary form rebuild — now mirrors the custody form with custody-specific fields removed, instead of a separate rewritten form
  • Voluntary form gains full Offences section (4 offences with dates, mode of trial, statute)
  • Voluntary form gains full Disclosure section (co-suspects, CCTV, witnesses, exhibits, PNC)
  • Voluntary form gains full Consultation section (conflict check, eligibility, case assessment, advice checklist, signatures)
  • Voluntary form gains multi-interview structure (same as custody)
  • Voluntary form gains full Time Recording section (travel, waiting, time breakdown, case stage, invoice)
  • Voluntary-specific fields preserved (voluntary status, free to leave, caution, convert-to-custody, outcome codes CN04-CN13)
  • Compact bottom bar — buttons further reduced to 24px min-height

v1.4.37

  • Performance: typing is now smooth — single 200ms UI refresh instead of six cascading debounce timers per keystroke
  • Autosave debounced to 1200ms; editor activity reported at most every 5s (no longer on every keystroke)
  • Form change/blur no longer run full collectCurrentData on every field change — only before save/navigation
  • Progress bar no longer rebuilds section index on every keystroke; list view caches parsed data per row
  • Main process: audit diff skipped for draft saves (only computed on finalise); new index for list query
  • Performance panel (Ctrl+Shift+P): shows autosave duration, sync queue, backup status
  • PDF preview shortcut moved to Ctrl+Shift+F (Ctrl+Shift+P now opens performance panel)
  • 9 automated performance tests added

v1.4.36

  • Critical finalise fix: replaced confusing validation modal with simple confirm dialog — user now sees 'X field(s) incomplete. Finalise anyway?' with OK/Cancel
  • Fixed sync pull crash: removed undeclared ctx variable reference that caused ReferenceError on every sync pull
  • Immediate disk persistence: finalise writes are now flushed to disk immediately (not debounced) to prevent data loss
  • Toast rendering fix: confirm dialog messages now display line breaks correctly
  • Enhanced debug panel (Ctrl+Shift+D): shows last finalise attempt, result, and DB status
  • 61 comprehensive automated tests covering the full finalise flow

v1.4.35

  • Finalise flow streamlined: removed extra confirmation dialog — clicking Finalise now saves immediately when all fields are complete
  • Clear progress feedback: toasts shown at every step ('Saving finalised record…', 'Finalise error: …')
  • Stuck finalise flag auto-clears after 10 seconds (was 30s) so retrying is faster
  • Entire finalise flow wrapped in try-catch — JS errors are now caught and shown to the user instead of silently failing
  • Validation modal now shows helpful toast: 'X field(s) incomplete — click Finalise Anyway to proceed'
  • Sync pull guard, retry with DB verification, and force-status fallback from v1.4.34

v1.4.34

  • Critical finalise fix: added 3-attempt retry with DB verification after each write
  • Sync pull guard: server can no longer overwrite a locally-finalised record back to draft
  • Autosave hardened: quietSave blocked during finalisation
  • Added attendance-force-status IPC as a last-resort fallback

v1.4.33

  • Replaced 2-minute backup interval with idle-aware scheduler — backups now defer while typing and only run when there are real changes (minimum 10-minute gap)
  • Fixed finalise not persisting — autosave race condition eliminated by stopping autosave and setting record status before the save IPC
  • Calmer sync messages — 'Saved locally' instead of alarming 'API unreachable' when offline at police stations
  • Enhanced diagnostics panel (Ctrl+Shift+D) with backup state, timing, and renderer status
  • 65 automated tests covering backup scheduling, finalise flow, and stale-write protection

v1.4.32

  • Reduced sync frequency 10s to 30s for better performance
  • Fixed finalise race condition where autosave could block finalisation
  • Added 30s safety timeout to prevent stuck finalise state

v1.4.31

  • Performance optimization: faster startup (deferred backfills, reduced splash, eliminated redundant fetches), lazy form section rendering, event delegation for list view, lightweight home stats IPC, indexed draft lookup, transaction-wrapped migrations, CSS blur removal, timer cleanup

v1.4.30

  • Sync engine hardening and version-aware queue reliability fixes
  • Finalise/billing flow now supports unknown ongoing outcomes without blocking
  • Added diagnostics panel improvements and comprehensive sync/finalise stress tests

v1.4.29

  • Bug fixes and improvements

v1.4.28

  • Bug fixes and improvements

v1.4.27

  • Billing: UFN no longer flagged as missing — not required in this workflow
  • Billing: Outcome code only required when matter is concluded (not Draft/Ongoing/Adjourned)
  • Sync: fixed pending count calculation (JS truthiness bug showing stale sync_dirty count)
  • Sync: auto-recovery for failed/blocked queue items — retries after 5 min cooldown
  • Sync: queue cleanup — stale failed/blocked entries cleared on re-enqueue and startup migration
  • Sync: UI now shows distinct failed/blocked status with error tooltip instead of generic pending

v1.4.26

  • Bug fixes and improvements

v1.4.25

  • Finalise mutex — prevents double-click finalise; shows 'Finalising in progress' if button clicked twice
  • Finalise race fix — waits for any in-flight auto-save to complete before sending the finalise request
  • Finalise bar visible immediately — 'Attendance Finished — Finalise' button now shows on new forms without waiting for first auto-save
  • Scroll smoothness — form container uses GPU-accelerated scrolling; chrome-collapse scroll handler moved to requestAnimationFrame to eliminate jank
  • Section bar auto-scroll — active section button scrolls into view when navigating between sections
  • Debounced visibility checks — conditional field show/hide and billing readiness panel now debounced on change to reduce layout thrash
  • Section index popup — only rebuilt when open, not on every section navigation

v1.4.24

  • Offline-first sync — local SQLite is source of truth; saves never wait for internet; sync runs in background
  • Sync queue — per-record queue; one failed record never blocks others; retry with backoff (10s, 30s, 2m, 10m, 30m)
  • 8-second request timeout — prevents hanging on restricted Wi-Fi; timeout/network errors classified as retryable
  • Connectivity check — optional GET /api/health; clearer states: Synced, Pending sync, Saved locally, Sync delayed/blocked
  • Finalise fix — stop autosave before finalise; quietSave skips finalised records; backend rejects draft overwriting finalised
  • Sync on reconnect — online event and visibilitychange trigger immediate sync attempt
  • Diagnostics panel — Ctrl+Shift+D shows queue length, connectivity, last error for support

v1.4.23

  • Voluntary Attendance mode — new first-class workflow for PACE voluntary interviews (client not in custody)
  • Home screen: separate cards for Custody Attendance and Voluntary Attendance; Voluntary uses dedicated green card
  • Voluntary form: 7 sections; conversion to custody when arrested; billing readiness; confidentiality reminder

v1.4.22

  • Save/Exit now shows a menu with 'Finalise & exit' and 'Save as draft & exit' — matches the help text and makes finalising easier to find
  • Finalise flow — shows 'Finalising…' toast immediately so you know it's working; improved error handling when save fails
  • Firms now save correctly — firms table schema fixed (contact_name was missing, causing saves to fail); error toasts when firm save fails; 'Add new firm' in form includes source of referral; selecting a firm auto-fills contact name, phone, email, LAA account, and source of referral

v1.4.21

  • Fixed ENOENT crash when saving database — prevents concurrent saveDb calls from racing on rename; ensures userData directory exists; wraps save in try-catch so errors no longer crash the app

v1.4.20

  • Attachments — now accepts any file type (PDF, Word, Excel, CSV, images); file icon shown for non-image attachments; size limit raised to 15MB
  • Finalise — fixed silent failure when finalising a record; any pending auto-save is now cancelled before the finalise call to prevent a draft-save from undoing it; errors are now surfaced with a toast
  • Performance — removed duplicate progress bar rebuild that ran on every field change; context bar update debounced to 250ms

v1.4.19

  • Sync fix — httpPost now follows HTTP redirects (301/302/307/308) and checks status codes
  • Sync fix — increased sync timeout from 10s to 30s to prevent timeouts with larger record sets
  • Sync fix — push no longer blindly clears sync_dirty; checks sync_version to avoid losing changes made during push
  • Sync fix — server-side push now writes to S3 in parallel batches of 10 (5x faster)
  • Sync fix — server-side pull now reads S3 in parallel batches of 10 with 200-record cap to prevent timeouts
  • Attachments moved to end of record near Invoices section with clearer description and guidance
  • Legacy attachments from custody/disclosure/interview sections auto-migrated to new unified location

v1.4.18

  • Sync fix — manual sync now reports correctly when not configured; pending count includes soft-deleted records
  • Backup clarity — settings screen shows a clear summary of where backups go (local, off-site, cloud)
  • Detect cloud folders button in Settings — finds OneDrive, Dropbox, Google Drive automatically
  • Case assessment — now a dropdown (Strong / Medium / Weak / N/A) with reasoning box
  • Client instructions — new larger text box for full client instructions above the summary
  • Clothing / shoes / phone seized — if Yes, prompts for what was seized and notes
  • Offence dates — clearer Start date / End date labels when Between is selected
  • Dropdown defaults — most disclosure and evidence fields default to No or N/A
  • Performance — form change handlers now update only the changed field inline; full DOM collection deferred

v1.4.17

  • First-launch wizard — step 2 now asks where to back up (OneDrive, Dropbox, Google Drive auto-detected)
  • Cloud folder detection — scans for OneDrive, Dropbox, Google Drive, iCloud and offers them as backup destinations
  • Version check fix — v1.4.16 GitHub release was stuck in Draft; now published correctly

v1.4.16

  • Performance — app reacts faster to input; debounced save, scoped DOM queries, reduced layout thrashing
  • Database writes batched — disk I/O no longer blocks on every keystroke
  • Smoother transitions — replaced expensive CSS effects with lightweight alternatives
  • Offence dropdowns now show full grouped list on focus with type-ahead search
  • Offence date qualifiers — On, Before, After, Between, On or about, Unknown
  • Benefit type — N/A option added
  • Confirmation of instructions — signatures optional via dropdown
  • Next location hidden when bail without charge (police station to return to covers it)
  • Sync status fix — no longer shows conflicting messages
  • Sync now button restored on home screen
  • Cloud backup works on restricted networks (cached entitlement)

v1.4.15

  • Sync status fix — no longer shows conflicting 'all synced' then 'pending' messages; counts now reflect actual state
  • Sync now button restored on home screen for manual sync
  • Cloud backup works on restricted networks — cached entitlement used when licence server is unreachable (e.g. government WiFi)

v1.4.14

  • Automatic record sync — changes sync within seconds across devices, Sync now button removed
  • Version and changelog drift fix — website and app versions stay in sync

v1.4.13

  • Security hardening — licence keys no longer sent in URLs; rate limiting and session checks improved
  • Cloud key recovery — recover your encryption key from the cloud using your licence key if you forget your recovery password
  • Recovery password must be at least 10 characters with uppercase, lowercase and a number
  • Sync status and Check for updates moved to the footer with connection and backup status

v1.4.12

  • Sync status and Check for updates button moved to bottom of screen with other status indicators
  • Fix for sync indicator briefly showing before status loads

v1.4.11

  • Sync status now confirms all records synced with count
  • Check for updates button on home screen
  • Update button changes to Install when update is ready

v1.4.10

  • Cross-device record sync — records now automatically sync between devices every 2 minutes
  • Licence validation fix — subscription status now correctly updates across devices
  • Sync now button on home screen for immediate sync

v1.4.9

  • LAA fee rates updated to Standard Crime Contract 2025 (SI 2025/1251) — fixed fee £320 and escape threshold £650 confirmed and harmonised across all police stations
  • Licence status badge now visible permanently in the footer on every screen — shows Trial / Licensed / Expiring with colour coding
  • System Status diagnostic panel added to Settings — shows live licence, cloud backup, and auto-update status with clear explanations
  • Trial users now see an inline licence key entry box directly in Settings › Licence — no extra clicks needed
  • Home screen shows a trial banner with direct link to licence key entry when on a free trial
  • Fee earner name now saves and persists correctly across sessions
  • Removed 'Prepare trial for email' developer tool from user-facing gear menu
  • Version number no longer auto-increments on every build — versions only change on an explicit release
  • Removed debug instrumentation
  • Forgot-key rate limit fix

v1.4.8

  • Licence key easier to find (home card, gear menu)
  • Cloud backup clearer messaging
  • Check for updates in Settings
  • Support FAQ instead of Email Support
  • Share Custody Note card
  • New CN monogram icon

v1.4.7

  • Cloud Backup section moved to top of Settings Backup card
  • Footer 'Local backup only' is clickable and opens Settings
  • Added 'Checking...' state when verifying cloud backup status
  • Fresh entitlement check when opening Settings

v1.4.6

  • Automated version and changelog sync with website

v1.4.5

  • Automatic updates — the app now silently downloads and installs updates from GitHub Releases so subscribers always have the latest version
  • Managed cloud backup — automatic encrypted backups to AWS London with no credentials stored in the app
  • Support forum integration — community forum linked across the website
  • Removed manual AWS S3 settings from the app (now fully managed via subscription)

v1.4.2

  • Managed cloud backup — automatic encrypted backups to AWS London with no credentials stored in the app
  • Support forum integration — community forum linked across the website
  • Removed manual AWS S3 settings from the app (now fully managed via subscription)

v1.4.1

  • Bug fixes and stability improvements
  • Version display and build pipeline updates

v1.4.0

  • UI refinements and accessibility improvements
  • Backup and restore flow improvements
  • Performance optimisations for large datasets

v1.0.0

  • Initial public release
  • Full attendance records with PACE review tracking (1st, 2nd, 3rd review — due and actual)
  • Telephone advice (INVB) recording
  • Quick Capture for incoming calls
  • Client details, offence picker with type-ahead search
  • Disclosure and OIC fields
  • LAA outcome codes, stage reached, and fee codes
  • Time recording (travel, waiting, attendance)
  • Firm tracking and multi-firm billing
  • Disbursements with VAT treatment
  • PDF export of attendance notes for firms and clients
  • Reports by month, firm, and station
  • Local encrypted backups every 2 minutes (AES-256-GCM)
  • Off-site folder backup (OneDrive, Dropbox, etc.)
  • Tamper-proof cloud backup on AWS (subscriber add-on): permanent retention, UK data centre, per-subscriber isolation
  • Licence key activation (30-day trial and paid subscription)
  • Works fully offline at any police station

Want to see these features in action?

Start Free Trial