- Rename Highlights to Features, trim to 3 clear items
- Add pitch line to intro, drop Usage section
- Move per-folder/per-note description to Add folder mapping setting
- Rename popover title from "Voices" to "Select a voice"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
My voices (cloned/generated/professional) always appear first regardless
of whether they're saved in Vox. Voice library (premade) follows below.
Added/Add buttons still reflect Vox saved state within each section.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- My voices / All voices sections: saved voices appear first with an
accent-colored Added pill; newly found voices show Add button; adding
re-renders the list so the voice moves up into My voices immediately
- Avatar colors keyed to global list position so colors stay stable
while typing a search query
- Remove manual Name + Voice ID add form from settings; voice chips
(set default, remove) now attach to the Browse button row
- styles.css: add vox-browser-section and vox-browser-btn--mine,
remove unused vox-browser-btn--done
- README: update ElevenLabs voice setup section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Opens a searchable modal that fetches the full ElevenLabs voice library
via GET /v1/voices, lets the user preview each voice with one click, and
adds selected voices directly to the saved list.
- src/tts/elevenlabs-voices.ts: typed fetch helper, results sorted by name
- src/voice-browser.ts: Modal with search, per-row preview (one at a time),
and Add button that updates in-place without closing the modal
- settings.ts: Browse voices button (disabled when no API key set)
- styles.css: vox-browser-* styles, reuses avatar gradient palette from popover
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- README: reflect current popover-based UI (no status bar, sidebar icon
opens playback controls while active)
- player.ts: track elapsed playback time across pause/resume cycles so
the popover timer shows cumulative listening time, not just current run
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix openai.ts: response_format (was silently ignored as 'format')
- Fix popover positioning: read offsetWidth after layout via rAF to avoid
always getting 0 before the browser has painted
- Extract OPENAI_VOICES and SPEED_LIMITS into constants.ts; remove the
three separate copies that had drifted out of sync
- Use SPEED_LIMITS in elevenlabs.ts speed clamp instead of hardcoded values
- Add void to configureDevReload() call to make fire-and-forget explicit
- Remove redundant timerEl = null in closeVoicePicker (stopTimer already nulls it)
- Redesign popover: entry animation, frosted glass, rounded-square avatars,
custom slider, pulsing now-playing indicator, checkmark on active voice
- Replace built-in square stop icon with custom circle-stop SVG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>