Skip to content
Home/Changelog

Changelog

What's new in CliniVoice AI. We ship updates regularly — check back often.

v5.608.0

LatestApril 2026
New[fix] Microphone errors now show specific messages: permission denied, no mic found, mic in use by another app
New[fix] Letter save retry button — click Retry to re-attempt save without reformatting
New[fix] Drag-and-drop counter pattern prevents flicker when dragging over nested child elements in upload zone
New[fix] Upload button click intercept fixed — animate-ping element no longer blocks pointer events on adjacent buttons
New[fix] Append mode banner shows red Stop button while recording — no need to hunt for the top-bar control

v5.602.0

LatestApril 2026
New[fix] NHS number check-digit validation now blocks Format button — prevents invalid patient identifiers reaching AI or being saved to database
New[fix] Double-Escape required to clear a long transcript — prevents accidental data loss from stray keypress
New[fix] Unsaved letter edits (inline editing mode) now tracked for beforeunload warning — prevents silent loss of post-formatting edits
New[fix] Letters page: calendar-accurate date filtering, deduplicated search results, preview resets correctly on filter change
New[ux] Clinical Review accordion (ActionItems/VoiceActions/ClinicalFlagsPanel) auto-collapses when all flags acknowledged
New[ux] Export/copy dropdown buttons disabled while AI is formatting — prevents mid-format file corruption
New[ux] Delete letter dialog auto-focuses Cancel button (safer default for destructive actions)
New[ux] Pre-appointment notes: character limit warning at 1500/2700 chars, hard cap at 3000
New[ux] Transcripts page: skeleton loader while lazy-loading letter content; error toast replaces silent failure
New[ux] ClinicSession: Next/Finish buttons now explain why they're disabled via tooltip
New[ux] Export dropdown: left-aligned on mobile to prevent viewport clipping on narrow screens
New[a11y] Copy button aria-label updates dynamically between 'Copy' and 'Copied to clipboard!'
New[a11y] Upload progress bar: role=progressbar, aria-valuenow/valuemin/valuemax for screen readers
New[a11y] Patient info badge title attributes for truncated GP surgery and diagnosis text
New[a11y] Sessions page: keyboard focus ring on session header buttons
New[fix] Token consistency: remaining hardcoded bg-purple-500/bg-indigo-600/bg-sky-600 buttons replaced with bg-primary

v5.580.0

RecentApril 2026
New[ux] Feedback button: removed intrusive floating circle — now a compact 'Feedback' link in the top nav bar and mobile menu
New[ux] Letter panel: ActionItems + VoiceActions + ClinicalActionsPanel collapsed into a single 'Clinical Review' accordion (off by default)
New[ux] Auto-format: now OFF by default — your choice persists across sessions; Format button pulses to prompt you
New[fix] Token consistency: hardcoded indigo-600/violet-600/sky-500 buttons replaced with bg-primary across page.tsx, ActionItems, ReflectionPanel, transcripts, batch, admin, templates pages

v5.566.0

RecentApril 2026
New[ux] Letters page: print button opens browser print dialog with clean letter formatting
New[ux] Letters page: mobile layout — tap letter to see full preview, back button returns to list
New[fix] FormattedLetter: patient name/DOB row now responsive (grid-cols-1 on mobile, 5-col on desktop)
New[ux] Format button: animated spinner shown during AI formatting
New[fix] Analytics: 'Last audit' zero-state now shows 'None / No alerts' instead of misleading 'Today'
New[fix] Hardcoded colors replaced with theme-aware CSS variables (ambient toggle, clinical prompts border)
New[ux] Settings: organisation invite/create buttons use primary theme color
New[ux] Settings: referral copy button shows 'Copied!' feedback for 2 seconds
New[ux] Sessions: confirm-delete button turns red to clearly signal destructive action
New[fix] FileUpload: hint text corrected — 500 MB limit, cross-platform paste shortcut (Ctrl+V / ⌘V)

v5.494.0

RecentApril 2026
New[fix] page.tsx: isMounted guards added to auth.getUser() and session-restore useEffects — prevents setState-after-unmount on fast navigation
New[fix] audit/api-status pages: unmount guards + visibility-aware polling (v5.494)
New[sec] SSRF blocklist hardened for IPv6 and decimal-encoded IPs (v5.494)
New[fix] letters, admin/billing, admin/debug pages: unmount guards on all async useEffects (v5.493)
New[sec] Org role allowlist enforced; EPR stub routes return 503; dead lib removed (v5.492)
New[arch] Centralised admin-guard; client-error hardening; shared validateUUID helper (v5.490–v5.491)
New[perf] Server-side counts; caching headers; UUID guards across remaining routes (v5.488–v5.490)
New[fix] Unmount guards sweep: actions, transcripts, clinic-day, revalidation pages (v5.485–v5.488)
New[ux] Market-readiness cleanup sprint (v5.482)

v5.484.0

PriorApril 2026
New[fix] Middleware restored: proxy.ts exported wrong function name — Next.js was silently skipping all auth protection. Merged timeout guard + cookie fallback + / → /landing redirect
New[fix] 5 components: AbortController cleanup added to useEffect fetch calls (ClinicalPromptsPanel, LetterEditor, EvidencePanel x2, FormattedLetter)
New[fix] DPA localStorage key scoped to user ID — shared-device users no longer inherit each other's acceptance
New[fix] EvidencePanel: dismiss-alert state updates now guarded by mountedRef (prevents unmount setState warnings)
New[fix] ClinicalPromptsPanel: debounced search now cancels both timer AND in-flight fetch on dependency change
New[fix] EvidencePanel: alerts loading spinner no longer stuck after aborted fetch
New[fix] FormattedLetter: DPA acceptance cached in localStorage per user — eliminates network round-trip on repeat visits

v5.481.0

PriorApril 2026
New[seo] 50+ route-level layout.tsx files with correct metadata titles/descriptions
New[seo] og:image and twitter:images added to root layout (was missing)
New[seo] Admin routes (/admin/*) now noindexed — prevents search engine exposure
New[seo] Canonical tags on /privacy, /terms, /refund pointing to /legal/* equivalents
New[fix] macros DELETE: returns 404 if macro not found (was silently returning ok)
New[fix] sessions/[id] DELETE: returns 404 if session not found (was silently returning ok)
New[fix] macros/route.ts refactored to requireAuth() helper (consistent with all other routes)

v5.479.0

PriorApril 2026
New[fix] Service worker: cache now keyed to Next.js build ID — each deploy automatically invalidates stale shell cache
New[fix] global-error.tsx added: catches errors in root layout itself (auth/session failures at startup)
New[fix] route-level error.tsx added for letters, analytics, settings, clinic-session pages
New[fix] route-level loading.tsx added for letters, analytics, settings, clinic-session pages
New[fix] useEffect cleanup: 3 components (SendLetterModal, GlobalSearch, FormattedLetter) lacked clearTimeout on unmount
New[fix] lib/debug-log.ts: debug events now gated to development env only — was writing to Supabase in production
New[fix] console.log → console.info in cron/retention, cron/storage-cleanup, api/format routes
New[sec] letters/page.tsx: icon-only clear-search button now has aria-label='Clear search'

v5.478.0

PriorApril 2026
New[sec] ErrorBoundary + app/error.tsx: hide raw error messages from users in production (dev-only)
New[sec] 9 API routes: replace err.message in 500/502 responses with generic messages to prevent internal detail leaks
New[sec] Upstash rate limiter: per-route limits now honoured (was using shared 60/min regardless of route config)
New[sec] learning/chat: sanitize streaming error — was sending err.message directly into SSE stream

v5.477.0

PriorApril 2026
New[sec] Open-redirect fix: cloud-storage OAuth callback now validates returnUrl is a relative path before redirect
New[sec] XSS fix: auto-improve review page now HTML-escapes all database-sourced values before rendering
New[sec] CPD entries PATCH: replaced ...body spread with explicit field allowlist (prevents writing system columns)
New[sec] Cron auth bypass fixed: reflection-synthesis cron was accessible if CRON_SECRET env var unset
New[sec] Input caps added across 12 more routes: epr/patient, macros, templates, mhsop-suggest, summarise-document, session-context, categorize, cpd/templates/log, webhooks/n8n, community-search, check-duplicate, cpd/summary year validation
New[sec] n8n webhook GET no longer exposes internal VPS URL in response

v5.476.0

PriorApril 2026
New[sec] Systematic input length caps across 15+ additional API routes: learning/chat, ask-ai, letter-edit, send-nhsmail, letters/send, cpd/generate-reflection, detect-actions, auto-generate-doc, suggest-codes, cpd/ingest, msf/requests, patient-records, sessions, evidence/sources

v5.475.0

PriorApril 2026
New[sec] GlobalSearch was fetching all users' letters/patients (missing user_id filter) — critical data leak fixed
New[sec] clinic-dashboard.ts fetchPatients() had no user_id filter — now scoped to authenticated user and excludes archived letters
New[fix] archived_at filter now applied in format route style-learning query, check-duplicate route, and GlobalSearch
New[sec] Search ilike queries now escape SQL wildcards (%, _, \) in user input to prevent expensive wildcard injection
New[fix] Letters page detail panel blank when server search result not in locally-loaded first 50 — fixed selection lookup
New[sec] Input length validation added to versions, snippets, templates, and orgs routes

v5.472.0–v5.473.0

PriorApril 2026
New[fix] Letters list API, sessions sidebar, and semantic search all now exclude archived letters — archived letters were still appearing in the main list and sidebar

v5.469.0–v5.471.0

PriorApril 2026
New[fix] Sidebar drag-to-resize: localStorage saved the initial width (stale closure) not the final dragged width — sidebar would reset on next load
New[fix] Batch 'Open in Scribe' now sets clinivoice_reformat_source so 'Editing: [file]' banner appears in Scribe
New[fix] api-auth.ts: removed dead code — unused `new Headers()` object created but never used (only suppressed with void)

v5.464.0–v5.468.0

PriorApril 2026
New[fix] Sessions sidebar 'load session': 'Editing: [patient]' banner was never shown in Scribe — loadSession() now sets clinivoice_reformat_source with patient name and date
New[fix] GET /api/letters/[id] now returns gp_name, gp_surgery, transcript_source — previously missing fields meant GP context was lost when re-loading a single letter
New[ux] Letters page: 'Sent' indicator now shows in list row and detail panel when letter has been sent (API now returns sent_at)
New[fix] OfflineBanner rendered twice on all authenticated pages (AppShell + layout.tsx) — removed from AppShell; layout.tsx is sole mount point
New[fix] CookieBanner + CookieConsent both rendered on authenticated pages (same z-index, same storage key) — consolidated to single CookieBanner in layout.tsx

v5.463.0

PriorApril 2026
New[fix] Letters 'Edit in Scribe': loaded-from banner showed blank patient name and date — clinivoice_reformat_source was writing {label,id} but Scribe reads {name,date}. Fixed to match.
New[fix] Transcript source badge: 'upload', 'session', 'restored', 'ambient' now show human-readable labels ('Uploaded file', 'Multi-recording session', etc.) instead of raw slugs
New[ux] Mobile step dots: aria-labels now include descriptive step names ('Record (step 1)', 'Transcript (step 2)', 'Letter (step 3)')

v5.461.0–v5.462.0

PriorApril 2026
New[ux] Sessions page: search bar — filter sessions by patient name, NHS number, hospital number, or transcript keyword; desktop top bar + mobile; match count + no-results state
New[ux] Letters page: document.title now set correctly (browser tab shows 'Letters | CliniVoice AI')
New[ux] Actions page: document.title now set correctly ('Pending Actions | CliniVoice AI')
New[fix] Letters 'Edit in Scribe': now pre-fills patient name, DOB, NHS#, hospital# in Scribe from stored letter data
New[fix] Sessions/batch 'Open in Scribe': patient info was silently dropped — fixed key mismatch (name→patientName, dob→patientDob) so Scribe correctly restores patient context

v5.451.0–v5.460.0

PriorApril 2026
New[ux] Letters page: badge and preview now show readable labels (e.g. 'Clinic Letter (New Assessment)') instead of raw slugs
New[ux] Letters page: server-side search — queries full letter dataset when user has >50 letters; spinning indicator + ✕ clear button
New[ux] Letters page: Load more button shows remaining count (e.g. 'Load more (23 remaining)'); hidden during active search
New[ux] Letters page: hospital# and DOB shown in preview header alongside NHS# and word count
New[fix] Actions page: letter type now shows readable label instead of raw slug
New[fix] Transcripts semantic search results: letter type now shows readable label
New[fix] Pending actions badge in nav sidebar now updates immediately when user marks items done (was only updating on page navigation)

v5.442.0–v5.450.0

PriorApril 2026
New[ux] Scribe page: patient name header above Scribe/Letter tabs, green word-count pill with pulse dot, Voice/Patient mode toggle (desktop + mobile)
New[ux] Fixed bottom action bar on Scribe page: Format as letter, Add more, Ask AI — correctly offset from sessions sidebar
New[ux] Log CPD green button in top bar appears after first letter is formatted
New[fix] Letters page: left column narrowed from 400px → 260px to match sessions sidebar width
New[fix] Letters page: text contrast restored (was text-foreground/80, now full contrast)
New[perf] Letters page loads 5-10× faster — transcript excluded from list query (fetched lazily on Edit in Scribe)
New[perf] Actions page: pageSize 200→100, letters page 200→50
New[fix] Templates Specialty Prompts: All categories now shows top 20 prompts immediately (was empty until search entered)
New[fix] Actions page: warning shown when more than 100 letters exist (silent truncation)
New[ux] CPD graph + revalidation sub-pages: header height standardized to 52px
New[fix] Batch page: duplicate h1 landmark replaced with h2
New[fix] Evidence page: duplicate h1 landmark replaced with h2
New[ext] Browser extension: verify/missing count badges shown on recent letters in popup

v5.424.0–v5.441.0

PriorApril 2026
New[ux] Gradient NHS headers replaced with minimal bg-card headers on Transcripts History, MAS, Clinic Session, Knowledge Base, Professional Development, SOPs — all internal app pages now consistent
New[mobile] Actions tab in History screen now correctly loads recordings on focus (bug: actions were empty until user visited Letters/Transcripts tab first)
New[fix] Duplicate h1 landmark removed from Professional Development and Clinic Session pages
New[fix] Unused CliniVoiceLogo and Link imports removed from 5 pages after header cleanup

v5.419.0–v5.423.0

PriorApril 2026
New[fix] Double AppShell wrapper removed from Letters and Actions pages — was creating two overlapping sidebars and breaking h-screen layout
New[ux] Standalone gradient logo headers replaced with minimal bg-card headers on Sessions, Evidence, Calculators, Batch, Templates — consistent with AppShell nav
New[fix] Mobile bottom nav Letters tab now links to /letters (was /transcripts, which is the old page)
New[fix] CSS variable text-muted-foreground was never defined — 60+ usages replaced with text-muted across analytics, settings, changelog, components
New[fix] Letters and Actions pages now fetch pageSize=200 letters from API (was defaulting to 20, breaking client-side pagination and action extraction)
New[ext] Browser extension: Letters quick link added to popup nav (→ /letters)
New[ext] Firefox and Edge extensions synced with Chrome popup.html/popup.js
New[mobile] Replace hardcoded clinivoice-ai.vercel.app URLs with clinivoice.com in mobile app

v5.416.0–v5.418.0

PriorApril 2026
New[ux] Letters history page (/letters): full split-view redesign — 400px list on left, letter preview with VERIFY/MISSING highlighting on right
New[ux] Actions page (/actions): clinical action extraction from saved letters — HIGH/MEDIUM/LOW priority, mark done, dismiss, note, filter by priority/date
New[ux] AppShell: Actions badge reads cv_pending_count from localStorage — accurate count with no API overhead
New[ux] Main Scribe page: underline tabs (Scribe/Letter), sticky 'Format as letter →' bar shown when transcript ready
New[link] Evidence deep-link (/?tab=letter&evidence=...) inserts into preAppointmentNotes not transcript — preserves transcript integrity
New[ux] Settings: custom data retention input field ('Custom…' option with day/month display)

v5.359.0–v5.362.0

PriorApril 2026
New[ux] Letter panel: generation settings (detail level, output style, quotes) collapsed into a summary chip row — click to expand. No more 9 buttons always visible; just the active settings shown as compact badges
New[ux] Session hover card: now pointer-events-auto — you can hover into the card to copy NHS# or patient details without it disappearing
New[ideo] Logged code declutter sprint principle: after every major feature sprint, remove dead code, unused vars, console.logs, commented-out blocks, backwards-compat shims

v5.351.0–v5.358.0

PriorApril 2026
New[ux] Format picker: search box at top, all 7 PRSB types filterable; 'Browse 600+ specialty prompts →' link to Templates
New[ux] Format picker: duplicate tab conflict UI — clicking a type already open shows 'Switch ↗' vs '+ New' choice inline instead of silently switching
New[ux] Sessions sidebar: patient hover card — hover any session for 600ms to see full name, DOB, NHS#, hospital#, GP, letter type, snippet
New[ux] AppShell sidebar: collapsed rail 40→36px, expanded 160→148px — more workspace at all times
New[ux] CPD pill: drag now respects actual pill dimensions (no longer clips at edge); touchAction:none on outer div fixes mobile drag
New[ux] Transcript toolbar: Auto-format + Continue recording toggles now label-only-when-active (compact switches, tooltip explains when off)
New[ux] Letter formatter: letter type hint text moved to hover-only ⓘ icon — removes 2-3 lines of persistent clutter from the letter panel

v5.347.0–v5.350.0

PriorApril 2026
New[ux] AppShell sidebar: hover-to-reveal pattern (VS Code/Linear) — icon rail at 40px, expands to 160px on hover when collapsed. Full workspace by default, nav always accessible
New[ux] Sessions sidebar: further reduced to 176px — less competition for workspace
New[ux] Format tab picker: '+ Add format' now opens a popover with all 7 PRSB letter types — pre-select before creating tab. Duplicate detection switches to existing tab instead of creating duplicate
New[ux] CPD pill: z-index raised to z-[55] — always floats above header and sidebars, never gets obscured during scroll

v5.341.0–v5.346.0

PriorApril 2026
New[ux] Sidebars: AppShell collapsed 64→48px, expanded 240→190px; Sessions sidebar 272→210px — more screen for the workspace
New[ux] Loaded-from-history banner auto-dismisses after 5s on mobile
New[ux] Settings: Admin & Ops section removed from Settings sidebar — those links now live in AppShell's admin section (proper mental model: admin is not user settings)
New[ux] AppShell admin section expanded: Analytics + Audit Trail + Feedback added alongside Dashboard + Ops
New[ux] Data Retention: shows current letter count + 'letters affected' preview per option + 'Clean up now' button for immediate cleanup
New[ux] Templates: 'Letter Formats' tab added as first tab — browse all 7 PRSB letter types with descriptions + link to 600+ Clinical Prompts
New[ux] CPD: top bar collapsed to 2 items (More ▾ + Log activity) — Export/Import/Revalidation/Graph all in 'More' dropdown

v5.340.0

PriorApril 2026
New[ux] Nav: removed 'Communication Skills — Coming Soon' dead link from sidebar Apps section
New[ux] Mobile bottom bar: removed rarely-used bullets copy button (≡) — bar now Format Letter + Copy + Prompts

v5.339.0

PriorApril 2026
New[ux] Settings: Legal nav group eliminated — Compliance (DSP Toolkit) and Delete Account now surface under Profile & Org; fewer nav items, less hunting
New[ux] CPD pill toggle moved from Delete Account to Preferences → Notifications (better semantic fit)

v5.337.0–v5.338.0

PriorApril 2026
New[ux] Mobile swipe wizard — 3-step swipe flow (Record → Transcript → Letter) with progress dots, auto-advance on transcript/letter ready, prev/next nav row, swipe gesture support
New[ux] What's New banner updated to reflect nav simplification sprint

v5.331.0–v5.336.0

PriorApril 2026
New[ux] Nav renamed 'Grow' → 'CPD' (Continuing Professional Development) — tooltip shows full name on hover
New[ux] 'Letters' removed from primary nav — accessible via Sessions sidebar 'View all letters' footer link
New[ux] Settings: Security merged into Profile — password, 2FA, biometric all in one place; Security nav item removed
New[fix] Settings: MFA/2FA was rendering on every settings tab — now correctly scoped to Profile/Security only
New[ux] Scribe tab remembered across page refresh (sessionStorage)
New[ux] Progressive layout: record section auto-collapses to status bar after dictation captured on desktop
New[ux] Compact status bar shows detected patient name — 'Dr Smith · 142 words / Re-record ↓'
New[ux] Insights removed from Tools nav — accessible via Settings → Billing → Insights & Analytics card
New[ux] Sessions sidebar: 'View all letters' footer link → /transcripts

v5.320.0–v5.326.0

PriorApril 2026
New[arch] lib/brand.ts deleted — was dead code with zero imports across the entire codebase
New[ux] transcripts empty state: 'Go to Scribe' (duplicate link) replaced with 'Browse Templates' → /templates
New[fix] pricing page: 'Web Speech transcription' → 'Groq Whisper transcription' on Free tier
New[fix] pricing page: 'VPS Whisper transcription' → 'Groq Whisper Large v3 Turbo' on Pro tier (VPS removed v5.222)
New[gdpr] Settings: Full GDPR Subject Access Request (SAR) button wired to /api/sar — Article 15 right of access now accessible in UI
New[gdpr] acceptable-use: clinical safety → safety@clinivoice.com, security vulns → security@clinivoice.com
New[gdpr] trust page + refund page: DPA contact → dpa@, billing enquiries → billing@, sales → sales@clinivoice.com

v5.315.0–v5.318.0

PriorApril 2026
New[fix] cpd page: 'View previous letter' link updated from /letters to /transcripts
New[fix] trust page: 'ICO Registered / Pending' corrected to 'ICO Registration / In Progress'
New[fix] DuplicateWarning: similar letter link now goes to /transcripts?highlight= instead of defunct /letters/:id
New[fix] ActionItems: 'Use as letter' router.push updated from /letters to /transcripts
New[fix] template-library + my-templates: 'Use template' now routes to Scribe (/) not defunct /letters
New[fix] robots.txt: stale /letters/ disallow entry removed (already had /transcripts/)
New[ux] lib/brand.ts: clinicalHub nav label + Pro pricing feature string updated to 'Clinical Prompts'
New[ux] What's New banner copy updated to reflect compliance audit sprint
New[arch] HANDOFF.md updated for full audit sprint v5.293–v5.314 + APP_VERSION synced

v5.295.0–v5.311.0

PriorApril 2026
New[fix] grow/resources: Mental Health SOPs card linked to / instead of /sops — fixed
New[fix] clinic-day quick links: React key collision (two links with href='/') — fixed to use label as key
New[fix] Footer: React key collision + 'ICO Registered' claim corrected to 'ICO Registration In Progress'
New[fix] Landing page: 'ICO Registered' trust badge corrected to 'ICO Registration In Progress'
New[fix] batch page: stale /letters links updated to /transcripts (avoids redirect hop)
New[fix] grow/calculators links corrected to /calculators everywhere
New[arch] VPS_BASE in templates/sops now uses NEXT_PUBLIC_VPS_API_URL env var (was hardcoded IP)
New[arch] All clinivoice-ai.vercel.app references replaced with clinivoice.com or env var
New[arch] Email from address uses RESEND_FROM_ADDRESS env var when set (letters, CPD digest, health-check)
New[ux] Docs: MHSOP Hub section renamed to Clinical Prompts with updated content
New[ux] Analytics page: 'Clinical Hub' text updated to 'Clinical Prompts' throughout
New[ux] Specialty banner Clinical Prompts button now uses openInHub() (DRY refactor)
New[ux] Changelog + What's New banner updated to v5.293

v5.286.0–v5.294.0

PriorApril 2026
New[ux] APP_VERSION synced to v5.293.0 — version display now accurate across all pages
New[ux] Sessions sidebar search now matches snippet content as well as patient name and letter type
New[ux] letterTypeLabel expanded to cover 40+ letter types — history sidebar now shows correct labels instead of 'Letter'
New[ux] ClinicalPromptsPanel first-use hint shows example search terms when panel is empty
New[ux] What's New banner updated to v5.293 with latest copy
New[fix] 404 page quick links: replaced broken /clinical link with /analytics Insights
New[fix] handleNewPatientSession now clears clinivoice_active_session_id — sidebar no longer highlights stale session after New Patient
New[fix] APP_VERSION was stale at v5.234.0 — corrected to current version
New[arch] Sitemap updated: /transcripts, /grow, /analytics, /ask-ai added (were missing)
New[arch] PWA manifest: 512px icon marked as maskable for better Android home screen rendering

v5.283.0–v5.285.0

PriorApril 2026
New[ux] Clinical Prompts panel restored inline as step 4 — 1,000+ specialist prompts run directly on transcript without leaving Scribe
New[ux] openInHub now scrolls to inline step 4 panel instead of navigating away — no context loss
New[ux] Patient info (name, NHS number, hospital number, DOB) auto-passed to Clinical Prompts panel
New[ux] Specialty detection banner + ambient trigger banner + hub suggestion banner all scroll to inline panel
New[ux] Mobile sticky bar hub icon now opens inline prompts panel
New[ux] Alt+H shortcut description corrected: 'Open Clinical Hub with current transcript'
New[ux] What's New banner updated to v5.285

v5.266.0–v5.273.0

PriorApril 2026
New[ux] Active session highlight in sessions sidebar — selected row highlighted with primary colour and right border
New[ux] Sessions sidebar: Yesterday grouping between Today and Earlier
New[ux] Sessions sidebar: refresh spinner while background-refreshing, session count badge in header
New[ux] Sessions sidebar: / keyboard shortcut to focus search, clear button on search input
New[ux] Sessions sidebar toggle button in workspace top bar (hamburger icon)
New[ux] Sessions sidebar auto-scrolls to active session on page load
New[arch] Active session synced from Letters page reformat + FormattedLetter save (letter-saved event carries ID)
New[ux] Session snippets strip markdown — shows clean preview text instead of raw ## headers and **bold**
New[ux] Loaded-from-letter banner hidden on desktop (sidebar already shows active session context)

v5.260.0–v5.264.0

PriorApril 2026
New[ux] New 3-column workspace layout — sessions sidebar always visible, 2-column record+letter view
New[ux] Sessions sidebar (col 2): past sessions list with Today/Earlier grouping, patient avatars, New session button
New[arch] SessionProvider + useSessionContext — fetches last 40 letters from Supabase, bridges to reformat flow
New[ux] Desktop workspace top bar replaces full header — compact date, patient pill, recording indicator
New[ux] Record+transcript panel sticky on desktop; letter output panel dominates right 3/5 of screen
New[ux] Step numbers + chevrons hidden on desktop; panels locked open in 2-column layout

v5.248.0–v5.258.0

PriorApril 2026
New[ux] Ask CliniVoice in Letters history — edit saved letters with AI, auto-saves back to Supabase
New[ux] Ask CliniVoice quick-command pills (web + history card): 'Make more concise' / 'Patient-friendly' / 'Add safeguarding' / 'Formal tone'
New[ux] Deduplicate 'Also format as' — switches to existing tab if same letter type already open
New[ai] Ask CliniVoice success toast + one-level Undo after AI edit applied
New[arch] Formatted letter now persists to sessionStorage — survives accidental navigation (lazy useState fix)
New[ux] Session restore banner: shows 'transcript + formatted letter recovered' when both restored
New[ux] Reassuring micro-copy on New Patient confirm + live word count badge in Step 1
New[mobile] Ask CliniVoice mobile quick-command pills parity

v5.244.0–v5.247.0

PriorApril 2026
New[ai] Ask CliniVoice — Heidi-inspired AI edit bar below every formatted letter (web + mobile): type commands like 'make more concise', 'add safeguarding section', 'patient-friendly version'
New[ux] 'Also format as' quick-actions — after formatting, suggests related letter types as +Tab buttons that auto-format when clicked
New[mobile] Ask CliniVoice mobile parity — same AI edit bar on mobile Scribe screen
New[arch] /api/letter-edit — new route: Gemini flash with fallback cascade for in-place letter modification

v5.239.0–v5.243.0

PriorApril 2026
New[ux] Patient tabs polish — closing-tab warning red tint, stale closingTabId guard, disabled-at-capacity state
New[ux] Sprint 34 — workflow tabs in letter history, tab discoverability hint, Settings 'Delete Account' rename
New[ux] Patient tab identity banner restore + Copy Letter respects active workflow tab

v5.230.0–v5.238.0

PriorApril 2026
New[ux] Settings: Refer a Colleague moved to Billing section
New[ux] Settings Profile: refer-a-colleague quick-link added + workflow_tabs migration applied
New[ux] Workflow Tabs: multiple letter formats per patient — tab bar, auto-naming, save to Supabase
New[ux] Workflow tabs polish — auto-naming on format, side-by-side parity, Letters history badge
New[ux] Workflow tabs — inline rename (double-click), mobile tab bar, API GET fix
New[mobile] Workflow tabs completeness — mobile picker sheet, empty-tab state, sessions parity
New[ux] Sprint 32 — Multi-patient tabs, patient identity safety banner, initialFormattedLetter prop
New[ux] Patient tabs — docs + continueCtx preserved across tab switches
New[ux] Patient tabs UX — 'New Tab' option in New Patient confirm, close-tab unsaved-data warning strip

v5.426.0–v5.440.0

PriorApril 2026
New[ux] Nav: Calculators + Insights moved to 'Tools' overflow section — primary nav is now Scribe · Letters · Grow only
New[ux] Nav: Settings removed from main nav — accessible via gear icon in sidebar footer (was already there)
New[ux] Nav mobile: bottom bar reduced to 4 tabs — Scribe · Letters · Grow · More (was 5)
New[ux] Settings: Profile + Organisation merged into single 'Profile & Org' page (18→17 sidebar items)
New[ux] Settings: Notifications + Shortcuts now also shown within the Preferences section
New[mobile] Scribe: Input mode selector updated to compact pill bar (Record · Upload) matching web
New[mobile] Scribe: CPD prompt after letter formats — 'Log this as CPD?' banner with one-tap to PD page
New[mobile] CPD prompt correctly clears on New Patient / reset flows
New[ext] Browser extension v1.4.0: 429 rate-limit retry logic with exponential backoff + Retry-After header support

v5.408.0–v5.425.0

PriorApril 2026
New[ux] Transcripts: recording card action bar reduced to Copy Letter + Open in Scribe + ⋮ More — 7 inline buttons collapsed
New[ux] Settings: Advanced sidebar group collapsed behind ▾ toggle; auto-expands on navigation to advanced section
New[ux] Sessions: 4 icon badges → single 'N items' count pill; duplicate hub badge removed
New[fix] PD: ?quick=1 from Scribe CPD prompt → auto-switch to CPD tab, scroll to form, pre-fill activity title
New[ux] Settings toggles: removed redundant sub-descriptions across Preferences, Auto-Format, Notifications — labels are self-explanatory
New[ux] Settings BYOK: removed info banner + verbose Groq description; simplified connected key display
New[ux] PD Dashboard: grade-specific info cards (CESR/SAS/GP/Locum) condensed to compact role pills
New[ux] PD Export: card descriptions shortened to 1 line each; header condensed
New[ux] PD Reflections: removed 'Gibbs Reflective Cycle' subtitle from section header
New[ux] Batch: removed redundant toggle sub-descriptions and concurrency hint
New[ux] Analytics: shortened empty state and auto-detect hint text
New[ux] Templates: shortened header description block

v5.401.0–v5.407.0

PriorApril 2026
New[ux] Scribe header stripped to logo + user avatar — removed History, Sessions, Focus, Dark mode, Shortcuts, Clinical Prompts, version badge from header
New[ux] Input mode selector: 4 large cards → compact pill bar (Record | Upload | More ▾) — Ambient and Session behind dropdown
New[ux] Patient info collapsed to a summary line by default (name · DOB · NHS) — click to expand full fields
New[ux] Clinical Actions Panel removed from Scribe — kept in Hub only
New[ux] Letter action bar simplified to Copy | More ▾ — Export, Patient copy, Full screen, Read aloud, Anonymise, Send moved to dropdown
New[ux] CPD log slide-in prompt appears after letter saves — one-click to /professional-development
New[ux] SmartSuggestions and InlineSopSearch strips hidden from Scribe — moved to Hub

v5.379.0–v5.400.0

PriorApril 2026
New[sec] Health sub-routes (/health/auth, /gemini, /groq, /vps, /storage) now require CRON_SECRET token — prevents unauthenticated service enumeration
New[sec] msf/respond: IP rate limit, numeric field type-checking, text fields capped at 2000 chars — public feedback endpoint hardened
New[sec] 28 more API routes given maxDuration — full Vercel timeout coverage complete
New[sec] Rate limiting added to patients, macros, analytics, patient-records/match, patient-records/link, auth/me, sessions POST
New[sec] 15 remaining raw error.message leaks eliminated across cron, orgs, cpd, storage sign-upload routes
New[perf] SELECT * eliminated across all 14 remaining routes (msf, cpd, templates, patient-records, sessions/[id], auto-improve, debug-events)
New[perf] Input size caps: extract-patient-info (5k), detect-template (3k), sop-query (2k), mas (50k)

v5.374.0–v5.378.0

PriorApril 2026
New[sec] SAR endpoint now exports all 10 user data tables — GDPR Article 15 compliant (patient_sessions, cloud_connections, msf_requests, feedback_reports, usage_events added)
New[sec] DB error messages no longer leaked to clients — added dbError() helper; patched all 35+ API routes
New[sec] Rate limiting added to auth/login (brute-force), feedback POST, and dpa-accept endpoints
New[fix] maxDuration added to all remaining API routes (35 routes) — no more Vercel 10s hard timeout on DB/external calls
New[fix] Admin ops dashboard alert() calls replaced with inline state banners

v5.364.0

PriorApril 2026
New[sec] improvement_drafts table — RLS enabled; service-role-only access; no accidental anonymous exposure
New[fix] What's New banner updated to v5.363 with security sprint summary
New[fix] Changelog updated to reflect v5.354–v5.363 security and reliability sprint

v5.354.0–v5.363.0

SecurityApril 2026
New[sec] Rate limiting on all 57 authenticated API routes — DoS protection complete
New[sec] RLS enabled on letter_versions, letter_shares, cloud_storage_connections — OAuth tokens protected
New[sec] GEMINI_MODELS centralised — all model strings point to single const; future deprecations require 1-line fix
New[fix] Gemini model deprecation auto-fixed — gemini-2.0-flash-lite → gemini-2.0-flash-lite-001
New[fix] Health check cron now self-diagnoses: model 404 vs quota exceeded vs key invalid — no more false 'rotate key' alerts
New[fix] 25MB audio upload size guard on transcribe + cpd/voice-log routes
New[fix] cpd/import file size limit — 2MB guard with 413 response
New[fix] maxDuration on all AI routes — no more Vercel 10s timeout on long generation requests
New[fix] window-focus re-fetch on transcripts page — data refreshes when tab regained
New[fix] next/image for avatar and MFA QR code — no more unoptimised img warnings
New[arch] BYOK_MASTER_KEY startup warning — visible in Vercel logs before first user hit

v5.345.0

PriorApril 2026
New[fix] Unified search — single search bar now covers patient name, NHS number (spaces ignored), hospital number, DOB, GP name, GP surgery, transcript, and letter content; removed duplicate search field
New[fix] localStorage cleanup on letter delete — MDT flag and outstanding dismissed keys now removed automatically when a letter is deleted
New[fix] Compact mode syncs across tabs — toggling compact mode in Settings now reflects in the Letters history on next tab focus without a page reload
New[fix] Gemini API key missing now logs a clear error instead of silently failing with an empty key
New[new] Version history pre-loaded — versions are fetched in the background when the More menu opens, eliminating the loading flash
New[new] Stats strip 'Most used' type is now clickable — acts as a quick filter toggle
New[new] Word count target indicator — colored word count on letter cards (green = in range, amber = too short, orange = too long) based on letter type target ranges
New[new] Enhanced Copy Summary — includes GP name, GP surgery, hospital number, and full-length date format for EPR paste

v5.336.0

PriorApril 2026
New[new] Version history panel — 'Version history' in More menu shows all auto-snapshots; any version can be restored into the inline editor with one click
New[new] Compact mode toggle in toolbar — density toggle button on history page; compact view hides letter preview lines for faster scanning
New[new] Patient filter chip — clicking a patient name instantly filters to all their letters; dismissible chip shows the active patient filter
New[new] Activity stats strip — top of Letters tab shows letters this week, total count, most-used letter type, and average quality score

Want to be notified of major updates?

Subscribe to release notes