KamoCRM

Ce site web

Une compilation qui refuse d'expédier une page qu'elle sait être incorrecte

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.

Chaque chiffre indique d'où il vient et quand il a été mesuré.
MesureValeurSourceMesurées
Automated guards that fail the build17scripts/check-*.ts and scripts/check-*.mjs in the marketing site repository
Translation key literals verified against the dictionary at build time1,557 across 470 filesnpm run guard:i18n output
Files checked for locale-aware navigation and animation budget294npm run guard:navigation output
Languages served22messages/*.json in the marketing site repository
Maximum permitted entrance animation duration0.3s, with per-item delay capped at 0.15sscripts/check-client-navigation.mjs
Programmatic content pages generated from typed data132 (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

Marketing site design and buildThe site your business is judged by, built like softwarePerformance engineeringCore Web Vitals on real devices, held by a budgetAccessibility engineeringWCAG conformance tested with a keyboard, not just a scannerTechnical SEOMaking a site legible to search engines, at the source

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.

Commencez une conversationJ'utilise déjà KamoCRMComment nous citons