The cockpit that opens the moment something signals.
The popover is where the ping turns into something you can act on. Live transcript at the top, detection cards stacked underneath, and a replay panel that freezes the past 30 seconds and fills the next 30 seconds in real time. Nothing else opens, nothing else exists — this is the entire UI of MeetPing.
A meeting assistant lives or dies by the few seconds between "something just happened" and "I know what to say." The popover is engineered for that interval. It doesn't open a window. It doesn't paginate. It doesn't hide the thing you need behind a tab. The whole UI surface is one anchored sheet under the menubar icon, organised top-to-bottom in roughly the order your eye reaches for it.
The status strip is on top because state matters first — is the listener armed, is the right profile loaded, is the mic actually getting signal. The live transcript sits below it because that's where you look after status checks out. Detection cards anchor the bottom half because you only need them after a ping; until then, the stack is empty and the live panel takes the room.
The live transcript panel
The live panel shows the most recent stretch of confirmed Parakeet tokens — about forty seconds at typical speaking pace. Tokens land in chunks as the decoder finalises them, and the panel auto-scrolls upward to keep the most recent phrase visible at the bottom. We deliberately do not show volatile partials in this panel; partials flicker, and a popover that flickers is a popover you can't read. Once Parakeet promotes a span from partial to confirmed, it appears.
Keywords from the active profile are highlighted in cyan inline as they land. This is the cheapest way to confirm a ping was real: glance at the live panel, see the word lit up in context. If the keyword surface looks off — wrong word entirely, a phonetic false positive — you can hit cmd+. to dismiss the ping and not be alerted on that token for the next eight seconds.
Detection cards
Every keyword hit during the current session becomes a card in the detection stack, newest first. Each card carries the keyword, the wall-clock timestamp, and a one-line preview of the surrounding transcript. Click a card and the replay snapshot opens above it; click the dismiss glyph and the card collapses. Cards persist for the duration of the armed session and are dropped when the listener disarms. Nothing about them is written to disk — consistent with the broader on-device privacy posture.
Replay snapshot — past 30s + future 30s
The replay panel is what makes the popover worth opening. When a keyword fires, the RollingTranscriptBuffer snapshots the last thirty seconds of confirmed Parakeet output into the "past" column, and starts collecting the next thirty seconds into the "future" column live. The past column is frozen — it does not update, because the buffer rolls on for the next ping. The future column streams in token by token until it hits the +30 second mark, then locks.
Why both? Because the question that triggered the ping is usually in the past column, but the answer you need to give is usually still forming in the future column. You read backward to recover the context, then forward to track what the speaker is currently saying, and answer while the sentence is still landing. The same buffer behaviour is described in detail on past-30s replay.
Why a popover, not a window
A window in the dock would steal focus and force a cmd+tab to get back into the meeting. A floating panel would compete with the meeting tile for screen space and stay open after you stopped caring. The popover is transient by design: anchored under the menubar icon, dismissed with a click anywhere else, no keyboard focus stolen from the meeting app. It opens when something signals, closes when you've absorbed it, and leaves the rest of your screen alone.
Keyword watch
A list of names and topics, matched live against the Parakeet stream. Pings the moment one fires.
Profiles
Per-context watchword presets. Engineering, sales, all-hands, parental. One click to switch.
Past-30s replay
Every ping comes with 30 seconds of context before the keyword and 30 seconds after.
One popover. Everything that matters.
Live transcript, detection stack, past-30s + future-30s replay. Open it when something fires, close it when you're done.