Corto

The Recent activity card

What every row in the side-panel feed means, and how the card decides what to surface.

The Recent activity card lives on every Company, Person, and Opportunity side panel. It's the answer to "what's happened to this record lately?" — five rows, newest first, with a one-click jump to the underlying note / task / message / call.

Recent activity card on the Apex Cloud side panel

Anatomy of a row

Every row, regardless of source, follows the same layout:

┌────────────────────────────────────────────────────────────┐
│  [icon]   [summary line]            [→ stage chip if any]  │
│           [optional body preview]                          │
│           [relative time]  ·  [author chip]                │
└────────────────────────────────────────────────────────────┘
SlotWhat it shows
Icon swatch (top-left)Color-toned per kind. Lets you scan the feed for "just the calls" or "just the notes" without reading.
SummaryOne line. The note's title, the task's title, the call's summary, or the activity event's pre-rendered text ("Moved Acme to Proposal").
Body previewOptional. Notes preview the first ~240 chars of their body. Calls preview their notes field. Tasks and messages don't have a body preview.
Stage chip (top-right)Only on stage-change rows. Renders two StagePills with an arrow between them ("Discovery → Proposal").
Relative time"Just now", "2h ago", "yesterday", "Jun 14".
Author chipThe team member who logged it. Missing for system events and inbound messages.

What each kind looks like

The icon tone tells you the kind:

KindToneWhen it appears
NoteYellowAnyone created or edited a note attached to this record
TaskBlueA task was attached to this record
CallOrangeA call was logged against this record via + Log → Call
MessageGreenA Gmail thread was synced where this record is a participant (Person / Company only)
EventPurpleA Google Calendar event was synced where this record attended (Person / Company only)
Stage changeGrayAn Opportunity's stage field was updated. Always carries a stage chip.
Field edit / other activityGrayAnything else captured in activity_event — creation, deletion, field edits.

How the feed is built

A single backend call merges six sources for the record:

activity_event — any kind, including stage changes (those come with a stageChange: { from, to } payload).
Notes via noteTarget.
Tasks via taskTarget.
Call logs via callLogTarget.
Message threads via messageParticipant (People / Companies only).
Calendar events via calendarEventAttendee (People / Companies only).

Sources are merged, sorted by occurredAt newest first (lexicographic id as tiebreak for sub-second ties), and the top 5 are returned.

The merge also dedupes against the activity_event row that the call endpoint emits — so when you log a call, the "Logged call: …" activity row is suppressed in favor of the richer call_log entry, and the same touchpoint doesn't show twice.

Clickable rows

KindClick target
NoteNavigates to the note's detail page (/object/note/:id).
TaskNavigates to the task's detail page.
CallNo-op for now — we don't yet have a dedicated call detail page. The body preview surfaces the call notes.
MessageNo-op — Gmail threads are surfaced separately in the Messages card.
EventNo-op — calendar events are surfaced separately in the Events card.
Stage change / activityNo-op — the activity_event row has no detail page.

The cursor doesn't switch to a "click me" pointer on non-clickable rows to avoid the dead-affordance feel.

What's deliberately not in this card

Pagination. The card only ever shows 5. Anything older lives in the detail page's full timeline tab. We pick 5 because more than that pushes the editable field rows off the bottom of the panel.

Empty notes / draft messages. A note has to have a title; a draft message doesn't qualify as a touchpoint until it's sent.

Record-viewed / enrichment-ran events. System noise. They live in the audit log if you really need them, but never make it to this card.

When the card is empty

A brand-new record (just created, no notes / tasks / messages yet) shows:

Sparkles icon

No activity yet. Log a note, task, or call above to seed the timeline.

The "above" is the + Log button in the card's title row — see Logging a note, task, or call.

On a Note or Task panel

Notes and Tasks are the leaves of the activity graph — they ARE activity, they don't HAVE activity. So the Recent activity card is hidden on Note and Task side panels. If you click a note from a company's feed, the note's panel just shows the note's content.

Tips

The card is 30-second staleTime. Open it, log a note, the card re-fetches within 30 seconds and shows the new row. Manual refresh isn't needed.

Cross-record auto-surface. A note you write on a Person also shows up on that person's Company recent activity feed (since notes can target multiple records). The body preview helps you tell at a glance whether you wrote it from the person or company context.

The stage chip uses your live config. If you renamed PROPOSAL to "Negotiation" in Settings, the stage-change row's chip shows "Negotiation". The historical row's summary is unchanged — it still reads "Moved Acme to Proposal" because that's what was true at the time.

What's next

On this page