<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Frontend on ARI Systems</title>
    <link>https://aripd.com/tags/frontend/</link>
    <description>Recent content in Frontend on ARI Systems</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>ARI Systems</copyright>
    <lastBuildDate>Tue, 05 May 2026 18:05:38 +0300</lastBuildDate>
    <atom:link href="https://aripd.com/tags/frontend/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Frontend Checklist</title>
      <link>https://aripd.com/blog/frontend/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://aripd.com/blog/frontend/</guid>
      <description>&lt;h1 id=&#34;landing-website--frontend-checklist--todo&#34;&gt;Landing Website — Frontend Checklist &amp;amp; TODO &lt;a href=&#34;#landing-website--frontend-checklist--todo&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Based on &lt;a href=&#34;https://github.com/thedaviddias/Front-End-Checklist&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Front-End Checklist&lt;/a&gt;, &lt;a href=&#34;https://github.com/thedaviddias/Front-End-Performance-Checklist&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Front-End Performance Checklist&lt;/a&gt;, and &lt;a href=&#34;https://github.com/spech66/hugo-best-practices&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hugo Best Practices&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Priority: 🔴 High · 🟡 Medium · 🟢 Low&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-head--meta-tags&#34;&gt;1. HEAD &amp;amp; Meta Tags &lt;a href=&#34;#1-head--meta-tags&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Doctype&lt;/strong&gt; 🔴 — HTML5 doctype is present at the top of all pages&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Charset&lt;/strong&gt; 🔴 — UTF-8 declared as the first meta tag in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Viewport&lt;/strong&gt; 🔴 — &lt;code&gt;width=device-width, initial-scale=1&lt;/code&gt; is set&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Viewport &lt;code&gt;viewport-fit&lt;/code&gt;&lt;/strong&gt; 🟢 — Add &lt;code&gt;viewport-fit=cover&lt;/code&gt; for notched devices: &lt;code&gt;&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1, viewport-fit=cover&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Title&lt;/strong&gt; 🔴 — Every page has a unique, descriptive &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; (&amp;lt; 55 characters)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Meta description&lt;/strong&gt; 🔴 — Per-page descriptions provided (&amp;lt; 150 characters)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;keywords&lt;/code&gt; meta tag&lt;/strong&gt; 🟡 — Either populated dynamically from tags/categories or removed entirely (Google ignores it, but an empty tag looks unprofessional)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Canonical URL&lt;/strong&gt; 🔴 — &lt;code&gt;&amp;lt;link rel=&amp;quot;canonical&amp;quot;&amp;gt;&lt;/code&gt; present to avoid duplicate content&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Language attribute&lt;/strong&gt; 🔴 — &lt;code&gt;&amp;lt;html lang=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; set correctly for the page language&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Alternate hreflang&lt;/strong&gt; 🟢 — Hreflang tags present for all translations&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;x-default&lt;/code&gt; hreflang&lt;/strong&gt; 🟡 — &lt;code&gt;&amp;lt;link rel=&amp;quot;alternate&amp;quot; hreflang=&amp;quot;x-default&amp;quot; href=&amp;quot;...&amp;quot; /&amp;gt;&lt;/code&gt; present for international landing page fallback (&lt;a href=&#34;https://developers.google.com/search/docs/advanced/crawling/localized-versions#html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google recommendation&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;twitter:card&lt;/code&gt; meta tag&lt;/strong&gt; 🟡 — &lt;code&gt;twitter:card&lt;/code&gt; type declared (e.g., &lt;code&gt;summary_large_image&lt;/code&gt;). Required for Twitter/X preview cards&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Open Graph tags&lt;/strong&gt; 🟡 — &lt;code&gt;og:type&lt;/code&gt;, &lt;code&gt;og:title&lt;/code&gt;, &lt;code&gt;og:description&lt;/code&gt;, &lt;code&gt;og:image&lt;/code&gt;, &lt;code&gt;og:url&lt;/code&gt;, &lt;code&gt;og:locale&lt;/code&gt;, &lt;code&gt;og:site_name&lt;/code&gt; present&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;og:image:width&lt;/code&gt; and &lt;code&gt;og:image:height&lt;/code&gt;&lt;/strong&gt; 🟢 — Dimensions specified so crawlers render immediately without downloading&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;CSS before JS&lt;/strong&gt; 🔴 — All CSS &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tags loaded before any &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-favicons--web-app-manifest&#34;&gt;2. Favicons &amp;amp; Web App Manifest &lt;a href=&#34;#2-favicons--web-app-manifest&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Favicon files&lt;/strong&gt; 🟡 — All required sizes present (16x16, 32x32, 192x192, 512x512, apple-touch-icon, favicon.ico)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Web manifest&lt;/strong&gt; 🟡 — &lt;code&gt;site.webmanifest&lt;/code&gt; exists and is linked&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Manifest &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;short_name&lt;/code&gt;&lt;/strong&gt; 🔴 — Both fields populated with the site name (required for PWA install prompts and bookmarking)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Theme color&lt;/strong&gt; 🟢 — &lt;code&gt;&amp;lt;meta name=&amp;quot;theme-color&amp;quot;&amp;gt;&lt;/code&gt; set to match brand&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-html-quality&#34;&gt;3. HTML Quality &lt;a href=&#34;#3-html-quality&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Semantic HTML5&lt;/strong&gt; 🔴 — Appropriate use of &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;404 error page&lt;/strong&gt; 🔴 — Custom 404 page exists with inline CSS (no external stylesheet dependency)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;5xx error page&lt;/strong&gt; 🟡 — Custom 500 error page exists with inline CSS&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No boilerplate/template remnants&lt;/strong&gt; 🔴 — All placeholder text, debug strings, and framework boilerplate removed from production templates&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No dead code&lt;/strong&gt; 🟢 — Unused template blocks, variables, and commented-out code removed&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;noopener noreferrer&lt;/code&gt; on external links&lt;/strong&gt; 🔴 — All &lt;code&gt;target=&amp;quot;_blank&amp;quot;&lt;/code&gt; links include &lt;code&gt;rel=&amp;quot;noopener noreferrer&amp;quot;&lt;/code&gt; to prevent tab nabbing&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; fallback&lt;/strong&gt; 🟡 — A minimal fallback message provided for users with JavaScript disabled&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No unused source files&lt;/strong&gt; 🟢 — Unused SCSS/JS source files removed from the project&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;All strings internationalized&lt;/strong&gt; 🟡 — No hardcoded UI strings in templates; all user-facing text pulled from i18n files&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;W3C HTML validation&lt;/strong&gt; 🔴 — All pages pass &lt;a href=&#34;https://validator.w3.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;W3C validator&lt;/a&gt; without errors&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Broken link check&lt;/strong&gt; 🔴 — No broken internal or external links (use &lt;a href=&#34;https://validator.w3.org/checklink&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;W3C Link Checker&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Clean production code&lt;/strong&gt; 🟢 — HTML comments and unnecessary whitespace removed in production output&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;4-css&#34;&gt;4. CSS &lt;a href=&#34;#4-css&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;CSS preprocessor&lt;/strong&gt; 🟢 — Using a CSS preprocessor (Sass/SCSS/Less) for maintainability&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Autoprefixer&lt;/strong&gt; 🔴 — Vendor prefixes generated automatically via Autoprefixer or PostCSS&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Minification&lt;/strong&gt; 🔴 — All CSS minified in production&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Fingerprinting / cache busting&lt;/strong&gt; 🟡 — CSS filenames include content hash for cache invalidation&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;SRI (Subresource Integrity)&lt;/strong&gt; 🟡 — CSS &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tags include &lt;code&gt;integrity&lt;/code&gt; attribute&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Single CSS bundle&lt;/strong&gt; 🔴 — All CSS concatenated into a single file (or minimal files for HTTP/2)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;CSS Reset / Normalize&lt;/strong&gt; 🔴 — A CSS reset, normalize, or reboot is included and up to date&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Unused CSS removed&lt;/strong&gt; 🟡 — Unused CSS selectors purged (via PurgeCSS or similar). Full framework imports trimmed to needed components&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Critical CSS&lt;/strong&gt; 🟡 — Above-the-fold CSS inlined in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; for faster First Contentful Paint (FCP)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;font-display&lt;/code&gt; property&lt;/strong&gt; 🟡 — Web fonts (including icon fonts) use &lt;code&gt;font-display: swap&lt;/code&gt; to prevent FOIT (Flash of Invisible Text)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No inline CSS in &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;/strong&gt; 🔴 — All styles in external files or &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; (except critical CSS)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Unique IDs&lt;/strong&gt; 🔴 — All element IDs are unique per page&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Responsive design&lt;/strong&gt; 🔴 — Tested at 320px, 768px, 1024px, 1440px breakpoints&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Print stylesheet&lt;/strong&gt; 🟡 — Print-specific styles provided&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;CSS validation&lt;/strong&gt; 🟡 — CSS passes &lt;a href=&#34;https://jigsaw.w3.org/css-validator/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;W3C CSS Validator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;LTR/RTL support&lt;/strong&gt; 🟡 — If multilingual, tested for RTL languages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;5-javascript&#34;&gt;5. JavaScript &lt;a href=&#34;#5-javascript&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No inline JS in &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;/strong&gt; 🔴 — JavaScript code in external files, not mixed with HTML&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Minification&lt;/strong&gt; 🔴 — All JS files minified in production&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Fingerprinting / SRI&lt;/strong&gt; 🔴 — JS filenames hashed and &lt;code&gt;integrity&lt;/code&gt; attribute present&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Non-blocking loading&lt;/strong&gt; 🔴 — Scripts loaded with &lt;code&gt;defer&lt;/code&gt; or &lt;code&gt;async&lt;/code&gt; attribute&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Bundled into minimal files&lt;/strong&gt; 🔴 — All JS concatenated/bundled to minimize HTTP requests&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No &lt;code&gt;javascript:void(0)&lt;/code&gt;&lt;/strong&gt; 🟡 — Using proper &lt;code&gt;href=&amp;quot;#&amp;quot;&lt;/code&gt; with &lt;code&gt;event.preventDefault()&lt;/code&gt; or &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; elements instead&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Updated libraries&lt;/strong&gt; 🟡 — All JS libraries are up to date with latest stable versions&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Dependency size audit&lt;/strong&gt; 🟢 — External libraries are necessary and as lightweight as possible (consider Vanilla JS for simple features)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;ESLint / linting&lt;/strong&gt; 🟡 — No errors flagged by a JS linter&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No console.log in production&lt;/strong&gt; 🟢 — Debug logging removed from production builds&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;6-images&#34;&gt;6. Images &lt;a href=&#34;#6-images&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Image optimization&lt;/strong&gt; 🔴 — All images compressed without visible quality loss (target: &amp;lt; 200 KB per image)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Modern formats&lt;/strong&gt; 🟡 — Using WebP (or AVIF) with fallbacks where appropriate&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No duplicate format files&lt;/strong&gt; 🟢 — If multiple formats exist for the same image, implement &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; with fallback or remove unused formats&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;SVG optimization&lt;/strong&gt; 🟡 — Large SVG files optimized with &lt;a href=&#34;https://jakearchibald.github.io/svgomg/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SVGO&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;loading=&amp;quot;lazy&amp;quot;&lt;/code&gt;&lt;/strong&gt; 🟡 — Below-the-fold images use native lazy loading&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Descriptive &lt;code&gt;alt&lt;/code&gt; text&lt;/strong&gt; 🔴 — All &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags have meaningful, descriptive alt text (not just the brand name)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; attributes&lt;/strong&gt; 🟡 — Dimensions specified on images to prevent Cumulative Layout Shift (CLS)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Responsive images&lt;/strong&gt; 🟡 — Using &lt;code&gt;srcset&lt;/code&gt; and &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; to serve appropriately sized images per viewport&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Hugo image processing&lt;/strong&gt; 🟡 — Using Hugo&amp;rsquo;s built-in &lt;code&gt;.Resize&lt;/code&gt; / &lt;code&gt;.Fit&lt;/code&gt; / &lt;code&gt;.Fill&lt;/code&gt; for serving optimally sized images (Hugo-specific)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;No oversized images in content&lt;/strong&gt; 🔴 — Blog/content images are appropriately sized (not raw camera/design exports)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;7-video--media&#34;&gt;7. Video &amp;amp; Media &lt;a href=&#34;#7-video--media&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Video hosting strategy&lt;/strong&gt; 🔴 — Large videos hosted on CDN or streaming platform (YouTube/Vimeo) rather than self-hosted in &lt;code&gt;static/&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Video compression&lt;/strong&gt; 🟡 — Self-hosted videos compressed with modern codecs (H.265/VP9), with WebM fallback&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;preload&lt;/code&gt; optimization&lt;/strong&gt; 🟡 — Videos not auto-loaded use &lt;code&gt;preload=&amp;quot;none&amp;quot;&lt;/code&gt; or &lt;code&gt;preload=&amp;quot;metadata&amp;quot;&lt;/code&gt; to save bandwidth&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Video file size&lt;/strong&gt; 🔴 — Self-hosted video files kept under 5 MB each where possible&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;8-performance&#34;&gt;8. Performance &lt;a href=&#34;#8-performance&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Resource hints&lt;/strong&gt; 🟡 — &lt;code&gt;&amp;lt;link rel=&amp;quot;preconnect&amp;quot;&amp;gt;&lt;/code&gt; and/or &lt;code&gt;&amp;lt;link rel=&amp;quot;dns-prefetch&amp;quot;&amp;gt;&lt;/code&gt; added for critical external domains (analytics, CDN, API)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Page weight &amp;lt; 1.5 MB&lt;/strong&gt; 🔴 — Initial page load (HTML + CSS + JS + images) kept under 1.5 MB, ideally under 500 KB&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Page load time &amp;lt; 3 seconds&lt;/strong&gt; 🔴 — Full page load under 3 seconds on 3G connection&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;TTFB &amp;lt; 1.3 seconds&lt;/strong&gt; 🔴 — Time To First Byte under 1.3 seconds&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;HTML minification&lt;/strong&gt; 🟡 — Hugo minify config enabled:&#xA;&lt;div class=&#34;code-container&#34;&gt;&#xA;    &lt;div class=&#34;code-block&#34;&gt;&#xA;        &lt;div&gt;&#xA;            &#xA;            &lt;div class=&#34;code-copy&#34; style=&#34;float: right&#34;&gt;&#xA;                &lt;a class=&#34;icon-link icon-link-hover link-opacity-50 link-opacity-100-hover&#34; href=&#34;#&#34; aria-label=&#34;Copy code&#34;&gt;Copy&lt;/a&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;minify:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  disableXML: &lt;span style=&#34;color:#0000c0&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  minifyOutput: &lt;span style=&#34;color:#0000c0&#34;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Gzip/Brotli compression&lt;/strong&gt; 🔴 — Server delivers compressed responses (verify with &lt;code&gt;curl -H &amp;quot;Accept-Encoding: gzip&amp;quot; -I&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;HTTP cache headers&lt;/strong&gt; 🟡 — Static assets have appropriate &lt;code&gt;Cache-Control&lt;/code&gt; headers&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Google PageSpeed score ≥ 90&lt;/strong&gt; 🔴 — &lt;a href=&#34;https://pagespeed.web.dev/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;PageSpeed Insights&lt;/a&gt; score ≥ 90 on both mobile and desktop&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Core Web Vitals&lt;/strong&gt; 🔴 — LCP, INP, and CLS metrics within &amp;ldquo;Good&amp;rdquo; thresholds&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Cookie size&lt;/strong&gt; 🟡 — Each cookie under 4096 bytes; domain has fewer than 20 cookies&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Minimal HTTP requests&lt;/strong&gt; 🔴 — Every requested file is essential; no unnecessary requests&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;CDN&lt;/strong&gt; 🟡 — Static assets served from a CDN for global performance&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Same-protocol assets&lt;/strong&gt; 🔴 — All assets served over HTTPS; no mixed content&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;9-seo&#34;&gt;9. SEO &lt;a href=&#34;#9-seo&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Sitemap&lt;/strong&gt; 🔴 — &lt;code&gt;sitemap.xml&lt;/code&gt; generated and submitted to &lt;a href=&#34;https://search.google.com/search-console/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google Search Console&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;robots.txt&lt;/strong&gt; 🔴 — &lt;code&gt;robots.txt&lt;/code&gt; present and not blocking important pages&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;robots.txt environment check&lt;/strong&gt; 🟡 — Verify that production environment variables are set so robots.txt allows crawling (not &lt;code&gt;Disallow: /&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;enableRobotsTXT&lt;/code&gt; in Hugo config&lt;/strong&gt; 🟡 — Enabled in &lt;code&gt;config.yaml&lt;/code&gt; so Hugo uses the custom robots.txt template&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Structured data (JSON-LD)&lt;/strong&gt; 🔴 — Schema.org markup present and validated with &lt;a href=&#34;https://search.google.com/test/rich-results&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Rich Results Test&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Schema.org accuracy&lt;/strong&gt; 🟡 — Author names, sameAs URLs, and image references in JSON-LD are correct (not empty or placeholder values)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Sitemap configuration&lt;/strong&gt; 🟡 — Hugo sitemap config set with &lt;code&gt;changefreq&lt;/code&gt; and &lt;code&gt;priority&lt;/code&gt;:&#xA;&lt;div class=&#34;code-container&#34;&gt;&#xA;    &lt;div class=&#34;code-block&#34;&gt;&#xA;        &lt;div&gt;&#xA;            &#xA;            &lt;div class=&#34;code-copy&#34; style=&#34;float: right&#34;&gt;&#xA;                &lt;a class=&#34;icon-link icon-link-hover link-opacity-50 link-opacity-100-hover&#34; href=&#34;#&#34; aria-label=&#34;Copy code&#34;&gt;Copy&lt;/a&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sitemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  changefreq: &lt;span style=&#34;color:#0000c0&#34;&gt;weekly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  priority: &lt;span style=&#34;color:#0000c0&#34;&gt;0.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Heading hierarchy&lt;/strong&gt; 🟡 — Proper heading order (single &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; per page, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; → &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; → etc.) without skipping levels&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;HTML sitemap&lt;/strong&gt; 🟡 — An HTML sitemap page is accessible via the footer&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Google Analytics / Search Console&lt;/strong&gt; 🟢 — Analytics installed and Search Console configured&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;10-accessibility-a11y&#34;&gt;10. Accessibility (a11y) &lt;a href=&#34;#10-accessibility-a11y&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Skip navigation link&lt;/strong&gt; 🔴 — &amp;ldquo;Skip to main content&amp;rdquo; link at the top of the page:&#xA;&lt;div class=&#34;code-container&#34;&gt;&#xA;    &lt;div class=&#34;code-block&#34;&gt;&#xA;        &lt;div&gt;&#xA;            &#xA;            &lt;div class=&#34;code-copy&#34; style=&#34;float: right&#34;&gt;&#xA;                &lt;a class=&#34;icon-link icon-link-hover link-opacity-50 link-opacity-100-hover&#34; href=&#34;#&#34; aria-label=&#34;Copy code&#34;&gt;Copy&lt;/a&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;a href&lt;span style=&#34;color:#00538b&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34;#content&amp;#34;&lt;/span&gt; class&lt;span style=&#34;color:#00538b&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34;visually-hidden-focusable&amp;#34;&lt;/span&gt;&amp;gt;Skip to main content&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Focus styles&lt;/strong&gt; 🔴 — &lt;code&gt;:focus&lt;/code&gt; outlines visible on all interactive elements; not suppressed by custom CSS&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Color contrast&lt;/strong&gt; 🟡 — All text/background combinations pass WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;ARIA labels on icon-only links&lt;/strong&gt; 🟡 — Links/buttons using only icons have &lt;code&gt;aria-label&lt;/code&gt; for screen readers&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Keyboard navigation&lt;/strong&gt; 🔴 — All interactive elements (nav, modals, forms, buttons) reachable and operable with keyboard only&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Screen reader testing&lt;/strong&gt; 🟡 — Pages tested with at least one screen reader (VoiceOver, NVDA, ChromeVox)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Form labels&lt;/strong&gt; 🔴 — All form inputs have associated &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; elements or &lt;code&gt;aria-label&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Heading structure&lt;/strong&gt; 🔴 — Headings used in proper order for document outline (not for visual styling)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;WAVE / axe audit&lt;/strong&gt; 🟡 — Automated accessibility testing passed with &lt;a href=&#34;https://wave.webaim.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WAVE&lt;/a&gt; or &lt;a href=&#34;https://www.deque.com/axe/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;axe&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Progressive enhancement&lt;/strong&gt; 🟡 — Core functionality (navigation, content) works without JavaScript&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;11-security&#34;&gt;11. Security &lt;a href=&#34;#11-security&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;HTTPS everywhere&lt;/strong&gt; 🔴 — All pages and assets served over HTTPS&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;SRI (Subresource Integrity)&lt;/strong&gt; 🟡 — External/CDN CSS and JS include &lt;code&gt;integrity&lt;/code&gt; and &lt;code&gt;crossorigin&lt;/code&gt; attributes&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;noopener noreferrer&lt;/code&gt;&lt;/strong&gt; 🔴 — All &lt;code&gt;target=&amp;quot;_blank&amp;quot;&lt;/code&gt; links include &lt;code&gt;rel=&amp;quot;noopener noreferrer&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Content Security Policy (CSP)&lt;/strong&gt; 🟡 — CSP headers configured to restrict resource loading sources&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;HSTS header&lt;/strong&gt; 🟡 — &lt;code&gt;Strict-Transport-Security&lt;/code&gt; header set with &lt;code&gt;max-age&lt;/code&gt; ≥ 31536000&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;X-Content-Type-Options&lt;/code&gt;&lt;/strong&gt; 🟢 — &lt;code&gt;nosniff&lt;/code&gt; header set to prevent MIME-type sniffing&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;X-Frame-Options&lt;/code&gt;&lt;/strong&gt; 🟢 — &lt;code&gt;DENY&lt;/code&gt; or &lt;code&gt;SAMEORIGIN&lt;/code&gt; header set to prevent clickjacking&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Security headers audit&lt;/strong&gt; 🟡 — Scan with &lt;a href=&#34;https://securityheaders.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;securityheaders.com&lt;/a&gt; and &lt;a href=&#34;https://observatory.mozilla.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Mozilla Observatory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;12-hugo-specific-best-practices&#34;&gt;12. Hugo-Specific Best Practices &lt;a href=&#34;#12-hugo-specific-best-practices&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Content archetypes&lt;/strong&gt; 🟡 — Archetypes defined for each content type (blog, page, etc.) with pre-filled front matter:&#xA;&lt;div class=&#34;code-container&#34;&gt;&#xA;    &lt;div class=&#34;code-block&#34;&gt;&#xA;        &lt;div&gt;&#xA;            &#xA;            &lt;div class=&#34;code-copy&#34; style=&#34;float: right&#34;&gt;&#xA;                &lt;a class=&#34;icon-link icon-link-hover link-opacity-50 link-opacity-100-hover&#34; href=&#34;#&#34; aria-label=&#34;Copy code&#34;&gt;Copy&lt;/a&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#000;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#505050&#34;&gt;# archetypes/blog.md&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;title: &lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34;{{ replace .Name &amp;#34;&lt;/span&gt;-&lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34; | title }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;description: &lt;span style=&#34;color:#2544bb&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;date: {{ &lt;span style=&#34;color:#0000c0&#34;&gt;.Date }}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;draft: &lt;span style=&#34;color:#0000c0&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;archived: &lt;span style=&#34;color:#0000c0&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;toc: &lt;span style=&#34;color:#0000c0&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tags: []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;canonifyURLs&lt;/code&gt;&lt;/strong&gt; 🟡 — Consider enabling &lt;code&gt;canonifyURLs: true&lt;/code&gt; in config for consistent URL handling&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;External link render hook&lt;/strong&gt; 🟡 — Custom &lt;code&gt;render-link.html&lt;/code&gt; in &lt;code&gt;layouts/_default/_markup/&lt;/code&gt; to add &lt;code&gt;target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot;&lt;/code&gt; to external links in markdown content&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Content for all configured languages&lt;/strong&gt; 🟡 — All languages in config have corresponding content directories, or unused languages are disabled&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;.gitignore&lt;/code&gt; coverage&lt;/strong&gt; 🟢 — Build artifacts ignored: &lt;code&gt;public/&lt;/code&gt;, &lt;code&gt;resources/&lt;/code&gt;, &lt;code&gt;node_modules/&lt;/code&gt;, generated JS/CSS in &lt;code&gt;assets/&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Content organization&lt;/strong&gt; 🟢 — Images stored alongside their markdown files (page bundles), not in a separate global folder&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Hugo Pipes for assets&lt;/strong&gt; 🟡 — Using &lt;code&gt;resources.Minify&lt;/code&gt;, &lt;code&gt;resources.Fingerprint&lt;/code&gt;, and &lt;code&gt;resources.Concat&lt;/code&gt; for CSS/JS processing&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Conditional asset loading&lt;/strong&gt; 🟢 — Page-specific scripts and styles wrapped in Hugo conditionals to avoid loading on every page&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;13-build--cicd&#34;&gt;13. Build &amp;amp; CI/CD &lt;a href=&#34;#13-build--cicd&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Pinned CI image&lt;/strong&gt; 🔴 — CI container uses a specific version (e.g., &lt;code&gt;node:20-alpine&lt;/code&gt;), not &lt;code&gt;latest&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Hugo binary available in CI&lt;/strong&gt; 🟡 — Hugo is correctly installed/available in the CI build environment&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Production environment variables&lt;/strong&gt; 🟡 — &lt;code&gt;HUGO_ENV=production&lt;/code&gt; (or equivalent) set in CI so that:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;robots.txt&lt;/code&gt; allows crawling&lt;/li&gt;&#xA;&lt;li&gt;Analytics scripts are activated&lt;/li&gt;&#xA;&lt;li&gt;Minification/optimization is enabled&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Build size monitoring&lt;/strong&gt; 🟢 — Bundle size tracked and checked on each build (consider size-limit or similar)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Build reproducibility&lt;/strong&gt; 🟡 — &lt;code&gt;package-lock.json&lt;/code&gt; committed and &lt;code&gt;npm ci&lt;/code&gt; used instead of &lt;code&gt;npm install&lt;/code&gt; in CI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;14-fonts--typography&#34;&gt;14. Fonts &amp;amp; Typography &lt;a href=&#34;#14-fonts--typography&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;WOFF2 format&lt;/strong&gt; 🔴 — Web fonts served in WOFF2 format (with WOFF fallback for older browsers)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Webfont total size &amp;lt; 300 KB&lt;/strong&gt; 🟡 — All font files (including icon fonts) combined under 300 KB&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;&lt;code&gt;font-display: swap&lt;/code&gt;&lt;/strong&gt; 🟡 — All &lt;code&gt;@font-face&lt;/code&gt; declarations include &lt;code&gt;font-display: swap&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Preconnect for font CDN&lt;/strong&gt; 🟡 — If using Google Fonts or similar: &lt;code&gt;&amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.gstatic.com&amp;quot; crossorigin&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;System font stack considered&lt;/strong&gt; 🟢 — Evaluated whether a system font stack is sufficient vs. custom web fonts (better performance)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Icon font audit&lt;/strong&gt; 🟢 — If using an icon font, verify full font is needed; consider inline SVG for a small number of icons&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;15-pre-launch-summary-checklist&#34;&gt;15. Pre-Launch Summary Checklist &lt;a href=&#34;#15-pre-launch-summary-checklist&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;#&lt;/th&gt;&#xA;          &lt;th&gt;Item&lt;/th&gt;&#xA;          &lt;th&gt;Status&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Web manifest has valid &lt;code&gt;name&lt;/code&gt;/&lt;code&gt;short_name&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;No boilerplate/placeholder text in templates&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;rel=&amp;quot;noopener noreferrer&amp;quot;&lt;/code&gt; on all external links&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;All images optimized (&amp;lt; 200 KB each)&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;Videos compressed or externally hosted&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;Skip navigation link present&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;7&lt;/td&gt;&#xA;          &lt;td&gt;CI uses pinned image version&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;Production env variables set in CI&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;9&lt;/td&gt;&#xA;          &lt;td&gt;Core Web Vitals in &amp;ldquo;Good&amp;rdquo; range&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;robots.txt&lt;/code&gt; allows crawling in production&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;11&lt;/td&gt;&#xA;          &lt;td&gt;PageSpeed score ≥ 90 (mobile + desktop)&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;12&lt;/td&gt;&#xA;          &lt;td&gt;Accessibility audit passed (WAVE/axe)&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;13&lt;/td&gt;&#xA;          &lt;td&gt;Structured data validated (Schema.org)&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;14&lt;/td&gt;&#xA;          &lt;td&gt;Security headers audit passed&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;15&lt;/td&gt;&#xA;          &lt;td&gt;All forms have labels and proper input types&lt;/td&gt;&#xA;          &lt;td&gt;⬜&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References &lt;a href=&#34;#references&#34; class=&#34;permalink&#34;&gt;&lt;i class=&#34;bi bi-link-45deg&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/thedaviddias/Front-End-Checklist&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Front-End Checklist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/thedaviddias/Front-End-Performance-Checklist&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Front-End Performance Checklist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/spech66/hugo-best-practices&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hugo Best Practices&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pagespeed.web.dev/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google PageSpeed Insights&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wave.webaim.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WAVE Accessibility Tool&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://validator.w3.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;W3C Validator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://validator.schema.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Schema.org Validator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://securityheaders.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Security Headers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://observatory.mozilla.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Mozilla Observatory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
