Difficulty: Advanced | Type: Performance
Background: This is a Next.js 14 App Router app, which supports React Server Components, streaming, and Suspense boundaries for progressive rendering.
Problem: If the member dashboard currently fetches membership/profile/resource data entirely client-side after hydration, first-load performance suffers (extra client-server round trips) compared to what App Router's streaming SSR could provide.
Expected Outcome: Non-wallet-dependent initial data (e.g. community info, public resource listing) is server-rendered/streamed, while wallet-dependent data (membership status for the connected address) hydrates client-side, with appropriate Suspense boundaries so the page shell renders immediately.
Suggested Implementation: Convert applicable dashboard sub-sections to Server Components fetching directly from the live API (server-side, avoiding CORS/client bundle cost) where they don't depend on the connected wallet, wrap wallet-dependent sections in Suspense with the skeletons from #1, and measure the before/after with Next.js's built-in performance tooling or Lighthouse.
Acceptance Criteria:
- Community/public resource sections render via SSR/streaming without waiting on wallet connection.
- Wallet-dependent sections still hydrate correctly client-side once connected.
- Measured improvement in Largest Contentful Paint / Time to First Byte, documented in the PR.
Likely Affected Files/Directories: app/(member)/*, app/layout.tsx, lib/api/live.ts
Labels: performance, architecture, GrantFox OSS, Maybe Rewarded, Official Campaign | FWC26
Difficulty: Advanced | Type: Performance
Background: This is a Next.js 14 App Router app, which supports React Server Components, streaming, and
Suspenseboundaries for progressive rendering.Problem: If the member dashboard currently fetches membership/profile/resource data entirely client-side after hydration, first-load performance suffers (extra client-server round trips) compared to what App Router's streaming SSR could provide.
Expected Outcome: Non-wallet-dependent initial data (e.g. community info, public resource listing) is server-rendered/streamed, while wallet-dependent data (membership status for the connected address) hydrates client-side, with appropriate
Suspenseboundaries so the page shell renders immediately.Suggested Implementation: Convert applicable dashboard sub-sections to Server Components fetching directly from the live API (server-side, avoiding CORS/client bundle cost) where they don't depend on the connected wallet, wrap wallet-dependent sections in
Suspensewith the skeletons from #1, and measure the before/after with Next.js's built-in performance tooling or Lighthouse.Acceptance Criteria:
Likely Affected Files/Directories:
app/(member)/*,app/layout.tsx,lib/api/live.tsLabels:
performance,architecture,GrantFox OSS,Maybe Rewarded,Official Campaign | FWC26