Changelogs
Historique des évolutions LB'XMB.FR (site, bot Discord, forum, boutique, intégrations). Cette page est synchronisée avec le document interne de récapitulatif.
### Contexte
### Changements — Production
### Changements — PTB
### Changements — Dev (base isolée)
### Documentation
### Fichiers touchés
- web-prod en boucle de crash (5300+ restarts) : build Next.js absent dans .next-staging.
- ptb.lbxmb.fr routé vers le mauvais service (bloc nginx manquant).
- dev-web partageait la base lbxmb (prod) faute de .env.local.
- Fichiers critiques manquants dans web/ : next.config.js, layout.tsx, messages/en.json, composants layout.
- Correction TypeScript contributeurs dans resourceStructureManager.ts.
- Restauration next.config.js, layout.tsx, DeferredClientWidgets, UmamiScript, SiteWelcomeModal, messages/en.json.
- Build Next.js réussi ; copie .next → .next-staging pour server.js.
- web-prod redémarré : HTTP 200 local et HTTPS.
- Ajout bloc nginx ptb.lbxmb.fr → port 25583 dans nginx-lbxmb.fr.conf, déployé et rechargé.
- Création ptb-web/.env.local avec lbxmb_ptb / utilisateur lbxmb_ptb.
- HTTPS ptb.lbxmb.fr : 200.
- Création dev-web/.env.local : DB_NAME=lbxmb_dev, DB_USER=lbxmb_dev, NEXT_PUBLIC_ENV=development.
- Redémarrage web-dev ; base dev confirmée (3 users seed vs 124 en prod).
- Création docs/BOT-FONCTIONNALITES.md : inventaire complet commandes, événements, handlers, config /config, notes audit.
- web/src/lib/resourceStructureManager.ts
- web/next.config.js, web/src/app/layout.tsx, web/messages/en.json
- web/src/components/layout/DeferredClientWidgets.tsx
- web/src/components/analytics/UmamiScript.tsx, web/src/components/site/SiteWelcomeModal.tsx
- web/src/app/presentation/layout.tsx
- nginx-lbxmb.fr.conf
- dev-web/.env.local, ptb-web/.env.local
- dev-web/next.config.js, dev-web/src/app/layout.tsx
- docs/BOT-FONCTIONNALITES.md, docs/RECAP-TRAVAIL-COMMUNAUTE-2026-04.md
### Contexte
### Causes identifiées
### Changements
### Fichiers touchés
- Connexion Discord : retour sur le site sans session active.
- Langue navbar : invités ne voyaient pas le changement (cookie posé mais UI inchangée).
- web/.env.local absent : pas de DISCORD_CLIENT_* ni BETTER_AUTH_SECRET en prod.
- Callbacks OAuth (/api/auth/*) passaient par Anubis (risque de perte cookies Set-Cookie).
- LanguageSwitcher utilisait router.refresh() : next-intl ne recharge pas les messages serveur.
- Création web/.env.local (OAuth, BETTER_AUTH_URL=https://lbxmb.fr, secrets prod).
- Nginx : bypass Anubis pour location /api/auth/.
- auth.ts : cookies sécurisés en prod (useSecureCookies, sameSite: lax).
- LanguageSwitcher : rechargement page après POST /api/locale.
- Build + déploiement .next-staging, restart web-prod.
### Contexte
### Changements
### Impact
### Fichiers touchés
- Captcha Cap bloquant / peu fiable sur /login (double friction Anubis + modal Dialog).
- Fonds de page empilés à chaque navigation (plusieurs PageLightRaysBackdrop en portail document.body).
- Navigation perçue comme lente (WebGL dupliqué, pas de source unique couleurs).
- Captcha : Cap affiché inline sur /login (plus de modal) ; détection runtime isCapRequiredClient() ; bypass Anubis pour /login, /register, /verify.
- Background : PageBackgroundProvider + lib/page-backgrounds.ts — une seule instance LightRays, couleurs par route conservées (accueil #38bdf8, ressources #f97316, guides #22c55e, boutique #a855f7, support #eab308, dashboard #6366f1, cloud/mon-espace #0ea5e9, don #ec4899, donateurs #d946ef, download/checker #f472b6, modding #a855f7, donate/success #22c55e). Suppression des backdrops dupliqués par page.
### Contexte
### Changements
### Impact
### Fichiers touchés
- Navbar : demande d'effet pill au scroll (blur, arrondi, largeur réduite) comme référence fournie.
- Navigation privée : site inutilisable (404 /api/auth/me, SW absent, MISSING_MESSAGE: siteIntroduction (en), crash .map sur tips).
- Nouvelle page listant les domaines officiels LB'XMB.
- Header : effet scroll — hauteur header h-20 → h-[130px], pill rounded-[20px], bg-black/70 backdrop-blur-[30px], max-w-[1300px], marges latérales au scroll.
- /api/auth/me : route restaurée (manquante en prod) ; réponse 200 + { authenticated: false } pour invités.
- sw.js : ajout dans web/public/ ; enregistrement SW silencieux en nav privée (plus d'erreur bloquante).
- i18n EN : bloc siteIntroduction complet ; SiteIntroduction tolère tips non-tableau.
- useAuthMe : gestion 404/erreurs réseau sans crash (retry: false).
### Contexte
### Changements
### Fichiers touchés
- Background invisible en prod (-z-10 derrière body noir ; <main> opaques masquent les rayons).
- Scrollbar custom sans effet fade (native Firefox/Chrome par-dessus react-scrollbars-custom).
- PageLightRaysBackdrop : portail document.body + z-0 (aligné PTB).
- AppScrollShell : wrapper relative z-[1] au-dessus du fond.
- globals.css : masquage scrollbar native sur .scrollbars-scroller, scroller transparent.
- body : bg-[#020202].
- Retrait fonds opaques sur main guides / ressources fiche / download / checker.
- Backup : backups/web-prod-pre-bg-scrollbar-*.tar.gz.
- PageLightRaysBackdrop.tsx, PageBackgroundProvider.tsx, AppScrollShell.tsx, globals.css, layout.tsx
- Pages guides, ResourceDetailClient.tsx, download/page.tsx, checker/page.tsx
### Contexte
### Changements
### Impact
### Fichiers touchés
- Navbar : demande d'effet pill au scroll (blur, arrondi, largeur réduite) comme référence fournie.
- Navigation privée : site inutilisable (404 /api/auth/me, SW absent, MISSING_MESSAGE: siteIntroduction (en), crash .map sur tips).
- Nouvelle page listant les domaines officiels LB'XMB.
- Header : effet scroll — hauteur header h-20 → h-[130px], pill rounded-[20px], bg-black/70 backdrop-blur-[30px], max-w-[1300px], marges latérales au scroll.
- /api/auth/me : route restaurée (manquante en prod) ; réponse 200 + { authenticated: false } pour invités.
- sw.js : ajout dans web/public/ ; enregistrement SW silencieux en nav privée (plus d'erreur bloquante).
- i18n EN : bloc siteIntroduction complet ; SiteIntroduction tolère tips non-tableau.
- useAuthMe : gestion 404/erreurs réseau sans crash (retry: false).
### Contexte
### Changements
### Fichiers touchés
- Background invisible en prod (-z-10 derrière body noir ; <main> opaques masquent les rayons).
- Scrollbar custom sans effet fade (native Firefox/Chrome par-dessus react-scrollbars-custom).
- PageLightRaysBackdrop : portail document.body + z-0 (aligné PTB).
- AppScrollShell : wrapper relative z-[1] au-dessus du fond.
- globals.css : masquage scrollbar native sur .scrollbars-scroller, scroller transparent.
- body : bg-[#020202].
- Retrait fonds opaques sur main guides / ressources fiche / download / checker.
- Backup : backups/web-prod-pre-bg-scrollbar-*.tar.gz.
- PageLightRaysBackdrop.tsx, PageBackgroundProvider.tsx, AppScrollShell.tsx, globals.css, layout.tsx
- Pages guides, ResourceDetailClient.tsx, download/page.tsx, checker/page.tsx
### Contexte
### Changements
### Fichiers touchés
- Navbar ne se centrait pas au scroll : window.scrollY toujours 0 (scroll dans .scrollbars-scroller).
- Fond trop discret.
- AppScrollContext : scrollTop depuis CustomScrollbar ; Header écoute contexte + scroller direct.
- Header : pill centrée au scroll (mx-[30px], max-w-[1300px], rounded-[20px], h-[130px]).
- Fond : gradients CSS renforcés ; backdrop z-[1], contenu z-10, body isolate.
- AppScrollContext.tsx, custom-scrollbar.tsx, Header.tsx, AppScrollShell.tsx, light-rays-ambient-css.ts
### Contexte
### Changements
### Impact
### Fichiers touchés
- Navbar opaque (bg-black/70) au scroll alors que l'utilisateur veut rester transparent.
- Transition pill au centre trop sèche (booléen sans interpolation).
- Fond LightRays invisible sur tous les navigateurs (portail body z-[1] vs contenu z-10).
- Header : pill interpolée via scrollProgress (largeur, radius, hauteur 80→130 px) ; fond bg-white/[0.04] + backdrop-blur-[30px] ; marges mobile 16 px / desktop 60 px.
- PageLightRaysBackdrop : suppression portail ; fixed inset-0 -z-10 in-tree ; params LightRays alignés ref utilisateur (ogl, followMouse desktop only).
- AppScrollShell : retrait z-10 (empilement via body isolate + backdrop -z-10).
- light-rays-ambient-css : gradients renforcés sans backgroundColor opaque.
### Contexte
### Changements
### Impact
### Fichiers touchés
- Prod servait .next-staging obsolète (BUILD_ID 7thv16…) avec portail z-[1] — fond invisible malgré le fix local.
- deploy.sh absent ; build .next jamais recopié en staging après les changements.
- layout : wrapper .site-viewport (relative isolate) autour fond + contenu.
- PageLightRaysBackdrop : fixed inset-0 z-0 (plus de portail, plus de -z-10).
- AppScrollShell : relative z-[1] au-dessus du fond.
- Deploy : bun run build → rm -rf .next-staging && cp -a .next .next-staging → pm2 restart web-prod.
- Prod sert le build à jour ; rayons CSS + WebGL visibles derrière le contenu transparent.
- web/src/app/layout.tsx, PageLightRaysBackdrop.tsx, AppScrollShell.tsx, PageBackgroundProvider.tsx
- docs/RECAP-TRAVAIL-COMMUNAUTE-2026-04.md
### Contexte
### Changements
### Impact
### Fichiers touchés
- Après deploy : navbar transparente OK mais le recentrage au scroll + l'animation avaient disparu (détection de scroll reposant uniquement sur le contexte React useAppScrollTop, fragile).
- Fond toujours « invisible » côté user : halo trop concentré en haut + dépendance WebGL ; suspicion de cache client.
- Header : ré-ajout d'une détection de scroll directe et autonome (.scrollbars-scroller + window.scroll + event appscroll) dans un state local scrollY ; progression = max(scrollY, appScrollTop). Transitions complétées (width,margin,border-radius ajoutés). Pill toujours mx-auto.
- light-rays-ambient-css : fond renforcé — conic-gradient (faisceaux qui s'évasent depuis le haut-centre) + halos radiaux plus larges + backgroundColor #020202. Visible plein écran même sans WebGL.
- ServiceWorkerRegistration : APP_VERSION 2.1.6 → 2.2.0 (purge caches côté client au prochain chargement).
### Contexte
### Changements
### Impact
### Fichiers touchés
- Capture user : navbar « décroche » d'un coup au scroll (pas fluide) ; fond toujours quasi noir (juste un halo CSS à gauche, rayons WebGL absents).
- Cause navbar : interpolation style inline par event de scroll → saccades, pas de transition CSS réelle.
- Cause fond : rayons WebGL gated derrière prefers-reduced-motion → invisibles si l'option d'accessibilité est active (probable côté user). Le halo visible n'était que le gradient CSS latéral.
- Header : retour à la méthode de la référence — booléen navScrolled (scroll > 20) + transition-all duration-300 ease-in-out sur header + pill. Classes Tailwind (plus d'inline style interpolé) → détachement fluide vers la pill centrée. Hauteur 80→110 px. Mobile : w-[calc(100%-1.5rem)], desktop sm:w-[calc(100%-60px)], mx-auto. Suppression isDesktop/pillStyle/eased.
### Contexte / problème
### Changements appliqués
### Impact
### Fichiers touchés
- Les ressources s'affichaient dans la liste mais l'ouverture d'une fiche échouait.
- Console : XHRGET https://lbxmb.fr/api/resources/playstation-todex-payload?locale=fr [HTTP 404].
- Cause racine : la route API web/src/app/api/resources/[id]/route.ts (GET fiche par id/slug) était absente du projet web/ (seuls les sous-dossiers [id]/download, [id]/comments, [id]/revisions, [id]/console-transfer existaient). Next renvoyait donc 404 sur /api/resources/<slug>.
- Restauration du handler GET /api/resources/[id] depuis ptb-web (résolution par id numérique ou par slug généré depuis nom, overlay locale, structure.json, téléchargements, variantes, requis, guides, contributeurs, réseaux sociaux).
- Vérification préalable que toutes les dépendances @/lib/* existent dans web/ (db, resourceStructureManager, slug, content-locale, resource-locale, guide-links, resource-icon-format, resource-variant-paths, uploads-root, resource-contributors).
### Contexte / problème
### Changements appliqués
### Impact
### Fichiers touchés
- Plus de background LightRays sur /outils et /discord en prod.
- Cause : resolvePageBackground() ne renvoyait une config que pour les préfixes listés ; tout le reste tombait sur return null → aucun calque de fond. Depuis la centralisation du backdrop (suppression des backdrops par page), toute route non listée se retrouvait au fond noir.
- Titre hero « LA RÉFÉRENCE DU » rendu en gris sombre au lieu de blanc (MODDING censé rester bleu).
- Cause : .hero-title-lb / .hero-title-modding utilisent color: transparent + background-clip: text. Si le navigateur n'applique pas background-clip: text (compositing/contexte), le texte transparent laisse voir le fond sombre → texte « noir ». Le CSS source était pourtant correct (identique à la version qui marchait).
- lib/page-backgrounds.ts :
