Settings Audit & Logs Page
New Features
Standalone Logs page: API request log promoted from the Developer settings tab to its own top-level page at
/logs. Full-page master-detail split: scrollable request list on the left (40%), detail pane on the right (60%). Fills the viewport height — no more fixed-height card. Clicking a row loads full request detail including headers, request body, and response body with copy buttons. Deselecting returns the list to full width.Logs sidebar nav item: New terminal-style icon in the sidebar between Reports and Settings. Works in both expanded and collapsed sidebar states.
Fixes
Sticky save bar overlap (
OrganisationSettingsPage): Changed fromfixed bottom-0 left-0 right-0tosticky bottom-0. Save bar no longer spans under the sidebar in the v3.2.2 document-flow layout.Duplicated helper text (
OrganisationSettingsPage): Flat Rate Scheme percentage field showed “Defaults to 14.5%…” twice. Now reads “Your sector rate. Defaults to 14.5% (IT/computer services) if left blank.”Dark mode flash on theme toggle: Status badges across Dashboard, Invoices, Quotes, and Transactions used raw
bg-gray-100 text-gray-700classes withoutdark:counterparts. Replaced with semantic tokens (bg-surface-tertiary text-content-secondary) inutils.tsandformat.ts. All coloured status variants (sent, paid, partial, overdue) and account type badges now have explicitdark:pairs. Theme toggle is now instant with no repaint flash.Raw colour class in curl block (
DeveloperSettingsPage):bg-gray-900replaced withbg-slate-900 text-slate-100for consistency with the SpeyBooks dark palette.
Improvements
Developer settings decluttered: Removed the request log section, reducing the page from 965 to 790 lines. Now contains only API Keys, Webhooks, and Quick Start — pure configuration, no debugging.
RequestLogDetailPanel rewritten: Adapted from inline table expansion to a proper side-panel component. Added copy buttons on all JSON blocks, skeleton loading state, and error handling with close action. All badge colours use
dark:pairs.
Architecture
- New route
/logsadded toApp.tsxinside the protected layout. LogsPage.tsxuses negative margins (-m-4 lg:-m-8) to break out of<main>padding and fill the viewport.getStatusColor()andgetAccountTypeColor()inlib/utils.tsnow return semantic token classes for neutral states and explicitdark:pairs for coloured states.getStatusColor()inlib/format.tsupdated with semantic tokens forbg,text, andborderproperties.- No database migrations, API changes, or new dependencies.