Polish desktop Pulse and Home views#764
Open
wesbillman wants to merge 34 commits into
Open
Conversation
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
The icon-only action buttons under each Pulse note (upvote, reply, share, start DM) had no visible label, so users had to hover or guess their function. Wrap each in the shared Tooltip primitive so the existing aria-label text is also surfaced visually on hover/focus. Follow/Unfollow already have text labels and are left as-is. Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
The active heart was using text-foreground, which was barely distinguishable from a plain hover state. Switch to text-primary to match the convention already used by MessageReactions for the reacted-by-current-user state, so a liked note reads as 'liked' at a glance and the visual language is consistent across the app. Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
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
Polish pass on the desktop Pulse and Home views. The throughline: the Pulse path was stripping note tags and never querying existing kind:7 reactions, which cascaded into reply-context, upvote-state, and count bugs. Fixing the data path then opened up a series of UX touch-ups (heart, follow controls, profile sidebar, Liked tab) that are all built on the same plumbing.
What changed
Pulse note state plumbing
UserNoteInfonow carriestagsend-to-end (Rust → Tauri → TS). Required to read NIP-10 reply markers we already emit on write.eall handled.getReplyParentpriority: reply → unmarked → root.get_note_reactionsTauri command —{kinds:[7], #e: ids}over-fetch,{kinds:[5], authors:[…], #e: reaction_ids}deletion exclusion, last-eNIP-25 target resolution, server-side fold by(target, pubkey, emoji). Single source of truth: dropped localupvotedNoteIdsset."+"(heart is icon-only — keeps counts unified across clients).Profiles + Follow
UserProfilePopover. Hover → popover, click → sidebar.useThreadPanelWidthhook extracted fromChannelPane; PulseScreen mountsProfilePanelProvider+ side panel slot.NoteCardand intoUserProfilePanel. Follow now works anywhere a profile opens (channel messages, Pulse, forum). Sonner toast on errors.useContactListQuery/useFollowMutation/useUnfollowMutationmoved@/features/pulse/hooks→@/features/profile/hooks.onOpenDm→ channel routing).Tabs
get_liked_notesTauri command: kind:7 over-fetch (4×, cap 1000) → kind:5 deletion exclusion → last-eresolution → dedup → kind:1 fetch → sort by like recency. Cache invalidates on like/unlike for the current user.mentionPubkeysincludes self even though Following query doesn't).Other polish
text-primary(matchesMessageReactionsaccent).MAX_NOTE_IDS = 200cap + hex64 validation on commands taking id arrays.get_note_reactionsandget_liked_notes(Summer's structural pass).Tests
New unit tests + harness wiring:
node:testforgetReplyParent(incl. NIP-10 marked-root + reply-then-root precedence),applyReactionState,isDuplicateReactionError. Addedpnpm testscript indesktop/package.json, wired throughjust desktop-testinto lefthook (pre-commit + pre-push) and CI.#[cfg(test)]for shared social helpers (e_tag_id,last_event_tag_id,last_matching_event_tag_id,deleted_event_ids,reaction_emoji,validate_note_id). Newjust desktop-tauri-testrecipe wired into pre-push and CI.Verification
Green on every commit:
pnpm typecheck,pnpm check,pnpm build,just desktop-tauri-check,just desktop-test(314 passed),just desktop-tauri-test(408 + 3 passed),pnpm test:e2e:smoke(114 passed), full pre-push (rust-tests, clippy, web-build, mobile, desktop-build).Process
Multi-pass pipeline (Meeseeks brief → Morty → Beth → Morty fixes → Beth verify → Summer behavior-preserving pass) for the larger batches. Closing alignment audit against
VISION.md/NOSTR.mdwas clean — verdict: ship. Two low-sev fixes + the test wiring landed in this PR rather than as followups.Followups (post-merge)
build_noteshould emit["e", root, "", "root"]for non-root replies (NIP-10 SHOULD). Out of scope this round (write-side change we didn't touch).