This site is a Next.js application in twenty-two languages whose build fails — not warns — when a page is missing from the sitemap, a translation key does not resolve, an internal link would cause a full page load, an entrance animation is slow enough to read as a stall, or a quoted price cannot be verified against the live catalogue. You do not have to take our word for any of it.
| Measure | Value | Source | Measured |
|---|---|---|---|
| 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 | |
| Translated strings validated for punctuation and ICU syntax, in every language | 86,496 across 22 locales | npm run guard:punctuation output | |
| 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 |
What building it taught us
Every agency says its sites are fast and well-built. The claim is unfalsifiable at the point of sale, which is why it is made so freely. We would rather be checkable: open the developer tools, run an audit, read the sitemap, switch the language, inspect the structured data. The site is the argument.
What makes it stay good is not care, it is enforcement. Care degrades; the sixth person to touch a codebase does not know the rules and no amount of documentation fixes that. So the rules are executable. Seventeen guard scripts run before the container image is built, and a failure stops the deployment. One guard walks the route folders and fails if a page exists that no sitemap lists — so a page cannot be quietly launched and never submitted to a search engine. Another resolves every translation key literal in the source against the English dictionary. Another scans for internal links that are not locale-aware, because one of those in a shared footer was causing a full document reload on every page of the site.
The performance guard is the one most worth stealing. Pages here previously shipped dozens of elements at zero opacity and faded them in on mount, with the delay multiplied by index — so the tenth card in a list finished arriving more than a second and a half after the click. The network was never the problem; the animation was deciding when the page looked ready. The guard now caps entrance duration and per-item delay, and exempts genuinely ambient loops. Nothing about that shows up in a build, a type check or a lint run.
The internationalisation is stricter than most sites that claim it. A page whose copy has not actually been translated into a language is served in English under that language's prefix, points its canonical tag at the English original, and is deliberately withheld from that language's sitemap — because submitting it would file it in search console as a duplicate that cannot be indexed. The rule is computed from the dictionary itself: a language counts as translated for a section only when it carries at least ninety per cent of that section's strings and fewer than thirty per cent of them are byte-identical to the English, which is how we detect a translation provider quietly echoing the source back.
Built with
- Next.js
- React
- TypeScript
- Tailwind CSS
- next-intl
- Content Security Policy
- Trusted Types
What this qualifies us for
Tell us what you are trying to do
A short conversation is usually enough to tell whether we are the right people. If we are not, we will say so and point you somewhere better.