"These are three correctness guarantees, not features: right for every body (a11y), every locale (i18n), every refactor (TS). At 90 engineers you can't review your way there — you encode them into the platform: design system, shared i18n layer + lint, strict tsconfig + Zod + CI gates."
Intl.NumberFormat (currency!), DateTimeFormat, RelativeTimeFormat, ListFormat, PluralRules, Segmenter. Construct(locale,opts)→format(). Never hand-roll.{n, plural, one{# hotel} other{# hotels}}. Never concatenate sentences.dir="rtl" + CSS logical properties (margin-inline-start) → browser mirrors layout. No parallel RTL stylesheet.Intl.Segmenter, not .split(' '). (Big for SEA.)/th/…) + SSR + hreflang alternates; lazy-load only active locale bundle.alt/label) → ARIA only for genuine gaps.<button> = focusable + key-operable + announced, free. <div onClick> = none of it.outline:none), focus management + trap on modal, move/announce focus on SPA route change.strictNullChecks) catches the undefined is not a function class. any = type system off → prefer unknown + narrow.as User is an unchecked lie. Validate at every trust boundary (network/storage/URL/postMessage) with Zod .parse(); z.infer the type from the schema (one source of truth).| Guarantee | Lives in… |
|---|---|
| a11y | Accessible-by-default design system (Radix/React Aria) + axe + visual-regression CI |
| i18n | Shared t()/<FormattedMessage> over Intl+ICU, extraction pipeline, lint fails on hard-coded string |
| TS | Strict shared tsconfig, contracts package, project refs, Zod at boundaries — all gated in CI |
as cast validates nothing. Zod at the boundary.count + " hotels". Bakes in English grammar + one plural rule. ICU MessageFormat.margin-left. Breaks RTL. Logical properties + dir.Every body, every locale, every refactor. · Intl for format, ICU for plurals, logical CSS for direction, hreflang for SEO. · Semantic HTML before ARIA. · TS guards refactors (inside), Zod guards boundaries (edges) — you need both. · Encode the guarantee, don't review for it.