Commit graph

1045 commits

Author SHA1 Message Date
sakrecoer
536c18adca better naming 2026-04-09 15:55:45 +02:00
sakrecoer
d616691395 customize icons 2026-04-09 15:44:23 +02:00
sakrecoer
ad77866a50 branding and music implementation 2026-04-08 21:03:43 +02:00
sakrecoer
1ec3d95c35 nostr music: tracks 2026-04-08 21:03:09 +02:00
sakrecoer
6d00aa8e0a theme and branding 2026-04-08 21:01:08 +02:00
sakrecoer
7bfc3ed900 custom assets 2026-04-08 20:54:37 +02:00
rodbishop
e740d199f1
feat: Add Shosho as external client for Live Events (#770)
* feat: Add Shosho as an external client for Live Events

Adds 'Shosho' to the list of external clients for kind 30311 (Live Event) events.

The link format is `https://shosho.live/live/<event_bech32>`.

* refactor: Reorder clients for Live Events

Based on feedback, this commit reorders the external clients for Live Events to place 'shosho' after 'zap.stream'.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-07 11:58:24 +08:00
codytseng
2efc884e01 feat: migrate NIP-51 list encryption from NIP-04 to NIP-44
NIP-04 encryption is deprecated due to security vulnerabilities.
This migrates MuteList (kind 10000) and PinnedUsers (kind 10010)
private entries to use NIP-44 encryption, with backward compatibility
for reading existing NIP-04 encrypted content. When NIP-04 content
is detected, it is automatically re-encrypted with NIP-44 and
republished to gradually migrate users.

Co-Authored-By: captain-stacks <201298974+captain-stacks@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 23:52:49 +08:00
codytseng
4fb40e81b3 feat: improve addressable video (kind 34235/34236) display with title and hashtags
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 16:30:48 +08:00
Cody Tseng
b00ff341c8
feat: add schemata schema validation tests (#689)
Co-authored-by: alltheseas <alltheseas@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: alltheseas <64376233+alltheseas@users.noreply.github.com>
2026-04-04 15:18:04 +08:00
codytseng
234010c385 feat: add support for displaying kind 7 and kind 17 reaction events
Reactions now render with a large emoji (matching emoji-only note sizing)
and a "reacted to" preview pill linking to the target event, following
the same pattern as comment parent previews.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:56:04 +08:00
codytseng
5596e5eb7b fix: HTTP avatar image rendering issue 2026-03-28 15:18:50 +08:00
codytseng
e4a61740c5 fix: 🐛 2026-03-27 10:15:42 +08:00
codytseng
e80474099e fix: improve markdown detection and fix line spacing in embedded notes
Count total occurrences of medium signals in containsMarkdown instead of
only distinct types, so repeated patterns like multiple list items
correctly trigger markdown rendering. Add whitespace-normal to
MarkdownContent to prevent inherited whitespace-pre-wrap from parent
note content causing inconsistent line spacing in embedded notes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:02:00 +08:00
Max Blake
c7eef9fa48
feat: update pl.ts (#763)
A small stylistic amendment
2026-03-22 19:25:27 +08:00
codytseng
3b4a2ba2d3 feat: add allow insecure connections toggle in system settings
Block ws:// relay connections and http:// resource loading by default
to prevent browser mixed content warnings. When blocked, resources
show clickable URL links instead of error placeholders so users can
open them manually.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:12:09 +08:00
codytseng
c9bd7ca7d7 feat: display larger emojis for emoji-only notes and remove auto-space after custom emoji insertion
Show emojis at a larger size when a note contains only emojis (≤3), similar to Telegram. Also remove the automatic space inserted after custom emoji in the post editor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:31:24 +08:00
codytseng
1c3d58f490 fix: include emoji event stores in IndexedDB cleanup
The userEmojiListEvents and emojiSetEvents stores were not included in
the cleanUp() method, causing their cached data to never expire. Add
both stores with a 7-day expiration period.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:12:44 +08:00
codytseng
6cca3969ce feat: add explicit protected event toggle in post editor
Add a Switch control next to the relay selector for users to explicitly
enable/disable NIP-70 protected events. Auto-enables when relay
conditions suggest it (no optimal relays), but respects user override.
Includes a help popover explaining protected events with a note that
not all relays support them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 23:03:56 +08:00
codytseng
bd6340bbc7 feat: add protected badge for NIP-70 events
Display a subtle green "Protected" badge next to the username for
events with the `-` tag (NIP-70), indicating restricted distribution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:27:11 +08:00
codytseng
67f308e47f fix: stop YouTube mute-check interval when player is destroyed
The setInterval polling playerRef.current.isMuted() continued running
after the YouTube player was destroyed, causing repeated TypeErrors.
Now the interval self-clears when it detects the player is invalid.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 22:08:51 +08:00
codytseng
cd86b3aac5 fix: deduplicate stored events against fetched events in notifications
storedEvents from IndexedDB could contain the same event IDs as the
fetched events, causing duplicate notifications to appear. Use the
shared idSet to filter storedEvents so each event ID appears only once.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:15:41 +08:00
codytseng
e5e0918c93 fix: always mount popover backdrop portal to prevent remount issues
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 13:33:27 +08:00
codytseng
330152fd5c fix: normalize Unicode in local user search for special characters
Apply NFKD normalization to both indexed text and search queries so
that stylized Unicode characters (e.g. 𝚋𝚊𝚝𝚜𝚒𝚚) are decomposed to
their ASCII equivalents and can be matched by search.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 13:21:13 +08:00
codytseng
3576a11595 fix: prevent relay description text overflow on mobile
Use overflow-wrap: anywhere instead of break-words so long URLs
break properly without splitting normal words mid-character.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 13:16:34 +08:00
codytseng
aae8fc2f17 feat: add customizable search relays setting
Replace hardcoded SEARCHABLE_RELAY_URLS with user-configurable search
relays stored in localStorage. Add SearchRelaysSetting UI in System
settings page with add/remove/reset functionality.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:19:47 +08:00
codytseng
7be7b30d52 fix: skip fayan search when input is a hex ID or bech32 ID
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:25:29 +08:00
codytseng
f4dbd3c843 fix: handle nprofile type in NostrNode for markdown embedded mentions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:18:15 +08:00
robos
071c740145
feat: add Silent Payment (BIP 352) support to kind 0 profiles (#758)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: BoltTouring <BoltTouring@users.noreply.github.com>
Co-authored-by: Tanjiro <claude@tricycle.cc>
2026-03-09 10:16:08 +08:00
codytseng
4c144c3da1 feat: support custom emoji, hashtag, invoice, YouTube/X embeds in markdown
Add remarkInlineContent plugin to detect hashtags, custom emojis, and
lightning invoices in text nodes. Handle YouTube/X URLs in the link
component. Fix bug where a text node fully matching a single pattern
was not replaced due to segments.length === 1 check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:15:27 +08:00
codytseng
6f779e8b24 fix: detect markdown image syntax ![alt](url) as strong signal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:57:39 +08:00
codytseng
cc1aa7f989 feat: add markdown rendering support for Content component
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>
2026-03-04 10:49:18 +08:00
codytseng
fc8a160d9a fix: prevent bunker reconnection from blocking app startup
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>
2026-02-26 23:36:42 +08:00
codytseng
da751fd73c fix: resolve duplicate notifications in notification center
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>
2026-02-26 22:34:39 +08:00
The Daniel 🖖
d361ac60ab
fix: preserve line breaks in longform article summaries (#756)
Co-authored-by: The Daniel <dmnyc@users.noreply.github.com>
2026-02-23 12:44:00 +08:00
codytseng
481603d0e8 feat: add video loop playback setting
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>
2026-02-18 13:55:53 +08:00
Cody Tseng
ae8a534103
fix: show 'Encrypted direct messages not supported' for kind 4 events (#754)
* 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>
2026-02-18 13:43:19 +08:00
codytseng
2fbbe6ce1d fix: allow multiple YouTube embeds to render in a single note
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>
2026-02-09 22:30:10 +08:00
codytseng
2b97adfdca feat: support navigating to primary pages via URL query parameter
Allow users to open a specific primary page by visiting /?page=explore,
/?page=settings, etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:11:26 +08:00
codytseng
71dc0bb4fc fix: prevent horizontal overflow of relay tags
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>
2026-02-09 22:02:01 +08:00
codytseng
244dda807b feat: add copy note content option and migrate AGENTS.md to CLAUDE.md
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>
2026-02-09 21:56:32 +08:00
ClarkQAQ
3196c43644
feat: support audio file uploads via clipboard in post editor (#743) 2026-02-04 10:50:46 +08:00
codytseng
942c9a7d12 💨 2026-01-31 17:56:30 +08:00
Cody Tseng
ed8a22d5bc
feat: community mode (#738)
Co-authored-by: CXPLAY <62034099+cxplay@users.noreply.github.com>
2026-01-24 00:09:10 +08:00
The Daniel 🖖
686b1f9998
feat: use jumble.social share links for notes (#737)
Co-authored-by: The Daniel <dmnyc@users.noreply.github.com>
2026-01-23 22:05:06 +08:00
codytseng
e490407dd5 chore: format 2026-01-22 22:28:07 +08:00
codytseng
4bd4141b54 chore: remove something 2026-01-22 22:24:31 +08:00
codytseng
2dd4e866d2 chore: adjust padding for tab indicator and tab items 2026-01-20 23:17:06 +08:00
codytseng
8aca9efe68 chore: adjust sidebar toggle button position 2026-01-20 22:54:40 +08:00
codytseng
2cd1ae481b feat: support hiding indirect notifications 2026-01-20 22:47:42 +08:00