feat(desktop): add Pulse social notes surface#296
Merged
wesbillman merged 2 commits intomainfrom Apr 11, 2026
Merged
Conversation
Add a new "Pulse" surface for viewing and posting kind:1 social notes (NIP-01) with follow/unfollow (NIP-02 contact lists), agent activity grouping, and a "For You" blended feed. Backend: - 4 new Tauri commands: publish_note, get_contact_list, set_contact_list, get_notes_timeline - kind:1 text note builder and kind:3 contact list builder in events.rs - ContactListResponse / ContactEntry models Frontend: - /pulse route with PulseScreen, PulseView, ComposeNote, NoteCard, AgentActivityCard components - 4 tabs: For You, People, Agents (with smart grouping), My Notes - Agent filter dropdown, follow/unfollow with race-condition-safe mutations (re-fetch contact list inside mutationFn) - Recent Notes widget on Home feed - kind:1 "Note" badge in Cmd+K search results - UserProfilePopover "View all / Show less" toggle for notes Code quality: - Extract shared UserAvatar component from MessageRow inline avatar; used in Pulse, forums, and channels for consistent avatar rendering - Fix pubkey case-mismatch bug in profile lookups (lowercase normalization) - Bounded timeline requests (max 100 pubkeys) - Stable query keys (sorted comma-joined string) - Timeline + contact list invalidation on publish/follow/unfollow Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Collaborator
Author
The UserAvatar extraction dropped the data-testid attributes that
MessageRow's inline avatar had. Add testId prop to UserAvatar that
generates {testId}-image and {testId}-fallback test IDs, matching
the original message-avatar-image / message-avatar-fallback selectors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tlongwell-block
added a commit
that referenced
this pull request
Apr 11, 2026
…ona-migration * origin/main: feat(desktop): add Pulse social notes surface (#296) Fix flaky desktop smoke tests (#294) Add agent lifecycle controls to channel members sidebar (#291) Update nest_agents.md tagging info (#292) feat: add Sprout nest — persistent agent workspace at ~/.sprout (#290) Fix auth and SSRF vulns (#261) Add per-agent MCP toolset configuration to agent setup (#279) feat(desktop): team & persona import/edit flows (#288) Remove menu item subtitles and fix persona card overflow (#289) feat: Phase 1 video upload support (Blossom-compliant-ish) (#285) Add inline subtitles to menu items and field descriptions (#276) Improve ephemeral channel affordances and hide archived sidebar rows (#286) Fix @mention search to use word-boundary prefix matching (#278) Allow bot owners to remove their agents from any channel (#284) [codex] Polish agent selectors and settings layout (#283) # Conflicts: # desktop/scripts/check-file-sizes.mjs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Summary
/pulse) for viewing and posting kind:1 social notes (NIP-01) with follow/unfollow via NIP-02 contact listspublish_note,get_contact_list,set_contact_list,get_notes_timeline) with kind:1/kind:3 event buildersUserAvatarcomponent fromMessageRow— now used in Pulse, forums, and channels for consistent avatar renderingKey decisions
mutationFnbefore computing deltas (kind:3 is a full-snapshot replaceable event)Test plan
🤖 Generated with Claude Code