diff --git a/site/src/components/ActivityFeed.svelte b/site/src/components/ActivityFeed.svelte
index ff6af52..77f4e56 100644
--- a/site/src/components/ActivityFeed.svelte
+++ b/site/src/components/ActivityFeed.svelte
@@ -48,6 +48,8 @@
/** Remaining combined-feed pages (multi-user global feed). */
let feedNextPage = 0;
let feedTotalPages = 0;
+ /** Grand total from feed.json — shows instance-wide count even before all pages are loaded. */
+ let totalActivities = 0;
/** Logged-in handle — resolved async via bincio:me event. */
let me: string = '';
@@ -123,6 +125,7 @@
const combined = await loadCombinedFeed(base);
if (combined) {
all = combined.activities;
+ totalActivities = combined.totalActivities;
feedTotalPages = combined.remainingPages + 1;
feedNextPage = combined.remainingPages > 0 ? 2 : 0;
loading = false;
@@ -175,7 +178,11 @@
{/each}
{#if all.length > 0}
- {filtered.length} {filtered.length === 1 ? 'activity' : 'activities'}
+ {#if totalActivities > filtered.length}
+ {filtered.length} of {totalActivities} activities
+ {:else}
+ {filtered.length} {filtered.length === 1 ? 'activity' : 'activities'}
+ {/if}
{/if}
diff --git a/site/src/lib/dataloader.ts b/site/src/lib/dataloader.ts
index e2d7bdd..c1da75e 100644
--- a/site/src/lib/dataloader.ts
+++ b/site/src/lib/dataloader.ts
@@ -269,12 +269,13 @@ interface FeedPage {
*/
export async function loadCombinedFeed(
baseUrl: string,
-): Promise<{ activities: ActivitySummary[]; remainingPages: number } | null> {
+): Promise<{ activities: ActivitySummary[]; remainingPages: number; totalActivities: number } | null> {
try {
const feed = await fetchJSON(`${baseUrl}data/feed.json`);
return {
activities: feed.activities ?? [],
remainingPages: (feed.total_pages ?? 1) - 1,
+ totalActivities: feed.total_activities ?? 0,
};
} catch {
return null;