From 7d37a5effd33cad7ba852a0adefb7a19f1210c6e Mon Sep 17 00:00:00 2001 From: "shakespeare.diy" Date: Sat, 25 Jul 2026 13:14:50 +0700 Subject: [PATCH] Make goskatespots.nostr1.com the top-priority catching relay - reqRouter now always queries the community relay (SKATE_RELAY) first, even when a user hasn't added it to their read list, so curated skate content takes priority in NPool's first-seen dedup ordering - eventRouter publishes to the catching relay first, then user write relays - Gated behind the existing useSkateRelay setting (default: true) Co-authored-by: shakespeare.diy --- src/components/NostrProvider.tsx | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/components/NostrProvider.tsx b/src/components/NostrProvider.tsx index f1e1dd3..633c2c7 100644 --- a/src/components/NostrProvider.tsx +++ b/src/components/NostrProvider.tsx @@ -57,14 +57,25 @@ const NostrProvider: React.FC = (props) => { .filter(r => r.read) .map(r => r.url); + // --- Community "catching" relay: top hierarchy --- + // goskatespots.nostr1.com is the app's curated, authoritative relay. + // It is ALWAYS queried first (even if a user hasn't added it to their + // read list), so curated skate content takes priority. Other relays act + // as supplementary sources for redundancy and reach. + if (useSkateRelay.current) { + routes.set(SKATE_RELAY, filters); + } + // Ensure we always have at least one relay - if (readRelays.length === 0) { + if (readRelays.length === 0 && routes.size === 0) { console.warn('[NostrProvider] No read relays configured, using defaults'); for (const relay of DEFAULT_RELAYS) { routes.set(relay.url, filters); } } else { for (const url of readRelays) { + // Skip re-adding the catching relay (already set above with priority) + if (url === SKATE_RELAY) continue; routes.set(url, filters); } } @@ -82,14 +93,19 @@ const NostrProvider: React.FC = (props) => { .filter(r => r.write) .map(r => r.url); - const allRelays = new Set(writeRelays); + const allRelays = new Set(); - // Include community relay if setting is enabled (default: true) - // This ensures skate content is published to the community relay for discoverability + // Catching relay first: publish curated skate content to the community + // relay as the top-priority write target for discoverability. if (useSkateRelay.current) { allRelays.add(SKATE_RELAY); } + // Then the user's own write relays for redundancy and reach. + for (const url of writeRelays) { + allRelays.add(url); + } + // Ensure we always have at least one relay if (allRelays.size === 0) { console.warn('No write relays configured, using defaults');