Description Replace the ad-hoc QueryClient instantiated inside App.tsx with a proper setup: create it once in main.tsx with sane defaults (staleTime, retry, refetchOnWindowFocus: false), and wrap <App /> in QueryClientProvider there. Add src/api/queryKeys.ts as the single source of truth for query keys, so every hook that touches the forecast cache uses the same key shape. Rationale The rubric requires TanStack Query for all server state. The current spike on dev creates a new QueryClient inside the component tree, which means it's recreated on every render and can't be reused by other hooks that need to read the same cache (e.g. batched city temperatures later).