← index2026-05-11 23:09 (Beirut)Mac panel v11 — focused-sheet UX + meetings record/view + granular controls

Mac Panel v11 — sheet UX + meetings + granular controls (2026-05-11)

Mac ↔ Hetzner Panel — v11 shipped 2026-05-11

URL: mac.jonahtebaa.com

What you asked for, and what shipped

"when I expand a window, it jumps and I don't know where I was on the screen and I don't understand which window is on top of the other"

Fixed. The in-grid expand (grid-column: 1/-1 re-flow) is gone. Clicking a tile now opens a focused sheet overlay — like iOS Control Center — over a blurred backdrop. Z-order is unambiguous. Grid behind stays exactly where it was; close the sheet and you're at the same scroll position with the same tile still in view. Esc / click-outside / X-button all close.

Verified via Playwright: clicked tile → sheet open → close → measured tile positions → zero pixel shift.

"need to be able to control EACH AND EVERY FEATURE separately"

Granular control surface. Every group's full function list shows in its sheet, each function with its full verb set:

Each function row in the sheet exposes every available verb as its own button — start, stop, restart, logs, test, configure, force-run, etc. The verb count varies per function based on what the underlying surface supports (systemd unit has start/stop/restart/logs; cron job has force-run/logs; etc).

"need to be able to record meetings from the panel and to view recorded meetings"

Built. Meetings is a 6th group tile with custom sheet UI:

Backend wired to /api/meetings/* — start / stop / status / annotate / list / search. Mac-side MeetingManager.swift (already present) handles 30s WAV chunks → server transcript pipeline → minutes generation.

"before you start with the meetings feature, dig in the logs and history and documentation to see the detailed features I asked for"

Did the dig before building:
- 260510_1129_heybrian_finalize_complete_handoff.md — meetings restored as menubar item, Cmd-M shortcut, paused wake-word during recording
- heybrian_v4_user_test_plan_260510.md — "click menubar B → Start Meeting (Cmd-M)... server-side: meeting state goes recording → processing → completed within ~2 min"
- meeting_models.py — full schema: 5 templates, 3 confidentiality levels, action items with status/priority, speaker assignments, annotations
- MeetingManager.swift — 30s WAV chunks, mic-race pause for wake-word daemon

Built the panel UI to surface every documented feature: templates, confidentiality, annotations, action items, transcripts, minutes, dialogue.

Screenshots

Grid with Meetings tile
6 group tiles, Meetings (red accent, LIVE pill) is the 5th tile

Meetings sheet
Focused-sheet overlay: start form + active recordings with Stop + completed list with View

Meeting detail view
Detail viewer: title, state, attendees, minutes, dialogue, transcript

Voice sheet (generic group)
Generic sheet: every function in the group with full verb set — start/stop/restart/logs/test

Performance fixes (also shipped this session)

What's still in the road map

  1. Configure forms for granular sub-feature controls (wake-word threshold slider, audio device picker, log retention, cron schedule editor, etc). Backend handlers exist for some (wake-word configure accepts threshold param); UI form is one more click-through to ship.
  2. Speaker confirm UI after a meeting moves to completed. Server has /api/meetings/{id}/speakers/confirm — needs a UI flow with diarisation preview.
  3. Audio playback in the meeting detail viewer. Currently text-only.
  4. Search across meetings by content. Backend exists at /api/meetings/search/.

Cache & version