0f630fc9e8
Replace the custom batching layer with Agora's proven approach: 1. Fast path: pool.query() races all relays via EOSE timeout 2. Losers bracket: if pool returns empty, query each relay individually and resolve on the first hit The useAuthors batch hook in Feed.tsx still prefetches profiles in bulk, seeding the cache. Individual useAuthor calls hit cache first (5min staleTime) and only miss for uncached pubkeys. Keep the stats batching (useEventStats) since that genuinely reduces 2N REQs to 2 total per flush window. Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>