···2233Spec: [feeds.md](../specs/feeds.md)
4455-## Steps
55+## Tasks
66+77+### Tauri
6879- [ ] Create `src-tauri/src/notifications.rs`
810 - `src-tauri/src/commands/notifications.rs` for Tauri commands
···1012- [ ] `update_seen()` — `app.bsky.notification.updateSeen`
1113- [ ] `get_unread_count()` — `app.bsky.notification.getUnreadCount`
1214- [ ] Background polling: spawn async task on login, poll every 30s, emit Tauri event on new notifications
1313-- [ ] **Frontend**: notifications panel with two tabs — Mentions / Activity (Aeronaut pattern)
1414-- [ ] **Frontend**: unread badge on sidebar notification icon with `Motion` scale-in pop
1515-- [ ] **Frontend**: new notification items `Motion` slide-in from top
1616-- [ ] **Frontend**: tab switch `Presence` crossfade between Mentions/Activity
1715- [ ] System notifications via `tauri-plugin-notification` for mentions when app is in background
1616+1717+## Frontend
1818+1919+- [ ] notifications panel with two tabs — Mentions / Activity (Aeronaut pattern)
2020+- [ ] unread badge on sidebar notification icon with `Motion` scale-in pop
2121+- [ ] new notification items `Motion` slide-in from top
2222+- [ ] tab switch `Presence` crossfade between Mentions/Activity
+1-1
src/components/LoginPanel.tsx
···11+import type { LoginSuggestion } from "$/lib/types";
12import { invoke } from "@tauri-apps/api/core";
23import { createEffect, createSignal, For, onCleanup, onMount, Show } from "solid-js";
34import { Motion } from "solid-motionone";
44-import type { LoginSuggestion } from "../lib/types";
55import { AvatarBadge } from "./AvatarBadge";
66import { Icon } from "./shared/Icon";
77import { LazuriteLogo } from "./Wordmark";
+1-1
src/components/account/AccountButtons.tsx
···11+import { Icon } from "$/components/shared/Icon";
12import type { AccountSummary } from "$/lib/types";
23import { createMemo, Show } from "solid-js";
33-import { Icon } from "../shared/Icon";
4455export function AccountSwitchButton(
66 props: {
···11+import { AvatarBadge } from "$/components/AvatarBadge";
12import { Show } from "solid-js";
22-import { AvatarBadge } from "../AvatarBadge";
3344export function SwitcherIdentity(
55 props: {
+1-1
src/components/feeds/FeedDrawer.tsx
···11+import { Icon } from "$/components/shared/Icon";
12import { getFeedName } from "$/lib/feeds";
23import type { FeedGeneratorView, SavedFeedItem } from "$/lib/types";
34import { For, Show } from "solid-js";
45import { Motion, Presence } from "solid-motionone";
55-import { Icon } from "../shared/Icon";
66import { FeedChipAvatar } from "./FeedChipAvatar";
7788export function SavedFeedsDrawer(
+1-1
src/components/feeds/FeedEmpty.tsx
···11+import { Icon } from "$/components/shared/Icon";
12import { Show } from "solid-js";
22-import { Icon } from "../shared/Icon";
3344export function LoadingMoreIndicator(props: { loading: boolean }) {
55 return (
+2-2
src/components/feeds/FeedTabs.tsx
···11+import { Icon } from "$/components/shared/Icon";
12import { getFeedName } from "$/lib/feeds";
23import type { FeedGeneratorView, SavedFeedItem } from "$/lib/types";
34import { For } from "solid-js";
44-import { Icon } from "../shared/Icon";
55import { FeedChipAvatar } from "./FeedChipAvatar";
6677export function FeedTabBar(
···4949 type="button"
5050 onClick={() => props.onSelect(props.feed.id)}>
5151 <FeedChipAvatar feed={props.feed} generator={props.generator} />
5252- <span class="max-w-[11rem] truncate max-[900px]:max-w-[9rem] max-[720px]:max-w-[7.5rem]">
5252+ <span class="max-w-44 truncate max-[900px]:max-w-36 max-[720px]:max-w-30">
5353 {getFeedName(props.feed, props.generator?.displayName)}
5454 </span>
5555 </button>