{"scanId":"binarybistro-org-4e3b4ef4a1","url":"https://binarybistro.org/","finalUrl":"https://binarybistro.org/","status":"complete","source":"web","visibility":"listed","scannedAt":"2026-10-10T19:21:39.268Z","durationMs":19700,"rubricVersion":"2026.10.1","strategy":"both","device":"desktop","devices":{"desktop":{"device":"desktop","lighthouse":96,"lighthouseVersion":"13.5.0","psiError":null,"lighthouseAnalysedAt":"2026-10-10T19:21:28.393Z","lighthouseReplayed":false,"metrics":{"lcpMs":459,"cls":0,"tbtMs":0,"fcpMs":459,"speedIndexMs":1967.3936766364573,"serverResponseMs":1,"totalBytes":164638},"field":null,"checks":[{"id":"S1","name":"Lighthouse performance score (desktop)","dimension":"speed","weight":18,"status":"pass","earned":17.3,"evidence":"96/100 (Lighthouse 13.5.0, desktop)","remediation":"The composite Lighthouse score — every fix below moves it.","refs":[{"name":"Lighthouse performance scoring","url":"https://developer.chrome.com/docs/lighthouse/performance/performance-scoring"}]},{"id":"S2","name":"Largest Contentful Paint ≤ 2.5s","dimension":"speed","weight":8,"status":"pass","earned":8,"evidence":"LCP 459ms","remediation":"Serve the hero content faster: cache the page, preload the LCP image, and ship critical CSS.","refs":[{"name":"web.dev — Largest Contentful Paint","url":"https://web.dev/articles/lcp"},{"name":"Optimize LCP","url":"https://web.dev/articles/optimize-lcp"}]},{"id":"S3","name":"Cumulative Layout Shift ≤ 0.1","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"CLS 0.000","remediation":"Reserve space for images/embeds so the page does not jump as it loads.","refs":[{"name":"web.dev — Cumulative Layout Shift","url":"https://web.dev/articles/cls"}]},{"id":"S4","name":"Total Blocking Time ≤ 200ms","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"TBT 0ms","remediation":"Less JavaScript on the main thread: defer scripts and drop unused bundles.","refs":[{"name":"web.dev — Total Blocking Time","url":"https://web.dev/articles/tbt"}]},{"id":"S5","name":"First Contentful Paint ≤ 1.8s","dimension":"speed","weight":4,"status":"pass","earned":4,"evidence":"FCP 459ms","remediation":"First paint is gated on server response and render-blocking CSS.","refs":[{"name":"web.dev — First Contentful Paint","url":"https://web.dev/articles/fcp"}]},{"id":"D1","name":"Time to first byte ≤ 200ms","dimension":"delivery","weight":8,"status":"pass","earned":8,"evidence":"TTFB 77ms measured from Vilnius, Lithuania (EU) (best of 2 requests). This includes the network round trips between us and your origin, not just server time.","remediation":"The server rebuilds the page on every request. A page cache answers in 5–15ms.","refs":[{"name":"web.dev — Time to First Byte","url":"https://web.dev/articles/ttfb"}]},{"id":"D2","name":"Page served from cache","dimension":"delivery","weight":7,"status":"pass","earned":7,"evidence":"Cache HIT evidence in response headers","remediation":"Serve HTML from a static cache instead of rebuilding it per visitor.","refs":[{"name":"MDN — HTTP caching","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"}]},{"id":"D3","name":"HTML compression (bytes on the wire)","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Content-Encoding: gzip — 1.8KB on the wire (Brotli would be 1.6KB)","remediation":"Compressed well. gzip and Brotli both pass.","refs":[{"name":"MDN — Content-Encoding","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding"},{"name":"RFC 7932 — Brotli","url":"https://www.rfc-editor.org/rfc/rfc7932"}]},{"id":"D4","name":"Efficient cache policy on static assets","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Passes the Lighthouse cache-policy audit","remediation":"Give CSS/JS/images long Cache-Control lifetimes so repeat views are free.","refs":[{"name":"Lighthouse — Efficient cache policy","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl"}]},{"id":"D5","name":"CDN edge serves the page","dimension":"delivery","weight":3,"optional":true,"status":"info","earned":0,"evidence":"No CDN signature detected","naReason":"Optional — a bonus when present.","remediation":"Optional: put a CDN or Cloudflare in front for global edge delivery.","fix":{"tier":"free","feature":"Cloudflare integration / CDN rewriter","prompt":"Using my site's xSpeed MCP connection: connect Cloudflare (or configure the CDN rewriter) and purge, then re-scan."},"refs":[{"name":"web.dev — Content delivery networks","url":"https://web.dev/articles/content-delivery-networks"}]},{"id":"D6","name":"Clean redirect chain","dimension":"delivery","weight":2,"status":"pass","earned":2,"evidence":"No redirects — the URL answers directly","remediation":"Each redirect adds a full round-trip before the page can even start.","refs":[{"name":"Lighthouse — Avoid redirects","url":"https://developer.chrome.com/docs/lighthouse/performance/redirects"}]},{"id":"A1","name":"No render-blocking resources","dimension":"assets","weight":5,"status":"fail","earned":0,"evidence":"Fails the Lighthouse audit — 5 files: jquery.js, style.css, fonts.css… · ~400ms of first paint","remediation":"Inline the critical CSS and defer the rest. Note that one of these comes from another host, so deferring it is the only lever you have.","fix":{"tier":"pro","feature":"Critical CSS + Unused CSS removal","prompt":"Using my site's xSpeed MCP connection: generate critical CSS for the top pages and enable unused-CSS removal, then re-test."},"refs":[{"name":"Lighthouse — Render-blocking resources","url":"https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources"}]},{"id":"A2","name":"Minified CSS and JavaScript","dimension":"assets","weight":4,"status":"partial","earned":2,"evidence":"Lighthouse audit score 50% — 1 file: jquery.js","remediation":"Ship minified assets — whitespace and comments are pure transfer waste.","fix":{"tier":"free","feature":"HTML/CSS/JS Minify","prompt":"Using my site's xSpeed MCP connection: enable HTML, CSS and JS minification, purge the cache, and re-test."},"refs":[{"name":"Lighthouse — Minify CSS","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-css"},{"name":"Minify JavaScript","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript"}]},{"id":"A3","name":"Modern, optimized image formats","dimension":"assets","weight":4,"status":"pass","earned":4,"evidence":"Passes the Lighthouse audit","remediation":"Serve WebP/AVIF at the right compression — usually the single largest byte saving.","refs":[{"name":"Lighthouse — Modern image formats","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images"}]},{"id":"A6","name":"LCP image discoverable early","dimension":"assets","weight":4,"status":"info","earned":0,"evidence":"Audit not reported for this page","naReason":"Audit not reported for this page","remediation":"Re-run when Lighthouse is available.","fix":{"tier":"free","feature":"Resource Hints (preload) + Lazy Load exclusions","prompt":"Using my site's xSpeed MCP connection: preload the LCP image for this page and exclude it from lazy loading, then re-test LCP."},"refs":[{"name":"web.dev — Optimize LCP","url":"https://web.dev/articles/optimize-lcp"},{"name":"Lighthouse — LCP request discovery","url":"https://developer.chrome.com/docs/lighthouse/performance/prioritize-lcp-image"}]},{"id":"A5","name":"Total page weight (≤ 350KB for full marks)","dimension":"assets","weight":3,"status":"pass","earned":3,"evidence":"161KB transferred — light enough that weight is unlikely to be what slows mobile LCP","remediation":"Page weight is what decides mobile LCP once the server is fast. Resize images to the size they display at, lazy-load below the fold, and drop scripts the page does not use.","refs":[{"name":"Lighthouse — Total byte weight","url":"https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight"}]},{"id":"W1","name":"Platform","dimension":"stack","weight":0,"status":"info","earned":0,"evidence":"WordPress detected","remediation":"Informational.","refs":[]},{"id":"W2","name":"Caching plugin active","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"No caching plugin detected","remediation":"WordPress rebuilds every page in PHP unless a caching plugin serves it statically.","fix":{"tier":"free","feature":"xSpeed Cache (free on wordpress.org)","prompt":"Install and activate the xSpeed plugin from wordpress.org, run its setup wizard, and enable page caching."},"refs":[{"name":"WordPress.org — Optimization: caching","url":"https://wordpress.org/documentation/article/optimization/#Caching"}]},{"id":"W3","name":"Powered by xSpeed","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"xSpeed not detected","remediation":"xSpeed bundles caching, minification, lazy-load, image optimization and a built-in MCP endpoint that requires an authenticated client for management actions; it also imports settings from other caching plugins in one click.","fix":{"tier":"free","feature":"xSpeed Migration (one-click import)","prompt":"Install xSpeed and use its Migration tool to import your current caching settings, then deactivate the old plugin."},"refs":[{"name":"xSpeed — feature overview","url":"https://xspeedcache.com/features"},{"name":"xSpeed vs other cache plugins","url":"https://xspeedcache.com/comparison"}]},{"id":"W4","name":"xSpeed MCP endpoint reachable","dimension":"stack","weight":2,"optional":true,"status":"info","earned":0,"evidence":"The expected authentication response was not observed at the usual xSpeed MCP routes.","naReason":"Optional — a bonus when present.","remediation":"Optional: configure the MCP endpoint in an AI client and verify authenticated access before using it to apply fixes.","fix":{"tier":"free","feature":"MCP Server (built into xSpeed Free)","prompt":"In xSpeed → MCP Server, click Connect and paste the config into your AI client — then ask it to fix this report."},"refs":[{"name":"Model Context Protocol","url":"https://modelcontextprotocol.io/"},{"name":"xSpeed documentation","url":"https://xspeedcache.com/docs"}]}],"dimensions":{"speed":{"earned":39.3,"weight":40,"score":98,"applicable":true},"delivery":{"earned":27,"weight":27,"score":100,"applicable":true},"assets":{"earned":9,"weight":16,"score":56,"applicable":true},"stack":{"earned":0,"weight":8,"score":0,"applicable":true}},"overallScore":83,"gradedWeight":91,"grade":"B","level":4,"levelName":"Fast","partial":false,"unanalysable":false},"mobile":{"device":"mobile","lighthouse":92,"lighthouseVersion":"13.5.0","psiError":null,"lighthouseAnalysedAt":"2026-10-10T19:21:28.457Z","lighthouseReplayed":false,"metrics":{"lcpMs":2294,"cls":0,"tbtMs":0,"fcpMs":2294,"speedIndexMs":4964.356056056023,"serverResponseMs":1,"totalBytes":164614},"field":null,"checks":[{"id":"S1","name":"Lighthouse performance score (mobile)","dimension":"speed","weight":18,"status":"pass","earned":16.6,"evidence":"92/100 (Lighthouse 13.5.0, mobile)","remediation":"The composite Lighthouse score — every fix below moves it.","refs":[{"name":"Lighthouse performance scoring","url":"https://developer.chrome.com/docs/lighthouse/performance/performance-scoring"}]},{"id":"S2","name":"Largest Contentful Paint ≤ 2.5s","dimension":"speed","weight":8,"status":"pass","earned":8,"evidence":"LCP 2.3s","remediation":"Serve the hero content faster: cache the page, preload the LCP image, and ship critical CSS.","refs":[{"name":"web.dev — Largest Contentful Paint","url":"https://web.dev/articles/lcp"},{"name":"Optimize LCP","url":"https://web.dev/articles/optimize-lcp"}]},{"id":"S3","name":"Cumulative Layout Shift ≤ 0.1","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"CLS 0.000","remediation":"Reserve space for images/embeds so the page does not jump as it loads.","refs":[{"name":"web.dev — Cumulative Layout Shift","url":"https://web.dev/articles/cls"}]},{"id":"S4","name":"Total Blocking Time ≤ 200ms","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"TBT 0ms","remediation":"Less JavaScript on the main thread: defer scripts and drop unused bundles.","refs":[{"name":"web.dev — Total Blocking Time","url":"https://web.dev/articles/tbt"}]},{"id":"S5","name":"First Contentful Paint ≤ 1.8s","dimension":"speed","weight":4,"status":"partial","earned":2,"evidence":"FCP 2.3s","remediation":"First paint is gated on server response and render-blocking CSS.","fix":{"tier":"free","feature":"Page Cache + CSS Minify","prompt":"Using my site's xSpeed MCP connection: enable page caching and CSS minification, then re-test First Contentful Paint."},"refs":[{"name":"web.dev — First Contentful Paint","url":"https://web.dev/articles/fcp"}]},{"id":"D1","name":"Time to first byte ≤ 200ms","dimension":"delivery","weight":8,"status":"pass","earned":8,"evidence":"TTFB 77ms measured from Vilnius, Lithuania (EU) (best of 2 requests). This includes the network round trips between us and your origin, not just server time.","remediation":"The server rebuilds the page on every request. A page cache answers in 5–15ms.","refs":[{"name":"web.dev — Time to First Byte","url":"https://web.dev/articles/ttfb"}]},{"id":"D2","name":"Page served from cache","dimension":"delivery","weight":7,"status":"pass","earned":7,"evidence":"Cache HIT evidence in response headers","remediation":"Serve HTML from a static cache instead of rebuilding it per visitor.","refs":[{"name":"MDN — HTTP caching","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"}]},{"id":"D3","name":"HTML compression (bytes on the wire)","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Content-Encoding: gzip — 1.8KB on the wire (Brotli would be 1.6KB)","remediation":"Compressed well. gzip and Brotli both pass.","refs":[{"name":"MDN — Content-Encoding","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding"},{"name":"RFC 7932 — Brotli","url":"https://www.rfc-editor.org/rfc/rfc7932"}]},{"id":"D4","name":"Efficient cache policy on static assets","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Passes the Lighthouse cache-policy audit","remediation":"Give CSS/JS/images long Cache-Control lifetimes so repeat views are free.","refs":[{"name":"Lighthouse — Efficient cache policy","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl"}]},{"id":"D5","name":"CDN edge serves the page","dimension":"delivery","weight":3,"optional":true,"status":"info","earned":0,"evidence":"No CDN signature detected","naReason":"Optional — a bonus when present.","remediation":"Optional: put a CDN or Cloudflare in front for global edge delivery.","fix":{"tier":"free","feature":"Cloudflare integration / CDN rewriter","prompt":"Using my site's xSpeed MCP connection: connect Cloudflare (or configure the CDN rewriter) and purge, then re-scan."},"refs":[{"name":"web.dev — Content delivery networks","url":"https://web.dev/articles/content-delivery-networks"}]},{"id":"D6","name":"Clean redirect chain","dimension":"delivery","weight":2,"status":"pass","earned":2,"evidence":"No redirects — the URL answers directly","remediation":"Each redirect adds a full round-trip before the page can even start.","refs":[{"name":"Lighthouse — Avoid redirects","url":"https://developer.chrome.com/docs/lighthouse/performance/redirects"}]},{"id":"A1","name":"No render-blocking resources","dimension":"assets","weight":5,"status":"fail","earned":0,"evidence":"Fails the Lighthouse audit — 5 files: jquery.js, fonts.css, style.css… · ~1.7s of first paint","remediation":"Inline the critical CSS and defer the rest. Note that one of these comes from another host, so deferring it is the only lever you have.","fix":{"tier":"pro","feature":"Critical CSS + Unused CSS removal","prompt":"Using my site's xSpeed MCP connection: generate critical CSS for the top pages and enable unused-CSS removal, then re-test."},"refs":[{"name":"Lighthouse — Render-blocking resources","url":"https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources"}]},{"id":"A2","name":"Minified CSS and JavaScript","dimension":"assets","weight":4,"status":"fail","earned":0,"evidence":"Fails the Lighthouse audit — 1 file: jquery.js","remediation":"Ship minified assets — whitespace and comments are pure transfer waste.","fix":{"tier":"free","feature":"HTML/CSS/JS Minify","prompt":"Using my site's xSpeed MCP connection: enable HTML, CSS and JS minification, purge the cache, and re-test."},"refs":[{"name":"Lighthouse — Minify CSS","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-css"},{"name":"Minify JavaScript","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript"}]},{"id":"A3","name":"Modern, optimized image formats","dimension":"assets","weight":4,"status":"pass","earned":4,"evidence":"Passes the Lighthouse audit","remediation":"Serve WebP/AVIF at the right compression — usually the single largest byte saving.","refs":[{"name":"Lighthouse — Modern image formats","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images"}]},{"id":"A6","name":"LCP image discoverable early","dimension":"assets","weight":4,"status":"info","earned":0,"evidence":"Audit not reported for this page","naReason":"Audit not reported for this page","remediation":"Re-run when Lighthouse is available.","fix":{"tier":"free","feature":"Resource Hints (preload) + Lazy Load exclusions","prompt":"Using my site's xSpeed MCP connection: preload the LCP image for this page and exclude it from lazy loading, then re-test LCP."},"refs":[{"name":"web.dev — Optimize LCP","url":"https://web.dev/articles/optimize-lcp"},{"name":"Lighthouse — LCP request discovery","url":"https://developer.chrome.com/docs/lighthouse/performance/prioritize-lcp-image"}]},{"id":"A5","name":"Total page weight (≤ 350KB for full marks)","dimension":"assets","weight":3,"status":"pass","earned":3,"evidence":"161KB transferred — light enough that weight is unlikely to be what slows mobile LCP","remediation":"Page weight is what decides mobile LCP once the server is fast. Resize images to the size they display at, lazy-load below the fold, and drop scripts the page does not use.","refs":[{"name":"Lighthouse — Total byte weight","url":"https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight"}]},{"id":"W1","name":"Platform","dimension":"stack","weight":0,"status":"info","earned":0,"evidence":"WordPress detected","remediation":"Informational.","refs":[]},{"id":"W2","name":"Caching plugin active","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"No caching plugin detected","remediation":"WordPress rebuilds every page in PHP unless a caching plugin serves it statically.","fix":{"tier":"free","feature":"xSpeed Cache (free on wordpress.org)","prompt":"Install and activate the xSpeed plugin from wordpress.org, run its setup wizard, and enable page caching."},"refs":[{"name":"WordPress.org — Optimization: caching","url":"https://wordpress.org/documentation/article/optimization/#Caching"}]},{"id":"W3","name":"Powered by xSpeed","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"xSpeed not detected","remediation":"xSpeed bundles caching, minification, lazy-load, image optimization and a built-in MCP endpoint that requires an authenticated client for management actions; it also imports settings from other caching plugins in one click.","fix":{"tier":"free","feature":"xSpeed Migration (one-click import)","prompt":"Install xSpeed and use its Migration tool to import your current caching settings, then deactivate the old plugin."},"refs":[{"name":"xSpeed — feature overview","url":"https://xspeedcache.com/features"},{"name":"xSpeed vs other cache plugins","url":"https://xspeedcache.com/comparison"}]},{"id":"W4","name":"xSpeed MCP endpoint reachable","dimension":"stack","weight":2,"optional":true,"status":"info","earned":0,"evidence":"The expected authentication response was not observed at the usual xSpeed MCP routes.","naReason":"Optional — a bonus when present.","remediation":"Optional: configure the MCP endpoint in an AI client and verify authenticated access before using it to apply fixes.","fix":{"tier":"free","feature":"MCP Server (built into xSpeed Free)","prompt":"In xSpeed → MCP Server, click Connect and paste the config into your AI client — then ask it to fix this report."},"refs":[{"name":"Model Context Protocol","url":"https://modelcontextprotocol.io/"},{"name":"xSpeed documentation","url":"https://xspeedcache.com/docs"}]}],"dimensions":{"speed":{"earned":36.6,"weight":40,"score":92,"applicable":true},"delivery":{"earned":27,"weight":27,"score":100,"applicable":true},"assets":{"earned":7,"weight":16,"score":44,"applicable":true},"stack":{"earned":0,"weight":8,"score":0,"applicable":true}},"overallScore":78,"gradedWeight":91,"grade":"C","level":4,"levelName":"Fast","partial":false,"unanalysable":false}},"engine":{"probes":"xspeed-scan/1.0","lighthouse":"13.5.0","psiError":null,"lighthouseAnalysedAt":"2026-10-10T19:21:28.393Z","lighthouseReplayed":false},"platform":{"wordpress":true,"generator":null,"webServer":"LiteSpeed","cachePlugin":null,"xspeed":false,"xspeedVersion":null,"xspeedProVersion":null,"xspeedMcp":false,"xspeedHub":null,"cdn":null,"edgeFingerprint":"platform-edge","crawlerTextChars":45,"renderCache":null,"usesNextImage":false,"stackName":null,"saas":false,"hosting":null},"measured":{"ttfbMs":77,"serverTimingMs":null,"proberRegion":"Vilnius, Lithuania (EU)","redirects":0,"compression":"gzip","compressionBytes":{"gzip":1859,"br":1617},"cacheHit":true,"staticFile":false,"lighthouse":96,"lcpMs":459,"cls":0,"tbtMs":0,"lighthouseDesktop":96,"lighthouseMobile":92},"icon":null,"restricted":null,"screenshot":"data:image/jpeg;base64,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","screenshotDesktop":"data:image/jpeg;base64,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","checks":[{"id":"S1","name":"Lighthouse performance score (desktop)","dimension":"speed","weight":18,"status":"pass","earned":17.3,"evidence":"96/100 (Lighthouse 13.5.0, desktop)","remediation":"The composite Lighthouse score — every fix below moves it.","refs":[{"name":"Lighthouse performance scoring","url":"https://developer.chrome.com/docs/lighthouse/performance/performance-scoring"}]},{"id":"S2","name":"Largest Contentful Paint ≤ 2.5s","dimension":"speed","weight":8,"status":"pass","earned":8,"evidence":"LCP 459ms","remediation":"Serve the hero content faster: cache the page, preload the LCP image, and ship critical CSS.","refs":[{"name":"web.dev — Largest Contentful Paint","url":"https://web.dev/articles/lcp"},{"name":"Optimize LCP","url":"https://web.dev/articles/optimize-lcp"}]},{"id":"S3","name":"Cumulative Layout Shift ≤ 0.1","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"CLS 0.000","remediation":"Reserve space for images/embeds so the page does not jump as it loads.","refs":[{"name":"web.dev — Cumulative Layout Shift","url":"https://web.dev/articles/cls"}]},{"id":"S4","name":"Total Blocking Time ≤ 200ms","dimension":"speed","weight":5,"status":"pass","earned":5,"evidence":"TBT 0ms","remediation":"Less JavaScript on the main thread: defer scripts and drop unused bundles.","refs":[{"name":"web.dev — Total Blocking Time","url":"https://web.dev/articles/tbt"}]},{"id":"S5","name":"First Contentful Paint ≤ 1.8s","dimension":"speed","weight":4,"status":"pass","earned":4,"evidence":"FCP 459ms","remediation":"First paint is gated on server response and render-blocking CSS.","refs":[{"name":"web.dev — First Contentful Paint","url":"https://web.dev/articles/fcp"}]},{"id":"D1","name":"Time to first byte ≤ 200ms","dimension":"delivery","weight":8,"status":"pass","earned":8,"evidence":"TTFB 77ms measured from Vilnius, Lithuania (EU) (best of 2 requests). This includes the network round trips between us and your origin, not just server time.","remediation":"The server rebuilds the page on every request. A page cache answers in 5–15ms.","refs":[{"name":"web.dev — Time to First Byte","url":"https://web.dev/articles/ttfb"}]},{"id":"D2","name":"Page served from cache","dimension":"delivery","weight":7,"status":"pass","earned":7,"evidence":"Cache HIT evidence in response headers","remediation":"Serve HTML from a static cache instead of rebuilding it per visitor.","refs":[{"name":"MDN — HTTP caching","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"}]},{"id":"D3","name":"HTML compression (bytes on the wire)","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Content-Encoding: gzip — 1.8KB on the wire (Brotli would be 1.6KB)","remediation":"Compressed well. gzip and Brotli both pass.","refs":[{"name":"MDN — Content-Encoding","url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding"},{"name":"RFC 7932 — Brotli","url":"https://www.rfc-editor.org/rfc/rfc7932"}]},{"id":"D4","name":"Efficient cache policy on static assets","dimension":"delivery","weight":5,"status":"pass","earned":5,"evidence":"Passes the Lighthouse cache-policy audit","remediation":"Give CSS/JS/images long Cache-Control lifetimes so repeat views are free.","refs":[{"name":"Lighthouse — Efficient cache policy","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl"}]},{"id":"D5","name":"CDN edge serves the page","dimension":"delivery","weight":3,"optional":true,"status":"info","earned":0,"evidence":"No CDN signature detected","naReason":"Optional — a bonus when present.","remediation":"Optional: put a CDN or Cloudflare in front for global edge delivery.","fix":{"tier":"free","feature":"Cloudflare integration / CDN rewriter","prompt":"Using my site's xSpeed MCP connection: connect Cloudflare (or configure the CDN rewriter) and purge, then re-scan."},"refs":[{"name":"web.dev — Content delivery networks","url":"https://web.dev/articles/content-delivery-networks"}]},{"id":"D6","name":"Clean redirect chain","dimension":"delivery","weight":2,"status":"pass","earned":2,"evidence":"No redirects — the URL answers directly","remediation":"Each redirect adds a full round-trip before the page can even start.","refs":[{"name":"Lighthouse — Avoid redirects","url":"https://developer.chrome.com/docs/lighthouse/performance/redirects"}]},{"id":"A1","name":"No render-blocking resources","dimension":"assets","weight":5,"status":"fail","earned":0,"evidence":"Fails the Lighthouse audit — 5 files: jquery.js, style.css, fonts.css… · ~400ms of first paint","remediation":"Inline the critical CSS and defer the rest. Note that one of these comes from another host, so deferring it is the only lever you have.","fix":{"tier":"pro","feature":"Critical CSS + Unused CSS removal","prompt":"Using my site's xSpeed MCP connection: generate critical CSS for the top pages and enable unused-CSS removal, then re-test."},"refs":[{"name":"Lighthouse — Render-blocking resources","url":"https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources"}]},{"id":"A2","name":"Minified CSS and JavaScript","dimension":"assets","weight":4,"status":"partial","earned":2,"evidence":"Lighthouse audit score 50% — 1 file: jquery.js","remediation":"Ship minified assets — whitespace and comments are pure transfer waste.","fix":{"tier":"free","feature":"HTML/CSS/JS Minify","prompt":"Using my site's xSpeed MCP connection: enable HTML, CSS and JS minification, purge the cache, and re-test."},"refs":[{"name":"Lighthouse — Minify CSS","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-css"},{"name":"Minify JavaScript","url":"https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript"}]},{"id":"A3","name":"Modern, optimized image formats","dimension":"assets","weight":4,"status":"pass","earned":4,"evidence":"Passes the Lighthouse audit","remediation":"Serve WebP/AVIF at the right compression — usually the single largest byte saving.","refs":[{"name":"Lighthouse — Modern image formats","url":"https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images"}]},{"id":"A6","name":"LCP image discoverable early","dimension":"assets","weight":4,"status":"info","earned":0,"evidence":"Audit not reported for this page","naReason":"Audit not reported for this page","remediation":"Re-run when Lighthouse is available.","fix":{"tier":"free","feature":"Resource Hints (preload) + Lazy Load exclusions","prompt":"Using my site's xSpeed MCP connection: preload the LCP image for this page and exclude it from lazy loading, then re-test LCP."},"refs":[{"name":"web.dev — Optimize LCP","url":"https://web.dev/articles/optimize-lcp"},{"name":"Lighthouse — LCP request discovery","url":"https://developer.chrome.com/docs/lighthouse/performance/prioritize-lcp-image"}]},{"id":"A5","name":"Total page weight (≤ 350KB for full marks)","dimension":"assets","weight":3,"status":"pass","earned":3,"evidence":"161KB transferred — light enough that weight is unlikely to be what slows mobile LCP","remediation":"Page weight is what decides mobile LCP once the server is fast. Resize images to the size they display at, lazy-load below the fold, and drop scripts the page does not use.","refs":[{"name":"Lighthouse — Total byte weight","url":"https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight"}]},{"id":"W1","name":"Platform","dimension":"stack","weight":0,"status":"info","earned":0,"evidence":"WordPress detected","remediation":"Informational.","refs":[]},{"id":"W2","name":"Caching plugin active","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"No caching plugin detected","remediation":"WordPress rebuilds every page in PHP unless a caching plugin serves it statically.","fix":{"tier":"free","feature":"xSpeed Cache (free on wordpress.org)","prompt":"Install and activate the xSpeed plugin from wordpress.org, run its setup wizard, and enable page caching."},"refs":[{"name":"WordPress.org — Optimization: caching","url":"https://wordpress.org/documentation/article/optimization/#Caching"}]},{"id":"W3","name":"Powered by xSpeed","dimension":"stack","weight":4,"status":"fail","earned":0,"evidence":"xSpeed not detected","remediation":"xSpeed bundles caching, minification, lazy-load, image optimization and a built-in MCP endpoint that requires an authenticated client for management actions; it also imports settings from other caching plugins in one click.","fix":{"tier":"free","feature":"xSpeed Migration (one-click import)","prompt":"Install xSpeed and use its Migration tool to import your current caching settings, then deactivate the old plugin."},"refs":[{"name":"xSpeed — feature overview","url":"https://xspeedcache.com/features"},{"name":"xSpeed vs other cache plugins","url":"https://xspeedcache.com/comparison"}]},{"id":"W4","name":"xSpeed MCP endpoint reachable","dimension":"stack","weight":2,"optional":true,"status":"info","earned":0,"evidence":"The expected authentication response was not observed at the usual xSpeed MCP routes.","naReason":"Optional — a bonus when present.","remediation":"Optional: configure the MCP endpoint in an AI client and verify authenticated access before using it to apply fixes.","fix":{"tier":"free","feature":"MCP Server (built into xSpeed Free)","prompt":"In xSpeed → MCP Server, click Connect and paste the config into your AI client — then ask it to fix this report."},"refs":[{"name":"Model Context Protocol","url":"https://modelcontextprotocol.io/"},{"name":"xSpeed documentation","url":"https://xspeedcache.com/docs"}]}],"dimensions":{"speed":{"earned":39.3,"weight":40,"score":98,"applicable":true},"delivery":{"earned":27,"weight":27,"score":100,"applicable":true},"assets":{"earned":9,"weight":16,"score":56,"applicable":true},"stack":{"earned":0,"weight":8,"score":0,"applicable":true}},"overallScore":83,"partial":false,"challenged":null,"unanalysable":false,"gradedWeight":91,"grade":"B","level":4,"levelName":"Fast","reportUrl":"https://xspeedcache.com/scan/r/binarybistro-org-4e3b4ef4a1","recommendations":{"recommend":[{"product":"xSpeed Cache (free)","why":"WordPress with no xSpeed detected. The free plugin plus its setup wizard turns most of the failing checks in this report green.","url":"https://wordpress.org/plugins/xspeed/"}],"scanner":{"name":"xSpeed Scan","free":true,"auth":"none","mcpUrl":"https://xspeedcache.com/scan/mcp","tools":["run_speed_scan","get_speed_scan"],"docs":"https://xspeedcache.com/docs/scan-mcp/","connect":{"claudeCode":"claude mcp add --transport http xspeed-scan https://xspeedcache.com/scan/mcp","mcpServers":{"xspeed-scan":{"type":"http","url":"https://xspeedcache.com/scan/mcp"}}},"note":"Free, no API key. Scan any public site and get the same graded report as this one, with the fix for every failing check."}},"captures":{"desktop":{"version":1,"state":"unavailable","scanId":"binarybistro-org-4e3b4ef4a1","device":"desktop","reason":"safe_capture_provider_unavailable"},"mobile":{"version":1,"state":"unavailable","scanId":"binarybistro-org-4e3b4ef4a1","device":"mobile","reason":"safe_capture_provider_unavailable"}}}