My Voices
- Top bar with search, filter toggle (active-count badge), synth-source drawer, group and table buttons;
filters/sort in a collapsible labelled panel; one-line sort header with select-all/none checkbox
- Groups chip list is a collapsed accordion; bottom bar is Refresh/Sync/Import plus one Actions (N) menu
(Edit / Audio / Share / Danger), disabled until voices are checked; touch targets stay 44px
- Copy selected works again (copyText was no longer exported), shows "N voice names copied to clipboard"
and falls back to a copy dialog when the async clipboard is unavailable
TTS / engines
- Health probe works for /v1 card URLs and, behind a LiteLLM gateway, checks the selected model's own
upstream so stopped containers are not reported as available
- Unhiding a voice publishes a missing entry to the engine's voices.json (no more silent default-voice fallback)
- Status-bar TTS picker also drives the My Voices and STT-test selectors; Use as TTS refreshes the status bar
Includes the engine connect/disconnect, custom TTS, STT footer and magazine auth work that was already
in the working tree, with their tests.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Charts use the rendered width as viewBox (re-rendered on resize), 11px text,
two x ticks, larger dot for single points. Includes docs/changelog for the
mic colours, Turn history fix and chart size.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The rows were added to the DOM but the overflow:auto list was shrunk to zero
height by the flex column panel once the charts filled it. Adds tests for
#n + time rows, error rows and stats arriving after done.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Red while the mic is hot (live or recording), blue when off; label toggles
Stop/Start microphone (DE+EN); pulse only without reduced motion; reset to
blue when microphone access fails.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Menu is grouped into View (Picture/Text/Split radios), Show and Playback
(real switches) and Theme (Light|Auto|Dark segmented control). Fixes the
Dark option looking disabled: its data-theme=dark attribute matched the
app-wide dark palette selector. Adds automatic advance to the next article
with audio (switch, default on) with End of magazine state.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Index rows reuse the playlist state helper (magListenState): round 44px play/resume/replay button,
smaller muted 'by Author', not played / partly played / played indicator with accessible text, live updates.
Also fix a stale word highlight in the lyrics view that made a driving-mode test fail.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace the three-icon view switch with one flyout menu (views, show text/pictures, minimize), add an Index sheet listing all articles with durations, and move playback speed into the slider row.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Controls can no longer fall off screen (320x568 up to tablets and landscape), share no longer overlaps the title.
Picture view with zoom/pan, Spotify-style whole-text lyrics with follow/back-to-current, minimize to current line,
persisted view choice, 44px segmented control.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Previous/current/next sentence in a fixed-height box with a fade, tap to jump. The
highlight is a binary search over sentence starts on audio.currentTime every animation
frame, with forced resync on seeking, seeked, ratechange, play, pause and visibility; the
marked word uses the sentence's own span. Playwright covers seeks, 1.5x/2x, rapid seeks.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Share buttons (toolbar, playlist, driving mode) build #s-magazine?doc=..&article=..&mode=drive; opening it routes to the article and starts driving mode with a Tap-to-play prompt if autoplay is blocked. Ids are validated strictly; access is unchanged.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fixed 1:1 sizes scaled with clamp(), no flex-shrink/stretch; overlay no longer clips when content is taller than the viewport.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Also reuses the existing magFmtClock for the contents list (the duplicate
tripped the frontend collision gate).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- fuse_paragraph_blocks joins a paragraph split by a column or page break into one
narration block (reader, podcast source and MP3), keeping source regions for highlighting
- language decided once per article; per-article acronym glossary (LLM classifies unknown
acronyms from context), letter-spelled acronym lists, extended DE/EN database
- core/spelling: dictionary findings (compounds, inflections, line-break hyphens, other-language
words), marked in review and listed per page/article; guarded LLM agent fixes; quality run
now includes the spelling pass
- keep suspended compound hyphens (Programmier- und) when merging regions / building layouts
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>