Aller au contenu

Étude de casPORTFOLIO.SYS2026

Portfolio, cockpit interactif

Un site conçu comme une démonstration vivante : les bonnes pratiques d'ingénierie tournent en production autour du visiteur.

  • 3languesEN • FR • ZH
  • CSPstrictenonce • strict-dynamic
  • 8pages

[01]Défi et contexte

Ce site est mon projet le plus abouti. Je l'ai conçu, développé et je l'exploite moi-même, du code jusqu'au déploiement sur un VPS Docker. Plutôt que de décrire des bonnes pratiques dans un CV, je les fais tourner en production et je les rends observables.

Un portfolio statique affirme des compétences sans rien prouver. Le défi : un site dont la sécurité, la qualité de livraison et l'architecture temps réel se constatent directement dans l'interface, et que je maintiens en conditions réelles.

[02]Trois familles de bonnes pratiques

Sécurité

  • CSP stricte avec nonce et strict-dynamic
  • Défi signé côté serveur
  • Réseau socket-proxy isolé
  • Audit des dépendances en CI

Le navigateur n'exécute que les scripts portant le nonce généré par le serveur (strict-dynamic), sans aucun script en ligne. Le formulaire de contact exige la résolution d'un défi signé côté serveur. L'accès au démon Docker passe par un proxy de socket sur un réseau isolé, et les dépendances sont auditées dans la CI.

Qualité & livraison

  • Tests Vitest et E2E Playwright
  • Typecheck en CI
  • Déploiement automatisé par webhook HMAC sur VPS Docker
  • Prérendu SSR multilingue (FR/EN/ZH)

Les tests unitaires Vitest et les tests de bout en bout Playwright (Firefox) tournent en CI, avec le typecheck et l'audit des dépendances. Le déploiement est automatisé par un webhook signé HMAC vers un VPS Docker. Les pages sont prérendues côté serveur en trois langues (FR, EN, ZH).

Architecture temps réel

  • Simulations en Web Worker / OffscreenCanvas
  • Bus d'événements vers l'IA Overseer (NVIDIA NIM)
  • Agrégateur audio multi-API

Les deux simulations (mini-jeux) tournent dans un Web Worker avec OffscreenCanvas, hors du thread principal. Un bus d'événements transmet leur activité à l'IA Overseer (NVIDIA NIM), qui la commente en direct dans le terminal. Le lecteur audio agrège plusieurs API (détails plus bas).

[03]Les preuves dans le cockpit

Plutôt que de recopier ces éléments ici, je renvoie vers les modules réels du cockpit. Sur la page d'accueil, chaque repère de la carte Portfolio illumine le module correspondant.

Captures de l'accueil en anglais, prises sur une copie locale du site avec des données de démonstration.

  • SYS.NOEUD_LIAISON (colonne droite) : le numéro et l'âge du build réellement déployé, remontés par le pipeline CI/CD.
    Capture du module SYS.UPLINK_NODE (SYS.NOEUD_LIAISON) : état du déploiement en ligne, version du build, âge du build et dérive synchronisée, avec des données de démonstration.
    SYS.UPLINK_NODE
  • Terminal Overseer : l'IA reçoit les événements des deux jeux (échecs de simulation, prise de contrôle manuelle) et les commente en direct.
    Capture du terminal de l'Overseer : un message de l'IA horodaté dans le journal.
    TERMINAL : OVERSEER_AI
  • THREAT_INTELLIGENCE_NODE : flux de CVE en temps réel (GitHub Advisories, NVD).
    Capture du module CVE_WATCH : synthèse du flux de CVE, dernière alerte et quatre alertes précédentes, avec des données de démonstration.
    CVE_WATCH
  • NAV.MAP (rail gauche) : un altimètre de la page d'accueil, indicateur passif de la section en cours.
    Capture de NAV.MAP, le repère de position dans la page du rail gauche : échelle graduée avec les six sections de l'accueil.
    NAV
  • Lecteur audio : voir la section suivante.
Voir les modules sur l'accueil

[04]Ingénierie audio

Le lecteur est une radio synchronisée par le serveur : chaque visiteur reçoit la piste en cours et la position de lecture calculées à partir de l'horloge du serveur, avec des liens de lecture signés et limités dans le temps. Deux éléments audio se relaient pour enchaîner les pistes sans coupure.

Les pochettes et les liens sont retrouvés en interrogeant en parallèle les API iTunes et Deezer, avec en complément un lien de recherche YouTube. Les résultats sont notés selon la correspondance du titre et de l'artiste, et seul le meilleur est retenu au-dessus d'un seuil de confiance.

[05]Résultats et limites

Résultats

  • Le numéro et l'âge du build affichés dans le cockpit proviennent de la télémétrie du pipeline CI/CD, pas d'un texte écrit à la main.
  • La topologie complète (flux utilisateur, CI/CD, sécurité) est détaillée sur la page Architecture.
  • Le site est servi en trois langues avec prérendu SSR, sous une CSP stricte sans script en ligne.

Limites

  • Le code source est privé : le dépôt est couplé à la chaîne CI/CD qui déploie le serveur. Je le présente volontiers en entretien, avec toutes les décisions qui le sous-tendent.
  • Le cockpit est pensé pour grand écran. Sur petit écran, les colonnes latérales se replient ou se masquent, et les repères renvoient alors vers la page Architecture.
// Projet suivantOrgan, gestion de projet collaborativeFORMAT : FLUX EXTERNE INTERCEPTÉ

Parlons-en

Une question sur ce travail, ou envie d'en voir plus ? Écrivez-moi.

Me contacter