- New NavDrawer + hamburger menus for the app and admin layouts (below
md there was previously no navigation at all)
- Disable the dead Documents nav link that routed to the marketing
landing page via the catch-all route
- Replace the decorative topbar search with a debounced clients+cases
search dropdown (keyboard navigable, loading/error/empty states)
- Surface dashboard API failures: retry banner, em-dash KPIs, and a
retryable error state on the recent-cases card
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Passenger's node-loader uses require() which cannot load ES modules.
server.cjs is a CommonJS shim that bridges into server.js via dynamic import().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Local file storage via STORAGE_PATH env var (replaces DO Spaces)
- POST/GET/DELETE /api/cases/:caseId/documents + GET /api/documents/:docId/download
- useDocuments hook + upload/list/download/delete UI in CaseDetailPage
- GET /api/invoices/summary — live SUM of sent+overdue invoices
- Dashboard outstanding KPI wired to real DB value
- api.upload() for FormData, formatBytes() utility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>