diff --git a/desktop/src/app/AppShell.tsx b/desktop/src/app/AppShell.tsx
index ebfe13fd0..9bc6a7fe3 100644
--- a/desktop/src/app/AppShell.tsx
+++ b/desktop/src/app/AppShell.tsx
@@ -126,9 +126,6 @@ export function AppShell() {
activeChannel,
identityQuery.data,
);
- const homeUrgentCount =
- (homeFeedQuery.data?.feed.mentions.length ?? 0) +
- (homeFeedQuery.data?.feed.needsAction.length ?? 0);
const availableChannelIds = React.useMemo(
() => new Set(channels.map((channel) => channel.id)),
[channels],
@@ -411,7 +408,6 @@ export function AppShell() {
: undefined
}
fallbackDisplayName={identityQuery.data?.displayName}
- homeUrgentCount={homeUrgentCount}
isCreatingChannel={createChannelMutation.isPending}
isLoading={channelsQuery.isLoading}
selfPresenceStatus={presenceSession.currentStatus}
@@ -511,7 +507,6 @@ export function AppShell() {
}
feed={homeFeedQuery.data}
isLoading={homeFeedQuery.isLoading}
- isRefreshing={homeFeedQuery.isRefetching}
onOpenChannel={handleOpenChannel}
onRefresh={() => {
void homeFeedQuery.refetch();
diff --git a/desktop/src/features/home/hooks.ts b/desktop/src/features/home/hooks.ts
index 6d378482b..1df0c8329 100644
--- a/desktop/src/features/home/hooks.ts
+++ b/desktop/src/features/home/hooks.ts
@@ -5,7 +5,7 @@ import { getHomeFeed } from "@/shared/api/tauri";
export function useHomeFeedQuery() {
return useQuery({
queryKey: ["home-feed"],
- queryFn: () => getHomeFeed({ limit: 12 }),
+ queryFn: () => getHomeFeed({ limit: 12, types: "mentions,needs_action" }),
staleTime: 15_000,
gcTime: 5 * 60 * 1_000,
refetchInterval: 30_000,
diff --git a/desktop/src/features/home/ui/HomeView.tsx b/desktop/src/features/home/ui/HomeView.tsx
index 72d4b6c84..e252f0acc 100644
--- a/desktop/src/features/home/ui/HomeView.tsx
+++ b/desktop/src/features/home/ui/HomeView.tsx
@@ -1,12 +1,4 @@
-import {
- Activity,
- AtSign,
- Bot,
- CircleAlert,
- RefreshCcw,
- Sparkles,
- type LucideIcon,
-} from "lucide-react";
+import { AtSign, CircleAlert, RefreshCcw, type LucideIcon } from "lucide-react";
import {
resolveUserLabel,
@@ -14,7 +6,6 @@ import {
} from "@/features/profile/lib/identity";
import { useUsersBatchQuery } from "@/features/profile/hooks";
import type { FeedItem, HomeFeedResponse } from "@/shared/api/types";
-import { cn } from "@/shared/lib/cn";
import { Button } from "@/shared/ui/button";
import { Markdown } from "@/shared/ui/markdown";
import { Skeleton } from "@/shared/ui/skeleton";
@@ -54,13 +45,6 @@ function formatRelativeTime(unixSeconds: number) {
}).format(new Date(unixSeconds * 1_000));
}
-function formatUpdatedAt(unixSeconds: number) {
- return new Intl.DateTimeFormat("en-US", {
- hour: "numeric",
- minute: "2-digit",
- }).format(new Date(unixSeconds * 1_000));
-}
-
function feedHeadline(item: FeedItem) {
switch (item.kind) {
case 40007:
@@ -257,65 +241,17 @@ function FeedSection({
);
}
-function SummaryCard({
- title,
- value,
- icon: Icon,
- tone,
-}: {
- title: string;
- value: number;
- icon: LucideIcon;
- tone: "urgent" | "calm";
-}) {
- return (
-
-
-
-
-
-
-
- {title}
-
-
{value}
-
-
-
- );
-}
-
function HomeLoadingState() {
return (
-
-
-
-
- {["first", "second", "third", "fourth"].map((item) => (
-
- ))}
-
+
+
- {["mentions", "actions", "activity", "agents"].map((section) => (
+ {["mentions", "actions"].map((section) => (
;
@@ -349,7 +284,6 @@ type HomeViewProps = {
export function HomeView({
feed,
isLoading = false,
- isRefreshing = false,
errorMessage,
currentPubkey,
availableChannelIds,
@@ -357,12 +291,7 @@ export function HomeView({
onRefresh,
}: HomeViewProps) {
const feedItems = feed
- ? [
- ...feed.feed.mentions,
- ...feed.feed.needsAction,
- ...feed.feed.activity,
- ...feed.feed.agentActivity,
- ]
+ ? [...feed.feed.mentions, ...feed.feed.needsAction]
: [];
const feedProfilesQuery = useUsersBatchQuery(
feedItems.map((item) => item.pubkey),
@@ -397,80 +326,9 @@ export function HomeView({
);
}
- const totalUrgent = feed.feed.mentions.length + feed.feed.needsAction.length;
-
return (
-
-
-
-
-
-
-
-
-
-
- Focus queue
-
-
- Mentions, reminders, channel activity, and agent work in one
- feed.
-
-
-
-
- {errorMessage ? (
-
{errorMessage}
- ) : null}
-
-
-
-
- Updated {formatUpdatedAt(feed.meta.generatedAt)}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/desktop/src/features/sidebar/ui/AppSidebar.tsx b/desktop/src/features/sidebar/ui/AppSidebar.tsx
index a90d3a14b..cc79cf6a5 100644
--- a/desktop/src/features/sidebar/ui/AppSidebar.tsx
+++ b/desktop/src/features/sidebar/ui/AppSidebar.tsx
@@ -43,7 +43,6 @@ type AppSidebarProps = {
profile?: Profile;
selfPresenceStatus: PresenceStatus;
errorMessage?: string;
- homeUrgentCount?: number;
selectedChannelId: string | null;
selectedView: "home" | "channel" | "settings";
unreadChannelIds: Set
;
@@ -294,7 +293,6 @@ export function AppSidebar({
profile,
selfPresenceStatus,
errorMessage,
- homeUrgentCount,
selectedChannelId,
selectedView,
unreadChannelIds,
@@ -435,11 +433,6 @@ export function AppSidebar({
>
Home
- {homeUrgentCount && homeUrgentCount > 0 ? (
-
- {homeUrgentCount}
-
- ) : null}
diff --git a/desktop/tests/e2e/smoke.spec.ts b/desktop/tests/e2e/smoke.spec.ts
index 15c97b147..d2ff850f9 100644
--- a/desktop/tests/e2e/smoke.spec.ts
+++ b/desktop/tests/e2e/smoke.spec.ts
@@ -76,9 +76,7 @@ test("opens a mocked channel from the home feed", async ({ page }) => {
await page.goto("/");
await expect(page.getByTestId("chat-title")).toHaveText("Home");
- await expect(
- page.getByRole("heading", { name: "Focus queue" }),
- ).toBeVisible();
+ await expect(page.getByRole("heading", { name: "@Mentions" })).toBeVisible();
await expect(
page.getByText("Please review the release checklist."),
).toBeVisible();
@@ -91,20 +89,15 @@ test("opens a mocked channel from the home feed", async ({ page }) => {
);
});
-test("home feed uses your resolved profile label instead of You", async ({
- page,
-}) => {
- const activitySection = page.locator("section").filter({
- has: page.getByRole("heading", { name: "Channel Activity" }),
+test("home feed renders resolved author labels", async ({ page }) => {
+ const mentionsSection = page.locator("section").filter({
+ has: page.getByRole("heading", { name: "@Mentions" }),
});
await page.goto("/");
- await expect(activitySection).toContainText(
- "I posted a note about the launch checklist.",
- );
- await expect(activitySection).toContainText("npub1mock...");
- await expect(activitySection).not.toContainText("You");
+ await expect(mentionsSection).toContainText("alice");
+ await expect(mentionsSection).not.toContainText("You");
});
test("opens relay-backed search from the sidebar and loads the exact result", async ({
diff --git a/desktop/tests/e2e/stream.spec.ts b/desktop/tests/e2e/stream.spec.ts
index 76873143d..a81fd81f2 100644
--- a/desktop/tests/e2e/stream.spec.ts
+++ b/desktop/tests/e2e/stream.spec.ts
@@ -102,13 +102,13 @@ test("loads the home feed from the relay", async ({ page }) => {
await page.goto("/");
await expect(page.getByTestId("chat-title")).toHaveText("Home");
- await expect(
- page.getByRole("heading", { name: "Focus queue" }),
- ).toBeVisible();
await expect(page.getByRole("heading", { name: "@Mentions" })).toBeVisible();
await expect(
page.getByRole("heading", { name: "Needs Action" }),
).toBeVisible();
+ await expect(
+ page.getByRole("heading", { name: "Channel Activity" }),
+ ).toHaveCount(0);
});
test("creates a relay-backed stream", async ({ page }) => {