Aller au contenu principal
William Stoops

Les coulisses du site

Ce site fait partie de mon dossier autant que son contenu. Son code, ses tests et ses décisions sont publics : voici comment il est construit, et ce qui l’empêche de se dégrader.

Voir le code sur GitHub (nouvel onglet)

Mesuré à l’instant, dans votre navigateur

Ces chiffres ne viennent pas d’un laboratoire : votre navigateur les a mesurés en chargeant ce site.

Premier affichage
Mesure en cours
Plus grand élément affiché
Mesure en cours
Seuil de la CI : 2 000 ms
Décalage de la mise en page
Mesure en cours
Seuil de la CI : 0,050
JavaScript téléchargé, compressé
Mesure en cours
Fichiers demandés
Mesure en cours

Ce que la CI refuse

Chaque modification passe par une pull request, et la CI la bloque si l’un de ces contrôles échoue.

  • Un type approximatif

    TypeScript strict : aucun « any », aucun « unknown », aucune assertion de type. Ce qui entre de l’extérieur (adresse, stockage, formulaire) passe par un schéma Zod.

  • Un avertissement

    Oxlint puis ESLint avec le typage, sans un seul avertissement. L’architecture en features et le sens des imports sont imposés par le lint.

  • Du code mort

    Knip sur tout le dépôt, puis sur le seul code livré : aucun fichier, export ou dépendance inutile.

  • Une régression

    Tests unitaires dans Node, composants dans un vrai Chromium, parcours Playwright sur 5 appareils. Au moins 90 % des lignes et 85 % des branches couvertes.

  • Une barrière d’accessibilité

    axe sur chaque page, dans les deux thèmes (WCAG 2.2 AA), et un score Lighthouse d’accessibilité de 100.

  • Du poids en trop

    JavaScript initial sous 125 Ko et CSS sous 15 Ko, compressés. Lighthouse : performance d’au moins 95, plus grand affichage sous 2 s, blocage sous 150 ms.

Les décisions

35 décisions d’architecture, chacune avec son contexte, son choix et les alternatives écartées. Parmi elles :

  • pré-rendre chaque page au build, pour que le contenu s’affiche sans attendre le JavaScript ;
  • animer en CSS natif, sur le compositeur, sans bibliothèque ;
  • mettre la langue dans l’adresse, une page par langue ;
  • faire la course des deux cycles de calcul à l’échelle, plutôt qu’un faux calcul.

Lire les décisions sur GitHub (nouvel onglet)