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
Composable ActivityPub feed block with timeline and full activity modes.
npx shadcn@latest add https://ui.uptoolkit.com/r/activity-feed.jsonThe 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)}
/>;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.Pass context={{ subject: owner }} on a profile wall so visitor posts show the
"wrote to their feed" ribbon.
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.
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.