Remove the local ICONS map from ContentSettings.tsx and replace it with
EXTRA_KIND_ICONS from extraKindIcons.ts. Add feed-kind icons (posts,
comments, reposts, generic-reposts) to the shared registry so all icon
references resolve from one place.
Introduces a GIF picker powered by Tenor's API with search and trending
GIFs. The picker is integrated into both the post compose toolbar and
the DM chat input area, alongside a new emoji picker for DMs.
- SpotifyEmbed: iframe to open.spotify.com/embed/ with fixed heights
per content type (track/episode: 152px, album/playlist/show: 352px)
- RedditEmbed: iframe to embed.reddit.com with resize.embed postMessage
- Supports track, album, playlist, episode, show for Spotify
- Supports /r/subreddit/comments/id/ URLs for Reddit
- Both with rounded corners and discuss bar
Removes 123 lines of bespoke YouTube/generic link preview rendering
from UrlContentHeader. All URL types on /i/ pages now go through
LinkEmbed, so Bluesky and Mastodon embeds work automatically.
Shows favicon, domain link, and Discuss button below YouTube, Twitter,
Bluesky, and Mastodon embeds. Disabled on the /i/ page itself where
you're already viewing the discussion. LinkPreview keeps its own
built-in Discuss button.
- BlueskyEmbed: iframe to embed.bsky.app with handle→DID resolution
- MastodonEmbed: iframe to {instance}/@user/id/embed with setHeight resize
- Known Mastodon servers list (317 instances) for URL detection
- embedLabel() helper for consistent platform labels in headers
- Both embeds auto-resize via postMessage, no third-party scripts
- Create LinkEmbed that dispatches to YouTubeEmbed, TweetEmbed, or LinkPreview based on URL
- Centralize extractYouTubeId and extractTweetId in LinkEmbed module
- Simplify NoteContent: merge link-preview and youtube-embed token types into link-embed
- Tweet URLs in posts now render as embedded tweets automatically
- Remove duplicate extractYouTubeId from NoteContent and ExternalContentHeader
Each reaction in the interactions modal now navigates to the kind 7
event's detail page (via nevent), where users can leave NIP-22 kind
1111 comments on the reaction using E/e tags. Added eventId to
ReactionEntry and a dedicated ReactionRow component with a chevron
indicating it's navigable.
Move bg-background from the flex-1 nav container (which stretches to
fill all remaining height) to an inner div that wraps just the nav
items and More button, so the solid background stops right after the
last item and the background image shows in the space below.
Swap bg-background/85 to bg-background for all sections in the mobile
drawer (user row, account switcher, nav items, theme picker, logged-out
state) to ensure full legibility over busy background images.
The sheet component's cva base class includes bg-background which was
winning the Tailwind specificity battle over bg-transparent. Using
inline style backgroundColor: 'transparent' guarantees it overrides
the class-based background color, letting the background-image show.
Instead of making the drawer transparent (which just shows the dark
overlay), render the background image on the SheetContent itself via
inline styles. When a background image is active, sections get
bg-background/85 rounded containers for legibility. When there's no
background image, the drawer renders normally as before.
Make the mobile hamburger menu transparent so the user's theme
background image shows through, matching the desktop sidebar pattern.
Individual sections (user row, account switcher, nav items, theme
picker) get bg-background/85 rounded containers for legibility.
When viewing a kind 1111 comment thread where the root is a person
(kind 0 profile), show a compact profile preview card with avatar,
name, and NIP-05 at the top of the page, similar to how external
content previews are shown for URLs/books/countries.
- Change inactive sidebar nav items from text-muted-foreground to
text-foreground/70 for better readability
- Update Retro Pop preset background color to #d9d6ff (244 100% 92%)