feat(activity): polish the Activity page to match the Inbox redesign (LC-690) #656

Merged
longjacksonle merged 1 commit from feat/LC-690-activity-polish into main 2026-08-09 05:49:21 +02:00

What

The Activity page (/activity) read as an undifferentiated gray wall - identical to the pre-LC-685 Inbox: everything text-content-muted, flat divide-y rows, no avatar, DM rows showing the peer's raw UUID, bare-paragraph empty state. Same data, same route, same tabs - this ports the LC-685 Inbox polish to Activity.

Changes

  • Actor avatar with live presence dot (partials/avatar.html). The handler already fetched the actor record and kept only the label; now threads avatar_ext / effective status / custom status onto ActivityItem.
  • Visual hierarchy: actor name prominent as the row heading, action line readable, kind + room + time quiet. The action line drops the now-redundant leading name ("@vas replied..." -> "replied...").
  • Card rows on token surfaces, matching Inbox / Saved. Whole card stays one deep-link to the message; all four themes + both densities.
  • DM name bug: "DM with @<uuid>" -> "DM with <name / @handle>" (resolves the peer's display name). Same bug fixed in LC-684 / LC-685.
  • Empty state: shared partials/empty_state.html (icon + muted copy).

Tests

  • routes_activity integration tests pass (3, incl. empty-state + peer-mention). Full lib suite (317). cargo fmt + clippy clean.

Follow-up

Tracked separately: UI-consistency sweep across the remaining nav pages (Scheduled, Kudos, Your stats, Transcripts). Inbox / Saved / Activity are now the reference pattern.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PBAyCesyqJkZ5JgixXf9Lf

## What The Activity page (`/activity`) read as an undifferentiated gray wall - identical to the pre-LC-685 Inbox: everything `text-content-muted`, flat `divide-y` rows, no avatar, DM rows showing the peer's raw UUID, bare-paragraph empty state. Same data, same route, same tabs - this ports the LC-685 Inbox polish to Activity. ## Changes - **Actor avatar** with live presence dot (`partials/avatar.html`). The handler already fetched the actor record and kept only the label; now threads `avatar_ext` / effective status / custom status onto `ActivityItem`. - **Visual hierarchy:** actor name prominent as the row heading, action line readable, kind + room + time quiet. The action line drops the now-redundant leading name ("@vas replied..." -> "replied..."). - **Card rows** on token surfaces, matching Inbox / Saved. Whole card stays one deep-link to the message; all four themes + both densities. - **DM name bug:** "DM with @&lt;uuid&gt;" -> "DM with &lt;name / @handle&gt;" (resolves the peer's display name). Same bug fixed in LC-684 / LC-685. - **Empty state:** shared `partials/empty_state.html` (icon + muted copy). ## Tests - `routes_activity` integration tests pass (3, incl. empty-state + peer-mention). Full lib suite (317). `cargo fmt` + `clippy` clean. ## Follow-up Tracked separately: UI-consistency sweep across the remaining nav pages (Scheduled, Kudos, Your stats, Transcripts). Inbox / Saved / Activity are now the reference pattern. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PBAyCesyqJkZ5JgixXf9Lf
feat(activity): polish the Activity page to match the Inbox redesign (LC-690)
All checks were successful
check-secrets / Nosey parker (push) Successful in 4s
check-secrets / Kingfisher (pull_request) Successful in 4s
check-secrets / TruffleHog (pull_request) Successful in 6s
check-secrets / Nosey parker (pull_request) Successful in 5s
check-secrets / TruffleHog (push) Successful in 6s
check-secrets / Kingfisher (push) Successful in 7s
Check / clippy + fmt + tests (pull_request) Successful in 5m34s
Create release / Create release from merged PR (pull_request) Has been skipped
76aed6d9d8
The Activity page read as an undifferentiated gray wall, identical to the pre-LC-685 Inbox: every part of a row (kind, room, actor, action) was text-content-muted, rows were flat divide-y lines with no avatar, DM rows showed the peer's raw UUID, and the empty state was a bare paragraph. Same data, same route, same tabs - this is the LC-685 Inbox polish ported to Activity.

- Actor avatar: each row now shows the acting user's avatar with the live presence dot, reusing partials/avatar.html. The handler already fetched the actor record and kept only the label; it now threads avatar_ext / effective status / custom status onto ActivityItem.
- Visual hierarchy: actor name in text-content (prominent) as the row heading, the action line in readable text-content, the kind + room caption and timestamp as quiet secondary text. Because the actor is the heading, the action line drops the leading name ("@vas replied..." -> "replied...") - no redundancy, and the existing i18n strings already read correctly without it.
- Card rows: flat divide-y lines become per-event cards on token surfaces (border, rounded, elevated, hover). The whole card stays one deep-link to the message; token colors only, so all four themes + both densities hold.
- DM name bug: a DM row showed "DM with @<uuid>" because the handler formatted the peer id. It now resolves the peer's display name (it already resolves the peer id for the deep-link) so it reads "DM with <name / @handle>". Same class of bug fixed in LC-684 (Saved) and LC-685 (Inbox).
- Empty state: the bare centered paragraph becomes the shared partials/empty_state.html treatment (icon + muted copy).

routes_activity integration tests pass (3), full lib suite (317), fmt + clippy clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBAyCesyqJkZ5JgixXf9Lf
longjacksonle scheduled this pull request to auto merge when all checks succeed 2026-08-09 05:43:51 +02:00
longjacksonle deleted branch feat/LC-690-activity-polish 2026-08-09 05:49:21 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!656
No description provided.