Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Account healthNewPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
Research runPro
AI insight cardNewPro
Catch upNewPro
AI feature launchNewPro
AI search barNewPro
AI setup wizardNewPro
Call insightsNewPro
Lead scoringNewPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
Agent builderNewPro
Agent galleryNewPro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Two-factor setupNewPro
Magic linkNewPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Onboarding surveyNewPro
Spend alertNewPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pageNewPro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Domain verifyNewPro
Webhook testerNewPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Seat managerNewPro
Credit top-upNewPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Activity feedNewPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
Feature votingNewPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Release readinessPro
Kanban boardPro
Smart schedulerNewPro
Task breakdownNewPro
Goal trackerNewPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new74 new
BlocksCall insights

Call insights

Pro

A sales call insights card where talk time, flagged pricing, competitor and objection moments, an AI summary and owned next steps sit in one view. Selecting a moment plays its quote, and checking off next steps lowers the deal risk.

Live block · sample data

When to use

  • A deal page that shows the latest sales call with talk ratio, flagged moments, summary and next steps.
  • A call review queue for sales managers who coach on talk time and objection handling.
  • A research or support tool that recaps a recorded customer call with jump-to-quote clips.

When not to use

  • Full transcript reading or editing: use transcript-studio.
  • An internal meeting recap without a prospect or deal: use meeting-summary.
  • A pipeline overview across many deals: use a table such as crm-contacts.

Installation

Pro source and install commands unlock with a Pro plan.

Usage

Pass `call`, `speakers` (with side and talk share), `moments` (type, seconds, speakerId, quote, clip length), `summary` and `nextSteps` (with ownerId and due) from your transcription or conversation intelligence pipeline. Wire `loadClip(moment, signal)` to seek your audio player to `moment.at`; it should resolve when playback can start and abort on the signal. Use `onNextStepChange` to save step state. Leave `risk` unset to tie it to the open next steps, or pass your own score. Set `autoPlay={false}` in a product so the demo tour does not run.

example.tsx
1import { CallInsights } from "@/components/arc/blocks/call-insights/call-insights";2 3export function DealCall({ call, transcript }) {4  return (5    <CallInsights6      call={{ title: "Data platform evaluation", company: "Ramp", date: "Oct 22, 2026", duration: 2052 }}7      speakers={transcript.speakers}8      moments={transcript.moments}9      summary={transcript.summary}10      nextSteps={transcript.nextSteps}11      autoPlay={false}12      loadClip={(moment, signal) => audio.load(call.recordingUrl, moment.at, { signal })}13      onNextStepChange={(step, done) => fetch(`/api/steps/${step.id}`, { method: "PATCH", body: JSON.stringify({ done }) })}14    />15  );16}
Built fromAvatarCheckboxCopyButtonTextShimmer

API reference

2 parts. The first is the root.

CallInsights

A sales call distilled into one card. The header carries the prospect's logo, the call title, the meeting platform mark, date and length, the attendees and a deal risk chip. Talk time is one bar split by speaker and grouped by side, with a legend in tabular percentages. Key moments sit on a rail for the whole call as 24px markers (pricing, competitor mention, objection, each with its own icon); selecting one fills the rail up to it and crossfades the quote, speaker and timestamp into a well with a play button and a seekable waveform. Below are the AI summary, which streams in once with a copy button, and next steps with owners and due dates. Checking off a step lowers the deal risk when the risk is derived. With no props it renders a 34 minute Ramp evaluation on Zoom that tours its moments until someone interacts.

PropTypeDefaultDescription
callCallDetailsRamp evaluation on Zoom{ title, company, logo?: ReactNode (20px, currentColor), platform?, platformMark?: ReactNode (14px), date, duration (seconds) }.
speakersCallSpeaker[]four sample speakers{ id, name, title?, avatar?, side: "internal" | "external", talk }. talk is any scale and is normalised to 100. Talk time groups your team first, then the prospect.
momentsCallMoment[]five sample moments{ id, type: "pricing" | "competitor" | "objection", at (seconds), speakerId, quote, clip (seconds) }. Positioned on the rail by at / call.duration.
summarystringsample summaryAI summary. Streams in once when the card first scrolls into view, over a reserved block so the card never grows. An empty string shows the empty state.
summaryModelstring"Claude Sonnet 5.5"Model credited next to the summary heading.
nextStepsCallNextStep[]three sample steps{ id, label, ownerId, due, done?, risk? }. ownerId is a speaker id. risk (default true) means the open step keeps the deal at risk.
risk"low" | "medium" | "high"–Fixed deal risk. When omitted it follows the open risk steps: all open (two or more) is high, some open is medium, none open is low.
autoPlaybooleantrueTours the moments and plays each clip while the card is on screen, until the first pointer or key press inside it. Always off with reduced motion.
defaultMomentIdstring–Moment selected first. Defaults to the first moment.
loadClip(moment: CallMoment, signal: AbortSignal) => Promise<void>–Resolves when the clip is ready to play; the button shows a spinner meanwhile and a rejection shows Clip unavailable with Retry. The signal aborts when another moment is selected or loading is cancelled. Without it, loading is simulated and the status region says no audio plays.
onMomentChange(moment: CallMoment) => void–Called when a moment is selected, by click, keyboard or the tour.
onNextStepChange(step: CallNextStep, done: boolean) => void–Called when a next step is checked or unchecked. Persist it here.
classNamestring–Class on the root section.

deriveRisk

The rule the card uses when risk is omitted, exported so a list view can show the same chip.

PropTypeDefaultDescription
stepsRequiredCallNextStep[]–Next steps.
doneRequiredRecord<string, boolean>–Done state by step id.

Keyboard interactions

Tab
Moves through the selected moment marker, the play button, the waveform, the copy button and each next step checkbox.
Arrow keys, Home, End
On the markers, select the previous, next, first or last moment. On the waveform, seek one second back or forward, or to the start or end.
SpaceorEnter
Play, pause, cancel loading or retry the clip; toggle a next step.

Accessibility

  • The card is a section named after the company. Markers are a radio group named Key moments; each radio names the type, timestamp and speaker, so type never relies on the icon alone.
  • The waveform is a slider with the clip position as value text (0:03 of 0:07).
  • Deal risk is an icon plus the words High, Medium or Low risk. Talk time is an image whose name lists every speaker and share.
  • Playback, pauses, load failures and next step changes (with any change in risk) are announced in a polite status region, which also says clips are simulated with no audio.
  • The summary is aria-busy while it streams and only exposed once complete; the thinking label is hidden from assistive tech.
  • Pointer focus draws no ring; keyboard focus shows Arc's shared focus ring.

Motion

  • Selecting a moment fills the rail up to it on one 240ms ease-out transform and crossfades the quote (old out in 100ms, new in over 160ms from 2px). All quotes share one grid cell, so the well never changes height.
  • The waveform reshapes per clip with a 240ms height ease, and the played part is clipped in from a CSS variable each frame, so playback never re-renders React per frame.
  • The summary waits 0.7s on a calm shimmer, then streams 3 to 8 words every 35ms with each chunk fading in over 140ms. Talk time reveals left to right once. The risk chip crossfades its icon and label inside the width of its longest label.
  • The tour pauses while the card is off screen and stops at the first interaction. Nothing bounces.
  • Reduced motion skips the tour, streaming and reveals and drops travel; selection, playback and every state and announcement stay.

Responsive behavior

  • Fluid from 360px to 680px. Container queries move the talk legend to two columns and hide the attendee stack below 560px; below 460px sections pad 16px and the company name, platform name, type legend, speaker title and owner names drop, leaving marks and avatars.
  • Markers keep a 40px hit area and clamp inside the rail at both ends. Checkboxes keep their 44px target.

Performance

  • Playback writes one CSS variable per frame and re-renders only when the whole second changes. The tour and playback stop off screen through an IntersectionObserver.
  • Waveforms are 52 bars per layer, computed once per moment.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Use for a recorded call, demo or interview where the reader needs the gist and the moments that matter: sales call reviews, CRM deal pages, customer research recaps.
  • Feed moments from your transcription or conversation intelligence pipeline; keep quotes under about 20 words so the well stays two lines.
  • Wire loadClip to seek your audio player to moment.at and resolve when playback can start; abort on the signal.
  • Pass risk when your own model scores deals; leave it unset to tie risk to the open next steps.
/components/blocks/call-insights/markdown

The full library index for assistants is at /llms.txt.

Related

Meeting summaryProComponentAn AI meeting notes card: the header shows the Google Meet or Zoom mark, the attendees and the duration. Summary, Decisions and Action items stream in after a short summarizing pass. Hover any line to see the transcript quote it came from, then check off action items or send them to Linear or Notion.Lead scoringProBlockA lead scoring card where inbound B2B leads are ranked by an AI fit score, each with a score ring and a one-line reason. Open a lead to see its signals and score breakdown, then push it to HubSpot or Salesforce.Account healthProBlockA customer success card where a health score gauge, a renewal countdown and five sourced signals with sparklines lead into an AI risk summary and one recommended next step, like scheduling a QBR before usage slips further.
PreviousTask breakdownNextLead scoring
Arc · 129 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown

Data platform evaluation

Ramp·Zoom·Oct 22, 2026·34 min

High riskMedium riskLow risk

Talk time

Your team 52%·Ramp 48%
  • Ryan Sullivan38%
  • Hannah Walsh14%
  • Diane Foster31%
  • Andre Williams17%

Key moments

5 flagged
00:00PricingCompetitorObjection34:12
Diane FosterVP Finance, RampPricing·06:41
“If we roll this out to all 400 seats in Q1, what does the per-seat price look like?”
Andre WilliamsData engineering lead, RampCompetitor·12:05
“We already run Fivetran for the warehouse sync, so you have to beat it on cost per connector.”
Andre WilliamsData engineering lead, RampObjection·17:30
“Security won't sign off without a SOC 2 Type II report and SSO through Okta.”
Diane FosterVP Finance, RampPricing·23:52
“If we commit to two years, can you hold the per-seat price flat?”
Diane FosterVP Finance, RampObjection·29:14
“Migration is the real cost for us. We can't have broken dashboards during the close.”
Clip unavailable, try again
0:00 / 0:06

SummaryClaude Sonnet 5.5

Diane wants one pipeline in place before the Q1 close and asked for 400 seats on a two-year term at a flat per-seat price. Fivetran is the incumbent, so the deal turns on cost per connector and a migration that keeps dashboards live. Security needs SOC 2 Type II and Okta SSO before procurement starts.

Summarizing the call.

Summarizing 34 min call

Next steps

0 of 3 done
  • Send SOC 2 Type II report and Okta SSO guideHannah, owner Hannah Walshdue Oct 23
  • Draft a two-year, 400-seat proposalRyan, owner Ryan Sullivandue Oct 26
  • Book a migration scoping sessionAndre, owner Andre Williams, Rampdue Oct 28