blog.bythewood.me

https://blog.bythewood.me
http status
200
OK · all clear
tls cert
valid
chain + trust
security
pass
header scan
response
35 ms
rolling avg
Accessibility
96%
Best practices
100%
Performance
82%
SEO
100%
response time · last 31 checks
status codes
uptime split
security · header scan
Use HTTPS pass
Set MIME types pass
Content sniff protection pass
Clickjack protection pass
XSS protection pass
Hide server version pass
HSTS enabled pass
HSTS preload pass

Lighthouse combines these weighted metrics to produce the Performance score. Opportunities below are the biggest wins; savings are estimated against the audited URL only.

TBT · 30.0%
270 ms
Total Blocking Time
LCP · 25.0%
3.9 s
Largest Contentful Paint
CLS · 25.0%
0
Cumulative Layout Shift
FCP · 10.0%
1.2 s
First Contentful Paint
SI · 10.0%
2.7 s
Speed Index
Audit Detail Est. savings
Properly size images Est savings of 520 KiB 1.6 s
Defer offscreen images Est savings of 200 KiB 900 ms
Eliminate render-blocking resources Est savings of 200 ms 202 ms
Preconnect to required origins Est savings of 170 ms
Forced reflow
Improve image delivery Est savings of 536 KiB
LCP request discovery
Network dependency tree
Render blocking requests Est savings of 220 ms
Time to Interactive 3.9 s
Severity URL Issue Item
WARNING / 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/ai/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/coding/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/databases/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/performance/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/privacy/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/rust/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/security/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/sysadmin/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/tag/webdev/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/year/2026/ 1 form input(s) without associated label https://blog.bythewood.me/search/
WARNING /blog/year/2022/ 1 form input(s) without associated label https://blog.bythewood.me/search/
INFO / 7 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/ 24 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/the-rust-ecosystem-is-unreasonably-good/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/rewriting-my-blog-in-rust/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/self-host-your-fonts/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/cool-uris-dont-change-unless-an-ai-rewrites-your-blog/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/using-vite-with-django-in-2026/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/optimizing-sqlite-for-django-in-production/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/managing-a-python-project-with-uv-in-2026/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/capturing-screenshots-with-chromium-using-python/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/code-formatting-a-python-project-in-2022/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/finding-broken-external-links-on-websites-using-scrapy/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/minimal-automated-updates-for-alpine-linux/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/make-your-own-new-tab-browser-extension-in-50-lines-of-code/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/adding-dark-mode-with-automatic-system-preference-selection/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/set-up-automated-server-backups-with-borg/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/using-codemirror-to-show-formatted-code-in-wagtail/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/caddy-configuration-for-django-with-some-sensible-defaults/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/counting-table-row-counts-in-postgresql/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/using-editorconfig-to-improve-coding-style-consistency/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/running-a-simple-django-website-in-docker/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /posts/generating-a-ed25519-ssh-key-with-openssh/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/ai/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/coding/ 12 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/databases/ 9 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/performance/ 10 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/privacy/ 8 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/rust/ 9 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/security/ 9 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/sysadmin/ 9 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/tag/webdev/ 15 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/year/2026/ 10 link(s) have no visible text https://blog.bythewood.me/
INFO /blog/year/2022/ 17 link(s) have no visible text https://blog.bythewood.me/
Severity URL Issue Item
WARNING / Thin content (256 words)
Severity URL Issue Item
WARNING / Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING / Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING / Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/the-rust-ecosystem-is-unreasonably-good/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/the-rust-ecosystem-is-unreasonably-good/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/the-rust-ecosystem-is-unreasonably-good/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/rewriting-my-blog-in-rust/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/rewriting-my-blog-in-rust/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/rewriting-my-blog-in-rust/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/self-host-your-fonts/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/self-host-your-fonts/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/self-host-your-fonts/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/cool-uris-dont-change-unless-an-ai-rewrites-your-blog/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/cool-uris-dont-change-unless-an-ai-rewrites-your-blog/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/cool-uris-dont-change-unless-an-ai-rewrites-your-blog/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/using-vite-with-django-in-2026/ Broken external link (status 403) https://medium.com/@ratchapol.thaworn/migrating-from-webpack-to-vite-real-world-lessons-from-a-production-frontend-project-ea4bb53a9d58
WARNING /posts/using-vite-with-django-in-2026/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/using-vite-with-django-in-2026/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/using-vite-with-django-in-2026/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/optimizing-sqlite-for-django-in-production/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/optimizing-sqlite-for-django-in-production/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/optimizing-sqlite-for-django-in-production/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/managing-a-python-project-with-uv-in-2026/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/managing-a-python-project-with-uv-in-2026/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/managing-a-python-project-with-uv-in-2026/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/capturing-screenshots-with-chromium-using-python/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/capturing-screenshots-with-chromium-using-python/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/capturing-screenshots-with-chromium-using-python/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/code-formatting-a-python-project-in-2022/ Broken external link (status 404) https://marketplace.visualstudio.com/items?itemName=ms-python.python
WARNING /posts/code-formatting-a-python-project-in-2022/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/code-formatting-a-python-project-in-2022/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/code-formatting-a-python-project-in-2022/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/finding-broken-external-links-on-websites-using-scrapy/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/finding-broken-external-links-on-websites-using-scrapy/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/finding-broken-external-links-on-websites-using-scrapy/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/minimal-automated-updates-for-alpine-linux/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/minimal-automated-updates-for-alpine-linux/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/minimal-automated-updates-for-alpine-linux/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/make-your-own-new-tab-browser-extension-in-50-lines-of-code/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/make-your-own-new-tab-browser-extension-in-50-lines-of-code/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/make-your-own-new-tab-browser-extension-in-50-lines-of-code/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/adding-dark-mode-with-automatic-system-preference-selection/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/adding-dark-mode-with-automatic-system-preference-selection/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/adding-dark-mode-with-automatic-system-preference-selection/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/set-up-automated-server-backups-with-borg/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/set-up-automated-server-backups-with-borg/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/set-up-automated-server-backups-with-borg/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/using-codemirror-to-show-formatted-code-in-wagtail/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/using-codemirror-to-show-formatted-code-in-wagtail/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/using-codemirror-to-show-formatted-code-in-wagtail/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/caddy-configuration-for-django-with-some-sensible-defaults/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/caddy-configuration-for-django-with-some-sensible-defaults/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/caddy-configuration-for-django-with-some-sensible-defaults/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/counting-table-row-counts-in-postgresql/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/counting-table-row-counts-in-postgresql/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/counting-table-row-counts-in-postgresql/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/using-editorconfig-to-improve-coding-style-consistency/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/using-editorconfig-to-improve-coding-style-consistency/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/using-editorconfig-to-improve-coding-style-consistency/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/running-a-simple-django-website-in-docker/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/running-a-simple-django-website-in-docker/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/running-a-simple-django-website-in-docker/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /posts/generating-a-ed25519-ssh-key-with-openssh/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /posts/generating-a-ed25519-ssh-key-with-openssh/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /posts/generating-a-ed25519-ssh-key-with-openssh/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/ai/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/ai/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/ai/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/coding/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/coding/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/coding/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/databases/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/databases/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/databases/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/performance/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/performance/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/performance/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/privacy/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/privacy/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/privacy/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/rust/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/rust/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/rust/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/security/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/security/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/security/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/sysadmin/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/sysadmin/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/sysadmin/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/tag/webdev/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/tag/webdev/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/tag/webdev/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/year/2026/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/year/2026/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/year/2026/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
WARNING /blog/year/2022/ Broken external link (status 404) https://www.linkedin.com/in/ibythewood/
WARNING /blog/year/2022/ Broken external link (status 404) https://analytics.bythewood.me/properties/0d379e18-9ea7-4228-a8bf-82369c25ab84/
WARNING /blog/year/2022/ Broken external link (status 404) https://status.bythewood.me/properties/dbc133c9-ef2a-40a9-a3f0-a26c64bede0a/
Severity URL Issue Item
INFO / Response not compressed (no Content-Encoding header)
INFO /blog/ Response not compressed (no Content-Encoding header)
INFO /posts/the-rust-ecosystem-is-unreasonably-good/ Response not compressed (no Content-Encoding header)
INFO /posts/rewriting-my-blog-in-rust/ Response not compressed (no Content-Encoding header)
INFO /posts/self-host-your-fonts/ Response not compressed (no Content-Encoding header)
INFO /posts/cool-uris-dont-change-unless-an-ai-rewrites-your-blog/ Response not compressed (no Content-Encoding header)
INFO /posts/using-vite-with-django-in-2026/ Response not compressed (no Content-Encoding header)
INFO /posts/optimizing-sqlite-for-django-in-production/ Response not compressed (no Content-Encoding header)
INFO /posts/managing-a-python-project-with-uv-in-2026/ Response not compressed (no Content-Encoding header)
INFO /posts/capturing-screenshots-with-chromium-using-python/ Response not compressed (no Content-Encoding header)
INFO /posts/code-formatting-a-python-project-in-2022/ Response not compressed (no Content-Encoding header)
INFO /posts/finding-broken-external-links-on-websites-using-scrapy/ Response not compressed (no Content-Encoding header)
INFO /posts/minimal-automated-updates-for-alpine-linux/ Response not compressed (no Content-Encoding header)
INFO /posts/make-your-own-new-tab-browser-extension-in-50-lines-of-code/ Response not compressed (no Content-Encoding header)
INFO /posts/adding-dark-mode-with-automatic-system-preference-selection/ Response not compressed (no Content-Encoding header)
INFO /posts/set-up-automated-server-backups-with-borg/ Response not compressed (no Content-Encoding header)
INFO /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Response not compressed (no Content-Encoding header)
INFO /posts/using-codemirror-to-show-formatted-code-in-wagtail/ Response not compressed (no Content-Encoding header)
INFO /posts/caddy-configuration-for-django-with-some-sensible-defaults/ Response not compressed (no Content-Encoding header)
INFO /posts/counting-table-row-counts-in-postgresql/ Response not compressed (no Content-Encoding header)
INFO /posts/using-editorconfig-to-improve-coding-style-consistency/ Response not compressed (no Content-Encoding header)
INFO /posts/running-a-simple-django-website-in-docker/ Response not compressed (no Content-Encoding header)
INFO /posts/generating-a-ed25519-ssh-key-with-openssh/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/ai/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/coding/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/databases/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/performance/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/privacy/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/rust/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/security/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/sysadmin/ Response not compressed (no Content-Encoding header)
INFO /blog/tag/webdev/ Response not compressed (no Content-Encoding header)
INFO /blog/year/2026/ Response not compressed (no Content-Encoding header)
INFO /blog/year/2022/ Response not compressed (no Content-Encoding header)
Severity URL Issue Item
WARNING / Title length is 22 chars (recommended 30-60) Isaac Bythewood's Blog
WARNING /blog/ Title length is 4 chars (recommended 30-60) Blog
WARNING /posts/rewriting-my-blog-in-rust/ Title length is 25 chars (recommended 30-60) Rewriting my blog in Rust
WARNING /posts/self-host-your-fonts/ Title length is 20 chars (recommended 30-60) Self-host your fonts
WARNING /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Title length is 68 chars (recommended 30-60) Creating a PWA with Next.js and next-pwa to improve your websites UX
WARNING /blog/tag/ai/ Title length is 19 chars (recommended 30-60) Tag: ai - Tag - Ai
WARNING /blog/tag/coding/ Title length is 27 chars (recommended 30-60) Tag: coding - Tag - Coding
WARNING /blog/tag/privacy/ Title length is 29 chars (recommended 30-60) Tag: privacy - Tag - Privacy
WARNING /blog/tag/rust/ Title length is 23 chars (recommended 30-60) Tag: rust - Tag - Rust
WARNING /blog/tag/webdev/ Title length is 27 chars (recommended 30-60) Tag: webdev - Tag - Webdev
WARNING /blog/year/2026/ Title length is 25 chars (recommended 30-60) Year: 2026 - Year - 2026
WARNING /blog/year/2022/ Title length is 25 chars (recommended 30-60) Year: 2022 - Year - 2022
WARNING /blog/ Description length is 67 chars (recommended 70-160) Posts on webdev, coding, security, and sysadmin by Isaac Bythewood.
WARNING /posts/the-rust-ecosystem-is-unreasonably-good/ Description length is 201 chars (recommended 70-160) A second pass on the Rust port of my blog. I deleted the chromium PDF subprocess and replaced it with embedded Typst. Notes on axum, comrak, minijinja, and a typesetting compiler that ships as a crate.
WARNING /posts/rewriting-my-blog-in-rust/ Description length is 161 chars (recommended 70-160) I rewrote this blog from Flask to Rust over an afternoon. The result is a single 3.5 MB binary that uses 14x less memory and serves 10x more requests per second.
WARNING /posts/optimizing-sqlite-for-django-in-production/ Description length is 165 chars (recommended 70-160) The default SQLite settings in Django are fine for development but will hit "database is locked" errors under any concurrency. Here's the config I use in production.
WARNING /posts/adding-dark-mode-with-automatic-system-preference-selection/ Description length is 201 chars (recommended 70-160) Creating a dark, or light, version of your website may seem like a daunting task if you think you need an entirely new color pallet. It's 2022 though and we have the widely supported invert CSS filter.
WARNING /posts/creating-a-pwa-with-nextjs-and-next-pwa-to-improve-your-websites-ux/ Description length is 196 chars (recommended 70-160) Turning your website into a PWA, especially if your website doesn't rely on an internet connection at all, can greatly improve its user experience by allowing them to access your web app anywhere.
WARNING /blog/tag/ai/ Description length is 46 chars (recommended 70-160) Posts tagged ai Currently filtered by tag Ai.
WARNING /blog/tag/coding/ Description length is 54 chars (recommended 70-160) Posts tagged coding Currently filtered by tag Coding.
WARNING /blog/tag/databases/ Description length is 60 chars (recommended 70-160) Posts tagged databases Currently filtered by tag Databases.
WARNING /blog/tag/performance/ Description length is 64 chars (recommended 70-160) Posts tagged performance Currently filtered by tag Performance.
WARNING /blog/tag/privacy/ Description length is 56 chars (recommended 70-160) Posts tagged privacy Currently filtered by tag Privacy.
WARNING /blog/tag/rust/ Description length is 50 chars (recommended 70-160) Posts tagged rust Currently filtered by tag Rust.
WARNING /blog/tag/security/ Description length is 58 chars (recommended 70-160) Posts tagged security Currently filtered by tag Security.
WARNING /blog/tag/sysadmin/ Description length is 58 chars (recommended 70-160) Posts tagged sysadmin Currently filtered by tag Sysadmin.
WARNING /blog/tag/webdev/ Description length is 54 chars (recommended 70-160) Posts tagged webdev Currently filtered by tag Webdev.
WARNING /blog/year/2026/ Description length is 49 chars (recommended 70-160) Posts from 2026 Currently filtered by year 2026.
WARNING /blog/year/2022/ Description length is 49 chars (recommended 70-160) Posts from 2022 Currently filtered by year 2022.
WARNING /blog/ H1 length is 4 chars (recommended 20-70) Blog
WARNING /blog/tag/ai/ H1 length is 10 chars (recommended 20-70) Ai Tag: ai
WARNING /blog/tag/coding/ H1 length is 18 chars (recommended 20-70) Coding Tag: coding
WARNING /blog/tag/rust/ H1 length is 14 chars (recommended 20-70) Rust Tag: rust
WARNING /blog/tag/webdev/ H1 length is 18 chars (recommended 20-70) Webdev Tag: webdev
WARNING /blog/year/2026/ H1 length is 15 chars (recommended 20-70) 2026 Year: 2026
WARNING /blog/year/2022/ H1 length is 15 chars (recommended 20-70) 2022 Year: 2022
INFO / Favicon link missing
INFO /blog/ Favicon link missing
INFO /posts/rewriting-my-blog-in-rust/ Favicon link missing
INFO /posts/self-host-your-fonts/ Favicon link missing
INFO /posts/using-vite-with-django-in-2026/ Favicon link missing
INFO /blog/tag/ai/ Favicon link missing
INFO /blog/tag/coding/ Favicon link missing
INFO /blog/tag/databases/ Favicon link missing
INFO /blog/tag/performance/ Favicon link missing
INFO /blog/tag/privacy/ Favicon link missing
INFO /blog/tag/rust/ Favicon link missing
INFO /blog/tag/security/ Favicon link missing
INFO /blog/tag/sysadmin/ Favicon link missing
INFO /blog/tag/webdev/ Favicon link missing
INFO /blog/year/2026/ Favicon link missing
INFO /blog/year/2022/ Favicon link missing