Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
npx shadcn@latest add https://sdk-components.thesqd.com/r/activity-feed-showcase.jsonimport { ActivityFeed, type ActivityFeedItem } from "@/components/blocks/activity-feed";import { ActivityFeed } from "@/components/blocks/activity-feed";
const items = [
{
id: "1",
user: { name: "Jordan Burke" },
action: "uploaded 3 images to",
target: "Easter Series",
timestamp: new Date().toISOString(),
type: "upload",
},
];
export function Example() {
return (
<ActivityFeed
items={items}
groupBy="day"
showRelativeTime
showSearch
showFilter
filterTypes={["upload", "comment", "join", "complete"]}
/>
);
}ActivityFeed (main component)
├── title? (string | null — default "Activity Feed"; null hides header)
├── description? (string — default "Recent team activity and updates")
├── card? (boolean — default true; false renders bare list)
├── variant?="activity" | "notifications" (default "activity"; "notifications" switches to notification-center layout)
├── showSearch? (boolean — show search input. Default false)
├── searchPlaceholder? (string — search input placeholder)
├── showFilter? (boolean — show type filter. Default false; requires filterTypes)
├── filterTypes? (ActivityType[] — options for the type filter)
├── onMarkAllAsRead? (notifications variant — renders a "Mark all as read" action when provided)
├── markAllAsReadLabel? (string — default "Mark all as read")
├── items (ActivityFeedItem[])
│ ├── id (string — unique key)
│ ├── user (ActivityFeedUser)
│ │ ├── name (string — display name)
│ │ ├── initials? (string — fallback if no avatar)
│ │ └── avatar? (string — image URL)
│ ├── action (string — verb, e.g. "uploaded")
│ ├── target? (string — optional object, e.g. project name)
│ ├── timestamp (ISO string | Date)
│ ├── icon? (ReactNode — overrides avatar with a lucide icon)
│ └── type? (string — used by filterTypes)
├── groupBy="day" | "none" (default: "day")
├── showRelativeTime (boolean, default: true — "2h ago" or absolute)
├── emptyState? (ReactNode — replaces the default Empty component)
└── className? (string)Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
Events will appear here as your team takes action.
Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
Jordan Burke uploaded 3 images to Easter Series
Priya Nair changed status toCompleted
Marcus Webb commented on Welcome Video Script
Alex Rodriguez changed status toNew member
Samantha Cho changed status toNeeds review
Tyler Brooks created project VBS 2025
Leah Monroe uploaded the final cut of Baptism Highlight Reel
Derek Hines completed Sermon Slide Deck — April 27
Courtney booked a haircut with Barber Mike
New Bookings·Oct 30, 2026·2:50 PM
Smith rescheduled a haircut with Barber
Rescheduled·Oct 30, 2026·11:50 AM
John Doe registered as a new barber
New barber registrations·Oct 30, 2026·8:50 AM
Barber Tom has updated his availability for the week.
Shift reminder·Oct 30, 2026·6:50 AM
Lisa Brown rated Barber Jason 5 stars
New Review·Oct 30, 2026·2:50 AM
Sarah Johnson booked a Beard Trim with Barber Alex
New Bookings·Oct 29, 2026·4:50 PM
David Miller scheduled a Fade Cut with Barber Chris
New Bookings·Oct 29, 2026·4:50 PM
ActivityFeed
| Prop | Type | Default | Description |
|---|---|---|---|
items | ActivityFeedItem[] | — | Array of activity items to display, most-recent rendered first within each group. |
title | string | null | "Activity Feed" | Card header title. Pass null to suppress the header entirely. |
titleFont | "heading" | "sans" | "sans" | Title font face. `"heading"` renders the title in the Albra display face at the larger SectionHeader scale — used by the dashboard `card-section` pattern. |
titleColor | "default" | "violet" | "violet" | Title color when `titleFont === "heading"`. `"violet"` applies Squad violet (#341756) in light mode. No effect on the default sans title. |
fullHeight | boolean | true | Stretch the Card wrapper to fill its parent's height so feeds in a grid row equalize. Pass `false` to hug content. |
description | string | "Recent team activity and updates" | Card header description shown below the title. |
headerAction | ReactNode | — | Right-aligned node rendered next to the title (typically a "View all →" link button). Replaces the auto search/filter controls in the CardAction slot. |
card | boolean | true | Wrap the feed in a Card shell. Pass false to render the bare list (useful when embedding in another card). |
variant | "activity" | "notifications" | "activity" | Switch the layout. `notifications` renders a notification-center view: bold body, category/timestamp sub-row, per-item unread dot, single-select tab pills for `filterTypes`, optional "Mark all as read" action. |
showSearch | boolean | false | Show the search input above the list. |
searchPlaceholder | string | "Search activity…" | Placeholder for the search input. |
showFilter | boolean | false | Show the type filter. In `activity` variant renders a multi-select Select; in `notifications` renders single-select tab pills. Requires `filterTypes`. |
filterTypes | ActivityType[] | — | Options for the type filter. Items match via their optional `type` field. |
onMarkAllAsRead | () => void | — | Notifications variant — renders a "Mark all as read" action button when provided. |
markAllAsReadLabel | string | "Mark all as read" | Label for the mark-all action. |
groupBy | "day" | "none" | "day" | When "day", items are bucketed under "Today" / "Yesterday" / date headers. |
showRelativeTime | boolean | true | Show "2h ago" style labels. On hover a Tooltip shows the absolute timestamp. |
emptyState | ReactNode | — | Custom empty-state element rendered when items is empty. |
className | string | — | Override or extend the wrapper classes. |
ActivityFeedItem
| Prop | Type | Default | Description |
|---|---|---|---|
id | string | — | Unique identifier used as the React key. |
user | ActivityFeedUser | — | Who performed the action. |
action | string | — | Action verb or phrase, e.g. "uploaded". |
target | string | — | Optional target name rendered after the action. |
timestamp | string | Date | — | ISO date string or Date object. |
icon | ReactNode | — | Optional leading icon that replaces the avatar. |
type | string | — | Free-form type tag matched against filterTypes. |
unread | boolean | — | Notifications variant — marks the item as unread (leading dot + tonal row). |
category | string | — | Notifications variant — small source label rendered before the date. |
ActivityFeedUser
| Prop | Type | Default | Description |
|---|---|---|---|
name | string | — | Full display name shown as bold text. |
initials | string | — | Fallback initials if avatar is absent. Auto-computed from name if omitted. |
avatar | string | — | Image URL for the user avatar. |