Skip to content

fix(recording): give the Recording tab its own screens and a settings panel - #295

Merged
thefourcraft merged 2 commits into
Productionfrom
fix/recording-tab-ui
Aug 1, 2026
Merged

fix(recording): give the Recording tab its own screens and a settings panel#295
thefourcraft merged 2 commits into
Productionfrom
fix/recording-tab-ui

Conversation

@thefourcraft

Copy link
Copy Markdown
Member

Closes #294

What was wrong

  • MeetingRecordingView nested an HSplitView inside ContentView's NavigationSplitView, in a window pinned to .frame(width: 950). Two sidebars competed for the same width and the detail column was left too narrow to read.
  • Six capture switches sat between the transport and the transcript — set-once configuration on the screen you watch during a meeting.
  • Recording had no Settings button, unlike Enhancement, Dictionary and Models, so there was nowhere for those switches to live.
  • Past recordings were a cramped list in the inner sidebar: no search, no real empty state.

What changed

MeetingRecordingView — top bar with a segmented Record / Library control, a live recording pill (red dot plus elapsed time, click to jump back to Record), Import on the Library screen, and a gear + Settings button matching the pattern in EnhancementSettingsView.

  • Record is only live state: transport card with status dot, timer, level meters and Start/Stop; a read-only row of chips saying what the next recording will capture; banners; transcript; summary. No switches.
  • Library is MeetingLibraryView, or the selected recording's MeetingDetailView with a back button in the top bar.

MeetingLibraryView (new) — full-width card list: waveform tile, title, duration / speakers / size / recovered flag, a transcript preview line, a Summary chip and a chevron. Search across titles and transcripts, recording count, context menu for Finder and Trash with a confirmation, and a hero empty state with an Import call to action.

MeetingRecordingSettingsPanel (new) — the app's standard sliding panel, Form with .grouped style like every other settings panel. Sections: Capture (microphone, system audio, warning when both are off), Transcript (live, speakers, summarise, with dependency-based disabling), Automatic (call-app detection), Library (Import, Show Recordings Folder). Capture toggles lock mid-recording and say why.

Since the toggles left the Record screen, the transport card now explains inline when no capture source is on and links to the settings panel, instead of showing a disabled Start button with no explanation.

Verification

  • make build — BUILD SUCCEEDED
  • xcodebuild test -only-testing:ZermTests/MeetingRecordingTests — all pass

Not visually checked in a running app yet; the changes are view-layer only and the build is the gate that ran.

… panel

The tab nested an HSplitView inside ContentView's NavigationSplitView, in a
window pinned to 950pt. Two sidebars competed for the same width and the detail
column was left too narrow to read. On top of that, six capture switches sat
between the transport and the transcript — set-once configuration occupying the
screen you watch while a meeting runs.

Split it into two dedicated screens behind a segmented control:

- Record is only live state: transport card with the timer and level meters,
  banners, transcript, summary. A read-only row of chips says what the next
  recording will capture, so the settings are still legible without being
  editable here.
- Library is only past recordings: a full-width searchable card list, with the
  recording detail replacing it and a back button in the top bar. No second
  sidebar, so nothing is competing for width.

Every switch moves into MeetingRecordingSettingsPanel, opened by a Settings
button in the top bar through the same slidingPanel that Enhancement, Dictionary
and Models already use. Capture toggles lock while a recording is in progress
and say why. Because the toggles are no longer on the Record screen, the
transport card now explains inline when no source is on, rather than leaving a
disabled Start button with no reason given.

Closes #294
…g highlight

Two things the rebuilt Recording tab made visible on screen.

Speaker tints came from `label.hashValue`. Swift seeds string hashing per
process, so the same voice came back a different colour on every launch, and
adjacent labels could collide — "Speaker 1", "Speaker 2" and "Speaker 3" all
rendered pink in the same transcript, which is the one case the colours exist
to tell apart. Folding the bytes instead is stable across launches and puts
labels differing only in their last character on consecutive palette entries.

The transcript also lit its first line as the active one before anything had
been played, because the active line was derived from a player sitting at zero.
It now stays unlit until playback actually starts or the user seeks.
@thefourcraft
thefourcraft merged commit 991258f into Production Aug 1, 2026
6 of 7 checks passed
@thefourcraft
thefourcraft deleted the fix/recording-tab-ui branch August 1, 2026 15:38
@thefourcraft thefourcraft mentioned this pull request Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Recording tab: nested split view breaks the layout and capture settings live in the main pane

1 participant