## Why Les routes principales souffrent de plusieurs problèmes de performance facilement corrigeables : N+1 sur `resolveCollaborator`, re-renders en cascade dans `useLive`, accumulation illimitée d'événements SSE, et absence de feedback visuel pendant les navigations. Ces quick wins peuvent être adressés indépendamment, sans refactoring architectural. ## What Changes - **Batch resolveCollaborator** : remplacer les appels séquentiels par un batch unique dans `session-queries.ts` (élimination N+1) - **Debounce router.refresh()** : ajouter un debounce ~300ms dans `useLive.ts` pour grouper les événements SSE simultanés - **Appel de cleanupOldEvents** : intégrer l'appel à `cleanupOldEvents` dans `createEvent` pour purger les vieux événements au fil de l'eau - **Ajout de `loading.tsx`** : ajouter des fichiers `loading.tsx` sur les routes `/sessions`, `/weather`, `/users` pour activer le streaming App Router - **Lazy-load des modals** : utiliser `next/dynamic` sur `ShareModal` et autres modals lourds pour réduire le bundle JS initial ## Capabilities ### New Capabilities - `perf-loading-states`: Feedback visuel de chargement sur les routes principales via `loading.tsx` ### Modified Capabilities - Aucune modification de spec existante — les changements sont purement implémentation/performance ## Impact - `src/services/session-queries.ts` — refactoring batch resolveCollaborator - `src/hooks/useLive.ts` — ajout debounce sur router.refresh - `src/services/session-share-events.ts` — appel cleanupOldEvents dans createEvent - `src/app/sessions/loading.tsx`, `src/app/weather/loading.tsx`, `src/app/users/loading.tsx` — nouveaux fichiers - Composants qui importent `ShareModal` — passage à import dynamique