- EN: Move the top-level page to a Server Component and isolate
useStatsin a small Client Component so only the live counters hydrate; FR: Passez la page principale en Server Component et isolezuseStatsdans un petit Client Component pour n'hydrater que les compteurs temps reel. - EN: Lazy-load heavy UI blocks like
CumulativeStatsTableandSnapshotStatsTablewithnext/dynamicand a lightweight skeleton to reduce initial JS; FR: Chargez paresseusementCumulativeStatsTableetSnapshotStatsTableavecnext/dynamicet un skeleton leger pour reduire le JS initial. - EN: Use Framer Motion
LazyMotionwithdomAnimationand avoid importing the full motion bundle on the first paint; FR: UtilisezLazyMotionavecdomAnimationet evitez d'importer tout Framer Motion au premier rendu. - EN: Defer the 100ms update loop until after first paint or idle time (
requestIdleCallback) to improve LCP and TTI; FR: Differez la boucle de mise a jour 100ms apres le premier rendu ou en idle (requestIdleCallback) pour ameliorer LCP et TTI. - EN: Reduce hydration work by rendering static headings, descriptions, and layout server-side and keeping only numbers client-side; FR: Reduisez l'hydratation en rendant titres, descriptions et layout cote serveur et en gardant seulement les nombres cote client.
- EN: Remove
headers()usage fromsrc/app/layout.tsxso the root layout can be static and cached, and setlanginsrc/app/[locale]/layout.tsx; FR: Retirezheaders()danssrc/app/layout.tsxpour rendre le layout racine statique et cache, puis definissezlangdanssrc/app/[locale]/layout.tsx. - EN: Enable
experimental.optimizePackageImportsinnext.config.jsforlucide-react,@tanstack/react-table, andframer-motionto trim bundle size; FR: Activezexperimental.optimizePackageImportsdansnext.config.jspourlucide-react,@tanstack/react-tableetframer-motionafin de reduire le bundle. - EN: Virtualize long tables (TanStack Table + windowing) so only visible rows render and hydrate; FR: Virtualisez les longues tables (TanStack Table + windowing) pour ne rendre et hydrater que les lignes visibles.
- EN: Split per-locale message files and load only the current locale namespace to cut JSON payload size; FR: Decoupez les fichiers de messages par locale et chargez uniquement le namespace courant pour reduire la taille JSON.
- EN: Run
pnpm next buildwith the Next.js analyzer and remove unused dependencies (ex: Radix packages not used on the landing view); FR: Lancezpnpm next buildavec l analyzer Next.js et supprimez les dependances inutiles (ex: packages Radix non utilises au premier rendu).