Personnel / Web interactifProjet personnel

Portfolio spatial interactif

Portfolio bilingue en Next.js réunissant une scène WebGL partagée, une navigation orbitale pilotée par le scroll, des matériaux planétaires procéduraux et une interface sémantique accessible.

Le portfolio en mode sombre sur ordinateur, à côté de la section projets en mode clair sur téléphone.

Le portfolio en mode sombre sur ordinateur, à côté de la section projets en mode clair sur téléphone.

Technologies

  • Next.js
  • React
  • TypeScript
  • Three.js
  • React Three Fiber
  • Playwright
  • Node.js

Ce que j’ai développé

  • Canvas WebGL partagé
  • Navigation orbitale pilotée par le scroll
  • Textures planétaires procédurales
  • Alternatives clavier et tactile
  • Contenus et routes localisés
  • Thèmes clair et sombre persistants
  • Gestion responsive du DPR

Contexte

Ce portfolio est une application Next.js bilingue dont les quatre destinations de l’accueil partagent un même système de navigation spatiale et mènent vers des études de cas localisées.

Problème

L’interface doit garder les contenus longs lisibles tandis qu’une scène 3D persistante donne un monde distinct à chaque destination et suit la page sans prendre le contrôle du défilement.

Implémentation

J’ai développé le portfolio en React et TypeScript, dont le carrousel de projets, les routes localisées, la persistance du thème et un canvas React Three Fiber partagé entre les quatre destinations principales.

Les planètes utilisent des textures de couleur, relief, normales et rugosité générées en amont, avec des détails de surface instanciés. Leur position orbitale suit la progression du document, tandis que leur lente rotation axiale dépend du temps écoulé entre les images.

Architecture technique

Les sections HTML sémantiques restent la source de navigation et de contenu. Un contexte de destination mesure leurs ancres et transforme le scroll en progression orbitale ; le contrôleur WebGL reprojette ensuite les positions des mondes dans le DOM pour fournir des cibles d’interaction accessibles.

Décisions d’ingénierie

Un canvas unique évite de multiplier les contextes WebGL. Les ressources procédurales sont générées hors exécution, le DPR responsive est plafonné et le mode de réduction des animations supprime le mouvement continu tout en conservant le contenu et la navigation.

Difficultés

Le principal défi consistait à garder les planètes projetées visuellement au premier plan sur petit écran sans bloquer les liens ni le texte. Le canvas ignore les entrées de pointeur et des contrôles sémantiques séparés assurent l’accès au clavier et au tactile.

Ce que j’ai appris

L’implémentation montre comment les mesures de scroll, la projection WebGL, les calques CSS et le HTML accessible peuvent fonctionner ensemble sans faire de la scène 3D l’unique moyen d’utiliser le site.

Preuve visuelle

Section projets en mode clair sur ordinateur, avec le carrousel spatial et les planètes en orbite.
Section à propos en mode sombre sur ordinateur.
Trois écrans du portfolio sur téléphone : accueil en mode sombre, projets en mode clair, à propos en mode sombre.