## Contexte ESLint signalait un `max-lines` sur `pages/author/[pubkey].tsx` (fichier trop long). Le reste du projet passait. ## Root cause La page regroupait dans un seul fichier : - logique de chargement (hook + requêtes) - composants de présentation (header, sponsoring, liste de séries) - parsing de l’URL (compatibilité ancien format vs hash) Ce regroupement dépassait la limite `max-lines` (250). ## Correctif Refactor purement structurel (sans changement fonctionnel) : - extraction de la logique et des sous-composants dans `components/authorPage/*` - remplacement de `pages/author/[pubkey].tsx` par un simple re-export du composant page ## Pages / fichiers affectés - `pages/author/[pubkey].tsx` - `components/authorPage/AuthorPage.tsx` - `components/authorPage/AuthorPageContent.tsx` - `components/authorPage/AuthorPageHeader.tsx` - `components/authorPage/SponsoringSummary.tsx` - `components/authorPage/SeriesList.tsx` - `components/authorPage/useAuthorData.ts` - `components/authorPage/resolveAuthorHashIdOrPubkey.ts` - `pages/api/nip95-upload.ts` (route API NIP-95 upload; impl déplacée vers `lib/api/nip95-upload/*` pour éviter des routes Next involontaires) - `lib/metadataExtractor/reviewTip.ts` (validation stricte des champs requis) - `lib/paymentNotes/sponsoring.ts` (exactOptionalPropertyTypes) - `components/relayManager/RelayCard.tsx` (typage lastSyncDate) - `lib/keyManagementTwoLevel/crypto.ts` (BufferSource) ## Vérification - `npm run lint` (doit sortir en succès, sans erreur `max-lines` sur `pages/author/[pubkey].tsx`) - `npm run type-check` (doit sortir en succès) ## Risques / régressions possibles - erreurs d’import/chemins suite au déplacement de code - oubli d’un export explicite ou d’un type de retour (règles TypeScript/ESLint strictes)