Ce site est une application Next.js en vingt-deux langues dont la construction échoue — sans avertissement — lorsqu’une page est manquante dans le plan du site, qu’une clé de traduction ne se résout pas, qu’un lien interne provoquerait un chargement complet de la page, qu’une animation d’entrée est assez lente pour être lue comme un stand, ou qu’un prix indiqué ne peut pas être vérifié par rapport au catalogue en direct.
| Mesure | Valeur | Source | Mesurées |
|---|---|---|---|
| Automated guards that fail the build | 17 | scripts/check-*.ts and scripts/check-*.mjs in the marketing site repository | |
| Translation key literals verified against the dictionary at build time | 1,557 across 470 files | npm run guard:i18n output | |
| Files checked for locale-aware navigation and animation budget | 294 | npm run guard:navigation output | |
| Languages served | 22 | messages/*.json in the marketing site repository | |
| Maximum permitted entrance animation duration | 0.3s, with per-item delay capped at 0.15s | scripts/check-client-navigation.mjs | |
| Programmatic content pages generated from typed data | 132 (37 industries, 45 integrations, 9 comparisons, 41 glossary terms) | app/lib collection directories |
Quel bâtiment il nous a appris
Toutes les agences disent que leurs sites sont rapides et bien construits. L’affirmation est infalsifiable au point de vente, c’est pourquoi elle est faite si librement. On préfère être vérifiable : ouvrir les outils de développement, faire un audit, lire le sitemap, changer de langue, inspecter les données structurées.
Ce qui fait qu'il reste bon n'est pas le soin, c'est l'application. Le soin dégrade; la sixième personne à toucher une base de code ne connaît pas les règles et aucune quantité de documentation ne corrige cela. Les règles sont donc exécutables. Dix-sept scripts de garde s'exécutent avant que l'image du conteneur ne soit construite, et une erreur arrête le déploiement. Un gardien parcourt les dossiers de route et échoue si une page existe qui ne liste pas de sitemap — donc une page ne peut pas être lancée tranquillement et ne jamais être soumise à un moteur de recherche. Un autre analyse les liens internes qui ne sont pas sensibles aux paramètres régionaux, car l'un d'entre eux dans un pied de page partagé provoquait un rechargement complet du document sur chaque page du site.
Auparavant, les pages présentaient des dizaines d’éléments à opacité nulle et les fondussaient en mode montage, avec un délai multiplié par l’index – de sorte que la dixième carte d’une liste arrivait plus d’une seconde et demie après le clic. Le réseau n’a jamais été le problème ; c’est l’animation qui décidait quand la page semblait prête. Le garde limite désormais la durée d’entrée et le délai par élément, et exempte les boucles ambiantes. Rien de tout cela n’apparaît dans une compilation, un contrôle de type ou une exécution de lint.
Une page dont la copie n'a pas été traduite dans une langue est affichée en anglais sous le préfixe de cette langue, pointe sa balise canonique vers l'original anglais et est délibérément exclue du sitemap de cette langue — parce que la soumettre la classerait dans la console de recherche comme un doublon qui ne peut pas être indexé. La règle est calculée à partir du dictionnaire lui-même : une langue est considérée comme traduite pour une section seulement si elle contient au moins quatre-vingt-dix pour cent des chaînes de cette section et moins de trente pour cent d'entre elles sont identiques en octets à l'anglais, ce qui nous permet de détecter un fournisseur de traduction qui fait écho à la source.
Construit avec
- Next.js
- React
- TypeScript
- Tailwind CSS
- next-intl
- Content Security Policy
- Trusted Types
Ce qui nous qualifie
Dites-nous ce que vous essayez de faire
Une courte conversation est généralement suffisante pour savoir si nous sommes les bonnes personnes, si nous ne le sommes pas, nous le dirons et vous indiquerons quelque part mieux.
