- Voice input: mic button (only shown when SpeechRecognition is supported)
transcribes speech straight into the composer, no AI/transcription call
- Read-aloud: speaker button on bot replies uses SpeechSynthesis, with
markdown stripped first so it doesn't read "asterisk asterisk" aloud
- Tab title + favicon flash when a reply lands while the tab is
backgrounded, clearing itself the moment the visitor switches back
All native browser APIs — zero Neuron cost, no worker changes.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016b3u4n81zwJ6rpE9NeCokb
Add persistent conversations, sidebar, export, PWA support, keyboard shortcuts, and an accessibility pass
- Conversations now persist to localStorage per-thread and survive reload/crash
- New sidebar lists saved chats (switch, delete); font-size (A-/A+) and
export-as-text/PDF (jsPDF) live in its footer
- Copy button added to user messages too (bot replies already had one)
- Cmd/Ctrl+K focuses the composer, Esc clears a draft or closes the sidebar
- PWA: manifest.json + a narrow offline app-shell service worker (never
touches the chat API or CDN libraries) + generated app icons, so Nox is
installable via "Add to Home Screen"
- Accessibility: aria-live on the thread, dialog role + focus handling on
the sidebar, visible focus rings, and a text-size control
All client-side/localStorage — no worker changes, zero Neuron cost.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016b3u4n81zwJ6rpE9NeCokb