Conversation
…apping Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…hooks Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…popup mode The popup closes immediately when a new tab opens, so the storage write must complete before calling openTab. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…facts Use height: 100% instead of fixed popup height so the Sheet covers the full screen in both popup and fullscreen mode. Override Tailwind defaults that caused a visible white border around the overlay. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 64 out of 68 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 64 out of 68 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Exports SLIDEUP_MODAL_TRANSITION_MS from SlideupModal and uses it in handleDetailsOpen instead of duplicating the 200ms literal. Keeps the consumer's setTimeout in sync with the modal's dismiss animation.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 65 out of 69 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <Text | ||
| as="h2" | ||
| size="md" | ||
| size="sm" |
There was a problem hiding this comment.
this is likely fine - but just want to confirm that we're okay with changing the font-size on all views that use this AppHeader
There was a problem hiding this comment.
yep, it was intended. I noticed there were some inconsistencies between old and new Figma screens in general so I updated to match the most recent designs for consistency. I also did an overall UI check and seems like it's looking good.
| try { | ||
| await openTab(protocol.websiteUrl); | ||
| } catch (error) { | ||
| captureException(`Error opening Discover tab - ${error}`); |
There was a problem hiding this comment.
we should surface some sort of user-facing error in this case
There was a problem hiding this comment.
Great suggestion.
I've surfaced user-facing error here using the existing sonner's toast + Notification component as it provides a smooth built-in experience with a very simple API. This is how it's looking like:
Using toast + Notification component
using-toast.mov
Using just Notification component
using-notification.mov
When using just the Notification component the code looks much more complex as we need to manually handle useState + useEffect locally for it to appear/dismiss.
| await clearRecentProtocols(); | ||
| await refreshRecent(); | ||
| } catch (error) { | ||
| captureException(`Error clearing Discover recent protocols - ${error}`); |
There was a problem hiding this comment.
we should also surface a user-face error in the unlikely event this fails
Code reviewFound 1 issue:
freighter/extension/src/popup/views/Account/index.tsx Lines 312 to 326 in a606d2d 🤖 Generated with Claude Code - If this code review was useful, please react with 👍. Otherwise, react with 👎. |
piyalbasu
left a comment
There was a problem hiding this comment.
This is looking solid! I just left a couple of small comments and Claude has a comment, as well
|
@piyalbasu thanks for the help reviewing! About the Claude comment, I noticed that as well but as I was using |
After setItem resolves we already know the value is true; returning it
directly eliminates the storage round-trip and removes the duplication
flagged against getDiscoverWelcomeSeen. If setItem fails it throws, so
callers never get a false-positive { hasSeenDiscoverWelcome: true }.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…s failures Previously both failures were swallowed into Sentry only. Add toast.custom notifications rendered with the SDS Notification error variant so the user gets immediate feedback when opening a dApp or clearing recent dApps fails. Includes en/pt-BR copy. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Without onOpenChange, Radix Dialog's native Escape-key and overlay-click dismiss paths fire on the primitive but the parent state never flips, making those gestures no-ops. Matches the pattern already used by HiddenCollectibles and AccountCollectibles. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
fixed the missing Screen.Recording.2026-04-21.at.12.00.05.mov |
Spies on sonner's toast.custom to verify the Notification element emitted when openTab rejects (from row-level Open button) and when clearRecentProtocols rejects (from ExpandedRecent kebab clear). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Exercises the onOpenChange wiring added in the previous sheet fix by pressing Escape after the trending carousel is visible and asserting the sheet closes back to the account view. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Rewrites the Discover feature as a rich, Sheet-based overlay with a Trending carousel, Recent protocols, dApps sections, protocol detail panels, and a first-time welcome modal. This is the extension counterpart to the mobile Discover V2 implementation (stellar/freighter-mobile#780).
Key changes
/discoverroutesendMessageToBackgroundhandlers underbackground/messageListener/handlers/, matching the established codebase convention (addRecentAddress,getMobileAppBannerDismissed) rather than touchingbrowser.storage.localfrom the popupuseDiscoverDatahook withuseReducerfor trending/recent/dApps categorization; newProtocolEntrytype extracted fromDiscoverData@shared/api/internalwrappers, 15 unit testsKnown issues
White border on first Sheet open:
A white border shows around Sheet overlays (AssetDetail, Discover) and only goes away after the XLM asset is opened. If you press "shift" on your keyboard the white border comes back. We're still investigating how to properly fix it. This is a pre-existing production bug, not introduced by this PR. See video below as reference.UPDATE: this issue has just been fixed here 🎉 with a 1 liner change (after 8 failed attempts) ✅
Global scrollbar hiding: The browser's default scrollbar kept appearing over Sheet overlays (AssetDetail, Discover), breaking the visual presentation. Scoping the hiding to individual components did not work — hiding it globally on
html, bodywas the only approach that reliably fixed it. Pending team discussion on whether this trade-off is acceptable. See video below as reference.UPDATE: we've decided on keeping the scrollbar hidden for now and further investigate it as part of this task. ✅
Analytics
Metrics match the mobile Discover V2 events (stellar/freighter-mobile#780) for consistent Amplitude dashboards.
loaded screen: discoverdiscover: protocol openedprotocolName,url,source,isKnownProtocoldiscover: protocol details viewedprotocolName,tagsdiscover: protocol opened from detailsprotocolName,urldiscover: welcome modal viewedSources:
trending_carousel,recent_list,dapps_list,expanded_recent_list,expanded_dapps_listisKnownProtocolis alwaystrueon extension (no search bar for unknown URLs).Other improvements
ViewAppHeadertitle size changed fromsize="md"tosize="sm" weight="medium"to match updated Figma specs (affects all screens usingView.AppHeader)Icon.XClose->Icon.X) throughout the codebaseProtocolEntryinterface to@shared/api/typesFollow-up work (after initial team review)
Reference
Videos
Popup experience
pop-up.experience.720p.mov
Fullscreen experience
fullscreen.experience.720p.mov
Scrollbar removal
With scrollbar
with.scrollbar.720p.mov
Without scrollbar
without.scrollbar.720p.mov
### White border bug (known Production issue)fixed herewhite.border.bug.720p.mov