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');