grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
57
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: reduce redundant API calls and service worker noise

- SuggestedFollows: stabilize query key to prevent triple-fetch during
auth hydration
- Profile: defer favorites query until favorites tab is active
- Service worker: skip XRPC intercepting (no benefit from caching API)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+8 -5
+5 -3
app/lib/components/organisms/SuggestedFollows.svelte
··· 18 18 let dismissedDids = $state<Set<string>>(new Set()) 19 19 let followedDids = $state<Set<string>>(new Set()) 20 20 21 + const viewerDid = $derived($viewer?.did) 22 + 21 23 const suggestions = createQuery(() => ({ 22 - queryKey: ['suggestedFollows', $viewer?.did], 23 - queryFn: () => callXrpc('social.grain.unspecced.getSuggestedFollows', { actor: $viewer!.did, limit: 10 }), 24 - enabled: !!$viewer?.did, 24 + queryKey: ['suggestedFollows'], 25 + queryFn: () => callXrpc('social.grain.unspecced.getSuggestedFollows', { actor: viewerDid!, limit: 10 }), 26 + enabled: !!viewerDid, 25 27 staleTime: 5 * 60_000, 26 28 })) 27 29
+1 -1
app/routes/profile/[did]/+page.svelte
··· 52 52 const feedItems = $derived(feed.data?.pages.flatMap((p) => p.items ?? []) ?? []) 53 53 const favorites = createInfiniteQuery(() => ({ 54 54 ...actorFavoritesInfiniteQuery(did), 55 - enabled: isOwnProfile, 55 + enabled: isOwnProfile && viewMode === 'favorites', 56 56 })) 57 57 const favoriteItems = $derived(favorites.data?.pages.flatMap((p) => p.items ?? []) ?? []) 58 58 const stories = createQuery(() => storiesQuery(did))
+2 -1
app/service-worker.js
··· 28 28 29 29 const url = new URL(event.request.url); 30 30 31 - // Skip cross-origin requests 31 + // Skip cross-origin requests and API calls 32 32 if (url.origin !== self.location.origin) return; 33 + if (url.pathname.startsWith("/xrpc/")) return; 33 34 34 35 // For navigation requests, try network first (so new deploys are picked up) 35 36 if (event.request.mode === "navigate") {