[{"data":1,"prerenderedAt":141},["ShallowReactive",2],{"hub:guides":3},{"path":4,"key":5,"title":6,"h1":7,"description":8,"crumbs":9,"blocks":15},"\u002Fguides\u002F","guides","All Guides by Kind: How-Tos, Fixes, Comparisons","Guides by the kind of help they give","Browse every guide by what it does for you: step-by-step how-tos, fixes that start from a symptom, comparisons with measured criteria, and concept explainers.",[10,13],[11,12],"Home","\u002F",[14,4],"Guides",[16,19,21,24,56,58,89,91,122],{"k":17,"text":18},"p","Every guide on the site is one of four kinds, and the kind says what you will get before you open it. A how-to takes one task from start to finish with the configuration and the numbers it produced. A fix starts from something you can observe — a layout that jumps, a build that runs out of memory — and works back to the cause. A comparison puts two or more options side by side against criteria that were measured rather than asserted. A concept explains how something works and when it matters, without a single task at the end of it.",{"k":17,"text":20},"Pick the kind that matches the question in front of you. If you are deciding, start with comparisons and concepts; if you are doing, how-tos; if something is already wrong, fixes are filed under what you saw rather than what caused it.",{"k":22,"html":23},"fig","\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 260\" role=\"img\" aria-labelledby=\"hub-guides-hero-title hub-guides-hero-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-guides-hero-title\">Choosing a kind of guide from the question you have\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-guides-hero-desc\">The root question asks what you are trying to do. Deciding between options leads to comparisons. Understanding how something works leads to concepts. Doing a task leads to how-tos. Something already broken leads to fixes.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"260\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Crect x=\"225.6\" y=\"60.0\" width=\"308.7\" height=\"50.0\" rx=\"8\" fill=\"#6a4c93\" opacity=\"0.14\" stroke=\"#6a4c93\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M380.0 111.0 L380.0 132.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px\"\u002F>\n    \u003Cpath d=\"M103.2 132.0 L656.8 132.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px\"\u002F>\n    \u003Cpath d=\"M103.2 132.0 L103.2 150.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-guides-hero-arrow)\"\u002F>\n    \u003Crect x=\"20.0\" y=\"154.0\" width=\"166.5\" height=\"89.8\" rx=\"8\" fill=\"#ffca3a\" opacity=\"0.24\" stroke=\"#a97b00\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M287.8 132.0 L287.8 150.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-guides-hero-arrow)\"\u002F>\n    \u003Crect x=\"204.5\" y=\"154.0\" width=\"166.5\" height=\"89.8\" rx=\"8\" fill=\"#6a4c93\" opacity=\"0.14\" stroke=\"#6a4c93\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M472.2 132.0 L472.2 150.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-guides-hero-arrow)\"\u002F>\n    \u003Crect x=\"389.0\" y=\"154.0\" width=\"166.5\" height=\"89.8\" rx=\"8\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M656.8 132.0 L656.8 150.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-guides-hero-arrow)\"\u002F>\n    \u003Crect x=\"573.5\" y=\"154.0\" width=\"166.5\" height=\"89.8\" rx=\"8\" fill=\"#ff595e\" opacity=\"0.12\" stroke=\"#d83b41\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Which kind of guide do you need?\u003C\u002Ftext>\n    \u003Ctext x=\"380.0\" y=\"90.2\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">What is the question in front of you?\u003C\u002Ftext>\n    \u003Ctext x=\"103.2\" y=\"170.0\" fill=\"#8a6d0f\" style=\"font-size:11px;text-anchor:middle;font-weight:700\">Deciding between options\u003C\u002Ftext>\n    \u003Ctext x=\"103.2\" y=\"190.3\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Comparisons\u003C\u002Ftext>\n    \u003Ctext x=\"103.2\" y=\"207.2\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">measured side by side\u003C\u002Ftext>\n    \u003Ctext x=\"287.8\" y=\"170.0\" fill=\"#6a4c93\" style=\"font-size:11px;text-anchor:middle;font-weight:700\">Understanding how it\u003C\u002Ftext>\n    \u003Ctext x=\"287.8\" y=\"184.3\" fill=\"#6a4c93\" style=\"font-size:11px;text-anchor:middle;font-weight:700\">works\u003C\u002Ftext>\n    \u003Ctext x=\"287.8\" y=\"204.6\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Concepts\u003C\u002Ftext>\n    \u003Ctext x=\"287.8\" y=\"221.5\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">mechanism and trade-offs\u003C\u002Ftext>\n    \u003Ctext x=\"472.2\" y=\"170.0\" fill=\"#166a9e\" style=\"font-size:11px;text-anchor:middle;font-weight:700\">Doing a task\u003C\u002Ftext>\n    \u003Ctext x=\"472.2\" y=\"190.3\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">How-tos\u003C\u002Ftext>\n    \u003Ctext x=\"472.2\" y=\"207.2\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">config plus measured\u003C\u002Ftext>\n    \u003Ctext x=\"472.2\" y=\"221.5\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">result\u003C\u002Ftext>\n    \u003Ctext x=\"656.8\" y=\"170.0\" fill=\"#b32b30\" style=\"font-size:11px;text-anchor:middle;font-weight:700\">Something is broken\u003C\u002Ftext>\n    \u003Ctext x=\"656.8\" y=\"190.3\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Fixes\u003C\u002Ftext>\n    \u003Ctext x=\"656.8\" y=\"207.2\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">symptom to cause to fix\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cdefs>\n    \u003Cmarker id=\"hub-guides-hero-arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\n      \u003Cpath d=\"M0 0 L10 5 L0 10 z\" fill=\"#556071\"\u002F>\n    \u003C\u002Fmarker>\n  \u003C\u002Fdefs>\n\u003C\u002Fsvg>\n\u003Cfigcaption>The four kinds are also the four hubs linked below.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":26,"items":27,"note":52,"more":53},"group","How-tos",[28,32,36,40,44,48],{"t":29,"u":30,"d":31},"Accessible Code Blocks in Documentation Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Faccessibility-for-static-sites\u002Faccessible-code-blocks-in-documentation-sites\u002F","Make highlighted code blocks keyboard-scrollable, readable at AA contrast in both themes and labelled for screen readers, using Shiki, Prism or Hugo Chroma.",{"t":33,"u":34,"d":35},"Accessible Dark Mode Toggles for Static Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Faccessibility-for-static-sites\u002Faccessible-dark-mode-toggles-for-static-sites\u002F","Build a theme toggle for a static site that follows the OS setting, has a real name and state, avoids a flash of the wrong theme and keeps AA contrast in both.",{"t":37,"u":38,"d":39},"Art Direction with the Picture Element","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Fart-direction-with-the-picture-element\u002F","Serve different crops of a hero image to mobile and desktop with picture and media queries in Astro, Eleventy and Hugo, without hurting LCP or causing layout shift.",{"t":41,"u":42,"d":43},"Auditing Font Payload per Page","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Fauditing-font-payload-per-page\u002F","Measure which fonts, weights and subsets each template of a static site really downloads, find unused faces and fallbacks, and set a font budget in CI.",{"t":45,"u":46,"d":47},"Accessibility Testing with axe and pa11y in CI","\u002Fproduction-ready-deployment-cicd-workflows\u002Ftesting-static-sites-in-ci\u002Faccessibility-testing-with-axe-and-pa11y-in-ci\u002F","Run axe-core through Playwright and pa11y-ci on sampled pages of a static site in both themes, fail pull requests on new violations and track the rest.",{"t":49,"u":50,"d":51},"Adding a Contact Form with Cloudflare Workers","\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fadding-a-contact-form-with-cloudflare-workers\u002F","Build a contact form for a static site on Cloudflare: a Pages Function that validates, checks Turnstile, rate-limits, stores in D1 and emails the team.","A task, end to end, with configuration and measured results.",{"t":54,"u":55},"All 245 how-tos","\u002Fguides\u002Fhow-to\u002F",{"k":22,"html":57},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 210\" role=\"img\" aria-labelledby=\"hub-guides-kinds-title hub-guides-kinds-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-guides-kinds-title\">Number of guides of each kind\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-guides-kinds-desc\">Horizontal bars counting guides by kind: How-tos 245, Fixes 55, Comparisons 35 and Concepts 12.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"210\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Crect x=\"240.0\" y=\"65.0\" width=\"458.8\" height=\"20.0\" rx=\"3\" fill=\"#1982c4\" opacity=\"0.3\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"240.0\" y=\"99.0\" width=\"103.0\" height=\"20.0\" rx=\"3\" fill=\"#ff595e\" opacity=\"0.3\" stroke=\"#d83b41\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"240.0\" y=\"133.0\" width=\"65.5\" height=\"20.0\" rx=\"3\" fill=\"#ffca3a\" opacity=\"0.45\" stroke=\"#a97b00\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"240.0\" y=\"167.0\" width=\"22.5\" height=\"20.0\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M240.0 60.0 L240.0 192.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Guides of each kind\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"79.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">How-tos\u003C\u002Ftext>\n    \u003Ctext x=\"706.8\" y=\"79.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">245\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"113.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">Fixes\u003C\u002Ftext>\n    \u003Ctext x=\"351.0\" y=\"113.5\" fill=\"#b32b30\" style=\"font-size:12px;text-anchor:start;font-weight:700\">55\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"147.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">Comparisons\u003C\u002Ftext>\n    \u003Ctext x=\"313.5\" y=\"147.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">35\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"181.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">Concepts\u003C\u002Ftext>\n    \u003Ctext x=\"270.5\" y=\"181.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">12\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>How-tos dominate because most guides end in a task with a measured result; concepts are kept few on purpose.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":59,"items":60,"note":85,"more":86},"Fixes",[61,65,69,73,77,81],{"t":62,"u":63,"d":64},"Fixing 404s on Refresh in Next.js Static Export","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Ffixing-404s-on-refresh-in-nextjs-static-export\u002F","Fix pages that work when navigated to but 404 on refresh or direct load in a Next.js static export, by matching file layout, trailing slashes and host rules.",{"t":66,"u":67,"d":68},"Fixing Astro Build Errors After Upgrading to Astro 5","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Ffixing-astro-build-errors-after-upgrading-to-astro-5\u002F","Work through the build errors an Astro 4 site hits on Astro 5, from legacy collections and slug to removed hybrid output, and prove the URLs did not change.",{"t":70,"u":71,"d":72},"CLS from Client-Side Rendered Components","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Fcls-from-client-side-rendered-components\u002F","Stop islands and client-rendered widgets from shifting static pages: server-render the initial state, reserve space, and avoid content swaps after hydration.",{"t":74,"u":75,"d":76},"Debugging CLS with the Layout Instability API","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Fdebugging-cls-with-the-layout-instability-api\u002F","Find the exact elements behind layout shifts on a static site with PerformanceObserver, attribution data from web-vitals and DevTools, then fix each shift.",{"t":78,"u":79,"d":80},"Finding the Cause of a Sudden Field LCP Drop","\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Ffinding-the-cause-of-a-sudden-field-lcp-drop\u002F","Work out why field LCP suddenly worsened on a static site: segment RUM data, line it up with deploys and third-party changes, and confirm the cause in the lab.",{"t":82,"u":83,"d":84},"Fixing Cold Starts in Netlify Functions for Forms","\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Ffixing-cold-starts-in-netlify-functions-for-forms\u002F","Measure and cut cold-start latency in a Netlify Function behind a static site's form: smaller bundles, lazy imports, regions and honest UI states.","Starts from a symptom and ends at the cause and the fix.",{"t":87,"u":88},"All 55 fixes","\u002Fguides\u002Ffixes\u002F",{"k":22,"html":90},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 236\" role=\"img\" aria-labelledby=\"hub-guides-matrix-title hub-guides-matrix-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-guides-matrix-title\">Count of each kind of guide per section\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-guides-matrix-desc\">A matrix with one row per kind of guide and one column per section. How-tos: 75 in framework selection, 68 in performance, 102 in deployment. Fixes: 18 in framework selection, 24 in performance, 13 in deployment. Comparisons: 17 in framework selection, 11 in performance, 7 in deployment. Concepts: 11 in framework selection, 0 in performance, 1 in deployment.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"236\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Cpath d=\"M20.0 86.0 L740.0 86.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"90.0\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"390.7\" y=\"90.0\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"567.3\" y=\"90.0\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 119.6 L740.0 119.6\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"123.6\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"390.7\" y=\"123.6\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"567.3\" y=\"123.6\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 153.2 L740.0 153.2\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"157.2\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"390.7\" y=\"157.2\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"567.3\" y=\"157.2\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 186.8 L740.0 186.8\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"190.8\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"567.3\" y=\"190.8\" width=\"168.7\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 220.4 L740.0 220.4\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Where each kind of guide is written\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Kind\u003C\u002Ftext>\n    \u003Ctext x=\"298.3\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Framework selection\u003C\u002Ftext>\n    \u003Ctext x=\"475.0\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Performance\u003C\u002Ftext>\n    \u003Ctext x=\"651.7\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Deployment\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"106.4\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">How-tos\u003C\u002Ftext>\n    \u003Ctext x=\"298.3\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">75\u003C\u002Ftext>\n    \u003Ctext x=\"475.0\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">68\u003C\u002Ftext>\n    \u003Ctext x=\"651.7\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">102\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"140.0\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Fixes\u003C\u002Ftext>\n    \u003Ctext x=\"298.3\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">18\u003C\u002Ftext>\n    \u003Ctext x=\"475.0\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">24\u003C\u002Ftext>\n    \u003Ctext x=\"651.7\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">13\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"173.6\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Comparisons\u003C\u002Ftext>\n    \u003Ctext x=\"298.3\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">17\u003C\u002Ftext>\n    \u003Ctext x=\"475.0\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">11\u003C\u002Ftext>\n    \u003Ctext x=\"651.7\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">7\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"207.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Concepts\u003C\u002Ftext>\n    \u003Ctext x=\"298.3\" y=\"207.0\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">11\u003C\u002Ftext>\n    \u003Ctext x=\"475.0\" y=\"207.0\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">0\u003C\u002Ftext>\n    \u003Ctext x=\"651.7\" y=\"207.0\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">1\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Read across a row to see where a kind of guide is concentrated, and down a column to see what a section is made of.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":92,"items":93,"note":118,"more":119},"Comparisons",[94,98,102,106,110,114],{"t":95,"u":96,"d":97},"Astro vs Eleventy Build Times at 10,000 Pages","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages\u002F","Astro and Eleventy benchmarked on the same docs corpus from 1,000 to 10,000 pages: cold, warm and one-page-edit builds, memory, and where each scales badly.",{"t":99,"u":100,"d":101},"Astro vs Eleventy for Large Docs (1000+ Pages)","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fchoosing-between-astro-and-eleventy-for-large-docs\u002F","A decision guide for documentation sites of 1000+ pages — comparing Astro and Eleventy on build scaling, search, MDX\u002Fcomponents, and authoring ergonomics with measured numbers.",{"t":103,"u":104,"d":105},"Astro Islands vs Full Hydration Performance","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fastro-islands-vs-full-hydration-performance\u002F","Measured comparison of Astro islands against full SPA hydration — JavaScript bytes, Total Blocking Time, and INP numbers, plus which directive to reach for.",{"t":107,"u":108,"d":109},"Cloudflare vs CloudFront Cache Hit Ratios for Static Sites","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fcloudflare-vs-cloudfront-cache-hit-ratios-for-static-sites\u002F","Cloudflare and CloudFront measured serving the same static site: cache hit ratio, origin requests, TTFB by region and cost, plus the settings that moved each.",{"t":111,"u":112,"d":113},"Atomic Deploys vs Incremental Uploads","\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Fatomic-deploys-vs-incremental-uploads\u002F","Why syncing files into a live bucket serves broken pages, how atomic publishing works, and how to build atomicity yourself on S3, object storage or a VM origin.",{"t":115,"u":116,"d":117},"Git-Based CMS Options for Static Sites Compared","\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fgit-based-cms-options-for-static-sites-compared\u002F","Decap, TinaCMS, Sveltia, CloudCannon and Keystatic compared on one static site: editor experience, preview, Git workflow, setup effort, cost and lock-in.","Weighs two or more options against measured criteria.",{"t":120,"u":121},"All 35 comparisons","\u002Fguides\u002Fcomparisons\u002F",{"k":25,"h":123,"items":124,"note":137,"more":138},"Concepts",[125,129,133],{"t":126,"u":127,"d":128},"Best SSG for Non-Developer Technical Writers","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fbest-ssg-for-technical-writers-without-coding-experience\u002F","Choose an SSG for authors who avoid the terminal — prioritize a Git-backed visual editor, schema-validated frontmatter, and cloud CI that deploys on every commit.",{"t":130,"u":131,"d":132},"Choosing an SSG for API Reference Documentation","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fchoosing-an-ssg-for-api-reference-documentation\u002F","API docs are generated, versioned and enormous. Compare Hugo, Astro, Eleventy and Next export on build scale, schema-driven pages, versioning and search.",{"t":134,"u":135,"d":136},"Docs-as-Code Review Workflow for Writers","\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fdocs-as-code-review-workflow-for-writers\u002F","Branch naming, small pull requests, preview-first review and a two-pass checklist — a docs-as-code process that non-engineers can follow and reviewers can sustain.","Explains how something works and when it matters.",{"t":139,"u":140},"All 12 concepts","\u002Fguides\u002Fconcepts\u002F",1790943190465]