Detect markdown-formatted posts (from bots etc.) and render them
with react-markdown instead of plain text, with feed-friendly
styles (flattened headings, compact lists, scrollable tables).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When reconnecting a bunker signer (e.g. Amber) after page reload, skip
the getPublicKey() call since the pubkey is already known from storage.
This prevents the app from hanging indefinitely when the remote signer
is unreachable. Also add a 10s timeout to getPublicKey() for safety.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use compareEvents (which considers both created_at and id) instead of
simple created_at comparison for sorting events in timeline subscription
and load-more logic. This ensures consistent ordering with mergeTimelines
and handleNewEvent deduplication, preventing duplicates when events share
the same timestamp. Also add Set-based dedup in notification list memo
as an additional safety net.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a toggle in General Settings to enable/disable video loop playback,
following the same pattern as the existing autoplay setting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: show 'Encrypted direct messages not supported' for kind 4 events (#753)
Co-authored-by: The Daniel <dmnyc@users.noreply.github.com>
* i18n: add translations for 'Encrypted direct messages not supported'
Also use kinds.EncryptedDirectMessage constant instead of magic number 4.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: The Daniel 🖖 <3638467+dmnyc@users.noreply.github.com>
Co-authored-by: The Daniel <dmnyc@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Two issues prevented multiple YouTube URLs from rendering:
1. YOUTUBE_URL_REGEX and X_URL_REGEX had the global flag, causing
stateful lastIndex to skip matches on alternating calls.
2. Each YouTube Player overwrote window.onYouTubeIframeAPIReady,
so only the last mounted player received the callback. Replace
with a shared callback queue via ensureYTApi().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add flex-wrap to the relay tags container so tags wrap to the next line
instead of overflowing horizontally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a "Copy note content" option to the note options menu that copies the
event's content field to clipboard. Merge AGENTS.md into CLAUDE.md with
enhanced i18n rules emphasizing append-only locale key ordering.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>