Uptoolkit
GitHub

Activity Feed

Composable ActivityPub feed block with timeline and full activity modes.

500

Today

  1. Bergen, Norway

    Spent the week redrawing a 1:25000 coastline by hand. The shoreline has moved 40 metres inland since the 1984 survey.

    Every map is a snapshot of a place that has already changed. #cartography #openstreetmap

    Hand-drawn coastline contour map with annotated survey markers
    Comparison overlay of the 1984 and current shoreline
    #cartography#openstreetmap
    • Is the 1984 survey digitised anywhere? I would love to run the two through a diff.

    • The hand-drawn linework is beautiful. Are you inking these on vellum?

  2. Tobi Ferrand reacted to a post “Spent the week redrawing a 1:25000 coastline by hand. The s…”
    • Hand-drawn coastline contour map with annotated survey markers
    • Comparison overlay of the 1984 and current shoreline
  3. Mira Halvorsen boosted

    What we learned running a mapping co-op for five years

    Five years in, the hardest part was never the software. It was agreeing on what counts as done.

    Full write-up on our site, including the governance docs we wish we had started with.

    #cooperatives
  4. Kestrel Adeyemi started following
  5. New set of glacier recordings up. Thanks @mira@fediverse.example for the coordinates. #fieldrecording

    Twelve minute glacier field recording
    #fieldrecording
  6. Rahel Kebede reacted to a post “Spent the week redrawing a 1:25000 coastline by hand. The s…”
    • Hand-drawn coastline contour map with annotated survey markers
    • Comparison overlay of the 1984 and current shoreline

Yesterday

  1. Mira Halvorsen added photos to an album Atlas plates, 2019-2025
    • Contour plate one, inked
    • Contour plate two, inked
    • Contour plate three, with survey annotations
  2. Mira Halvorsen joined a group Atlas Collective

June 2025

  1. Mira Halvorsen updated their profile New cover image
    • Cover image: a stylised contour field
  2. Juno Park deleted a post

Installation

npx shadcn@latest add https://ui.uptoolkit.com/r/activity-feed.json

Usage

The feed. Hand it an OrderedCollection from an inbox or outbox and it classifies each activity, optionally filters and groups them, and renders post cards or collapsed rows.

import { ActivityFeed } from "@/components/activity-feed";

const collection = await fetchOutbox(viewer);

<ActivityFeed
  viewer={viewer}
  collection={collection}
  variant="full"
  showComments
  onPublish={(activity) => postToOutbox(viewer, activity)}
  onLoadMore={(next) => fetchPage(next)}
  onActivity={(activity) => postToOutbox(viewer, activity)}
/>;

Variants

  • timeline — only Create and Announce entries, no filter row. A drop-in replacement for a plain home feed.
  • full — the whole ActivityPub vocabulary with filter tabs and date grouping.

Wall context

Pass context={{ subject: owner }} on a profile wall so visitor posts show the "wrote to their feed" ribbon.

Pagination

When the collection has a next URL, a "Load older activity" button appears and passes that URL to onLoadMore. Merge the page into your collection state and pass it back down.

Structured data

The block emits one Schema.org CollectionPage wrapping an ItemList of postings. Without a collection it renders activity-entries sample data so it works the moment it is installed.