Timeline

Organism

Chronological activity feed with sticky day headings. Grouping uses the viewer’s local day via `Intl`, not the raw ISO date — an event at 23:50 UTC otherwise lands under the wrong heading for anyone east or west of the server.

Grouped by day

Preview
  1. Tuesday, August 25, 2026
  2. Reply received
    “Interesting — can you send details?”
  3. Email sent
    Re: shipping integration
  4. Monday, August 24, 2026
  5. Call completed
    4m 12s · reached the right person
  6. Enriched
    18 employees · logistics software
Code
<Timeline
  items={activities.map((a) => ({
    id: a.activityId,
    at: a.occurredAt,
    title: a.type,
    body: a.summary,
  }))}
/>

Empty, and ungrouped

Preview

No activity on this company yet.

  1. Bounced
  2. Queued
Code
<Timeline items={[]} emptyMessage="No activity yet." />
<Timeline items={items} groupByDay={false} />
Sourcemodules/ui/Timeline.tsx