KQ-2054 · MEETING/RECALL

Meeting Recall

Questions asked of a recorded meeting, with its waveform and transcript docked beside the thread: every claim in an answer carries a timestamp chip, and pressing one glides the waveform's playhead to the moment on springs.glide while the transcript scrolls its own box there and a highlight sweeps across each supporting line in turn. Claims arrive on springs.snap, chips press on springs.flick, and a claim nothing supports shows a dashed No source mark. Tab moves through the chips and Enter seeks, K plays and pauses, the waveform is a slider (drag, arrows, Page keys, Home/End), and under 40rem the transcript is a sheet that rises on springs.glide.

KQ-2054 · MEETING/RECALL

Tuesday roadmap call

Waylight · 19:00 · 4 speakers

00:00
  1. You:

    What did we decide about the beta date?

  2. Assistant:
    • The beta moves from 29 October to 12 November, so the sync rewrite stays in.
    • Kit confirmed the new date with both pilot customers.
    • The two weeks of slack go to the sync rewrite only.
Transcript14 lines
  1. Noor Halvorsen

    Thanks for joining. Three things today: the beta date, pricing, and what's slipping.

  2. Tomas Reyes

    The sync rewrite is about two weeks behind. Conflict handling took longer than we planned.

  3. Noor Halvorsen

    So is the 29 October beta still real?

  4. Tomas Reyes

    Not with the rewrite in it. I'd rather ship it properly than rush the merge code.

  5. Noor Halvorsen

    Then let's move the beta to 12 November. That keeps the rewrite in and gives support a week.

  6. Kit Laurent

    12 November works for both pilot customers. I'll tell them today.

  7. Tomas Reyes

    Good. The two weeks of slack go straight into the sync rewrite, nothing else.

  8. Noor Halvorsen

    Pricing next. Ada, where is the new page?

  9. Ada Mensah

    Copy and layout are mine. A draft by Friday, with the three tiers side by side.

  10. Kit Laurent

    Before it ships I want two customers to read it. Fernworks and one other.

  11. Noor Halvorsen

    Agreed. Ada owns it, and Kit runs it past two customers first.

  12. Tomas Reyes

    Risk-wise, the rewrite could still slip into December if the edge cases keep coming.

  13. Ada Mensah

    And support hasn't seen the new onboarding yet. That's on me this week.

  14. Noor Halvorsen

    Let's write those down as the two open risks. Same time next Tuesday.

1 answer · press a time to jump to the moment

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/meeting-recall

Props

title
string
default "Tuesday roadmap call"
The meeting's name and the surface's accessible name.
speakers
RecallSpeaker[]
default defaultRecallSpeakers
Who spoke: { id, name }.
segments
RecallSegment[]
default defaultRecallSegments
The transcript in order: { id, speaker, start, end, text } in seconds.
peaks
number[]
default seeded from segments
Loudness samples 0–1 spread evenly over the recording.
answers
RecallAnswer[]
default defaultRecallAnswers
Questions the assistant can answer, each a list of claims with the segment ids that support them.
defaultAsked
number
default 1
How many answers are already in the thread when it mounts.
defaultTime
number
default 0
Where the playhead starts, in seconds.
playing / defaultPlaying
boolean
default false
Controlled or initial playback.
onPlay
(playing: boolean) => void
default —
Fires from the press or key that started or stopped playback, and when it reaches the end.
onSeek
(seconds: number, segmentIds: string[]) => void
default —
A chip, a transcript line or the scrubber moved the playhead.
onAsk
(question: string, answer: RecallAnswer | null) => void
default —
A question was asked; answer is null when nothing in the recording answers it.
rate
number
default 1
Playback speed.
waveStyle
"bars" | "mirror" | "line"
default "bars"
Bars from the baseline, bars mirrored about the centre, or a filled envelope.
density
"compact" | "regular" | "roomy"
default "regular"
Type and spacing in the thread and the transcript.
accent
string
default "var(--accent-bright)"
Chips, the played wave and the sweep — any CSS colour.
status
"ready" | "processing" | "empty" | "error"
default "ready"
The recording's state: still processing, no speech found, or failed to load.
progress
number
default 0.64
How far processing has got, 0 to 1, while status is processing.
onRetry
() => void
default —
Try again was pressed after the recording failed to load.
height
number
default 520
Height of the surface in px.
disabled
boolean
default false
Read only: nothing can be asked, played or seeked.
className
string
default —
Classes for the surface.