AKRIBIS GroupBrand
Digital system
3.4

Web standards

Proposed

What quality bar does every site meet?

Specification

  1. WCAG 2.2 AA is the floor on every surface (criterion 4). What a static check can see is checked on every build: lang on html, one h1 and no skipped heading level, one main and a skip link, alt on every image, a name or aria-hidden on every inline SVG, text on every link, a label and autocomplete on every control. Focus (the ring), target size (24 px) and reduced motion are the shape tokens' job; contrast is proven by the colour build.
  2. Addresses: every page under its language (/es/, /en/, /pt/), every segment translated, lowercase ASCII with hyphens and a trailing slash; the root redirects by Accept-Language with Spanish as the fallback; x-default points at the root. Old addresses redirect permanently.
  3. Languages: lang equals the page's language (es, en, pt); hreflang for the three plus x-default, absolute, the page itself included; a canonical that is the page's own address. Numbers, dates and units through Intl in the page's language (es-AR, pt-BR, en): decimal comma in Spanish and Portuguese, a thin space before the unit and the %.
  4. SEO on indexable sites: a title of 10 to 70 characters, a description of 30 to 160, og:title, og:description, og:url and og:image (the brand's profile picture at 1200 px unless the page has its own), Organization JSON-LD on the home page with AKRIBIS Group as parentOrganization, and a sitemap with every page. Brand is noindex while it is a draft and carries everything but the sitemap.
  5. Budgets per page, uncompressed: HTML 200 kB, CSS 80 kB, JS 150 kB, fonts 260 kB, at most three preloaded fonts; every image with width and height; fonts only from Brand, never from a font CDN; study sheets and marks as files, not inlined.
  6. Consent: no third-party script loads before consent; a script from an analytics or advertising host is gated (data-consent). The default is none: where nothing tracks, no cookie notice is needed. The one analytics without consent is Cloudflare's cookieless beacon.
  7. The checker (brand/src/check-site.ts) runs these rules over a built site, plus the anatomy's patterns for the site's kind, lists every violation and exits with an error; this site runs it in its tests on every build, with zero violations over 175 pages; every site runs it before deploying.
  8. Not static, still a rule: keyboard operation of every component, visible focus, nothing lost at 400 % zoom or 320 px, motion stopped under prefers-reduced-motion, forms announcing their errors. Checked by hand on every shared component when it is built.
  9. Three more rules (ADR-0031, ADR-0032): pages, every shared page exists in every language at its slug; headers, the site publishes the response-header baseline in _headers (X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Options); naming, no page writes a forbidden spelling in its text. The checker runs inside every site's build: the @akribis/site integration runs it over dist/ and one violation fails the build.

To re-reason

  • Browser checks (axe, computed contrast, keyboard) in continuous integration once the sites have it: today none has CI.
  • Images: formats (AVIF, WebP), srcset and the LCP's size; today no site uses astro:assets.
  • Migrating today's addresses (Spanish at the root, untranslated segments) to the grammar: a redirect table per site.

Evidence to audit

  • brand/standards.yaml · brand/src/check-site.ts · brand/test/site.test.ts (175 pages, 26 rules, 0 violations after the fixes this decision caused: canonical, descriptions, x-default, heading levels, inlined sheets)
  • Audit (2026-10-05): hreflang on 3 of 5 sites (one always pointing at the homes), canonical on 4, sitemap on 2, JSON-LD on 2, a skip link on 1, focus styles missing on 1, Google Fonts on 1, reCAPTCHA scripts on 2, no CI, no a11y tooling, no Intl utilities; lang tags es-AR/pt-BR on 3 sites and bare codes on 2
  • Audit: all five sites keep Spanish at the root (prefixDefaultLocale: false); only akribis_info translates section slugs, and keeps Spanish for legal and thank-you pages in every language
  • Audit: akribis_info scripts/i18n-integrity.mjs, akleia_info scripts/check-i18n-parity.mjs, solfarma_com scripts/checks.mjs (AA contrast, no font CDN, links resolve): three partial checkers
  • WCAG 2.2 (1.4.11, 2.4.11, 2.4.13, 2.5.8, 2.3.3) · llmstxt.org · schema.org Organization
  • Websites/akribis_info · audit of 2026-10-06: no skip link, no _headers, reCAPTCHA and the analytics beacon without consent, 222 inline styles, an SSR adapter for static pages, 232 accepted type errors

Delivers

  • The standards as data (standards.json)
  • the checker any site runs over its build
  • and this site as the first that meets them.

Decision

Figures

Addresses and languages

  • url-grammar^/[a-z0-9]+(?:/[a-z0-9-]+)*/$automated
  • html-langes, en, ptautomated
  • hreflangx-defaultautomated
  • canonicalselfautomated

Accessibility

  • h11automated
  • heading-orderh1 → h2 → h3automated
  • mainmainautomated
  • skip-link#mainautomated
  • img-altaltautomated
  • svg-namedrole="img" | aria-hiddenautomated
  • link-texttext | aria-labelautomated
  • controls-labelledlabelautomated
  • autocompletename, email, tel, organizationautomated
  • focus-visible--focus-ringmanual
  • target-size24 pxmanual
  • reduced-motion--duration-* → 0manual

SEO

  • title10–70automated
  • description30–160automated
  • open-graphog:title, og:description, og:image, og:urlautomated
  • structured-dataOrganizationautomated
  • sitemapsitemap.xmlautomated

Budgets per page, uncompressed

  • budget-html200 kBautomated
  • budget-css80 kBautomated
  • budget-js150 kBautomated
  • budget-fonts260 kBautomated
  • preloads≤ 3automated
  • img-dimensionswidth, heightautomated
  • remote-fontsfonts.googleapis.com, fonts.gstatic.com, use.typekit.netautomated

Consent

  • consentgoogletagmanager.com, google-analytics.com, connect.facebook.net, hotjar.com, clarity.ms, doubleclick.net, cloudflareinsights.comautomated

Pages and headers

  • pages/<lang>/<slug>/ · /404.htmlautomated
  • headersX-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Optionsautomated

Naming

  • namingSOL FARMA · Sol Farma · Sol-Farma · AKIOT · Akiot · AKRIBIS · One · AKRIBIS·One · AKRIBIS ONE · Akribis One · Parte de AKRIBISautomated

pnpm check runs the checker over the built site; one violation fails the build. Any site: node brand/src/check-site.ts dist

The standards as data (ADR-0025, ADR-0031, ADR-0032): the rules the checker runs over a built site, with their values, and the three it cannot see. The @akribis/site integration runs it after every site's build, and this site after its own: zero violations or no build.