diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md
index ae914a9..493630a 100644
--- a/THIRD_PARTY_NOTICES.md
+++ b/THIRD_PARTY_NOTICES.md
@@ -8,11 +8,11 @@
Hugo provides its embedded KaTeX renderer.
The complete upstream license texts are in [static/licenses/](static/licenses/)
-and distributed with the site. Build dependencies retain the license files included in their packages;
-installed dependencies are not included in the source ZIP.
+and distributed with the site. Build dependencies retain the license files included in their packages.
-The [Pale Blue Dot](static/images/Pale_Blue_Dot.png) link-preview photograph was
-taken by NASA’s Voyager 1 spacecraft.
+The [Pale Blue Dot](assets/images/Pale_Blue_Dot.png) photograph was taken by
+NASA’s Voyager 1 spacecraft. Cropped and resized versions are used for the site’s
+browser icons and link previews.
Image credit: NASA/JPL.
See the [JPL image use policy](https://www.jpl.nasa.gov/jpl-image-use-policy/).
diff --git a/assets/images/Pale_Blue_Dot.png b/assets/images/Pale_Blue_Dot.png
new file mode 100644
index 0000000..b51d4d7
Binary files /dev/null and b/assets/images/Pale_Blue_Dot.png differ
diff --git a/content/writing/explore-and-exploit.md b/content/writing/explore-and-exploit.md
index 9daef6a..128bac5 100644
--- a/content/writing/explore-and-exploit.md
+++ b/content/writing/explore-and-exploit.md
@@ -17,4 +17,3 @@ A military could use what it learns in much the same way. Finding weaknesses in
And I think keeping people safe should guide how militaries use the knowledge they gather. I’d love to see more of their ingenuity devoted to finding ways to counter attacks and limit the harm they can cause. Defending yourself sometimes requires fighting back, of course. But I think we all stand to gain more in the long run from learning to cooperate. How to make that cooperation last is a difficult question, and I don’t pretend to have an answer. I do think it’s worth working toward.
Anyway, I hope you found that little connection as interesting as I did! I certainly wasn’t expecting a search for words that sound nice together to leave me thinking about what militaries should be doing.
-
diff --git a/content/writing/why-read-classics.md b/content/writing/why-read-classics.md
index 4eb5550..048f03c 100644
--- a/content/writing/why-read-classics.md
+++ b/content/writing/why-read-classics.md
@@ -27,4 +27,3 @@ That brought to mind Muhammad Ali’s description of what his trainer had helped
**Style, story, and significance.** Beautiful! And the alliteration is certainly a nice bonus.
I hope that gives you some sense of what classics can offer, and perhaps a reason to try one you’ve been curious about. A work that influenced an author you love or explores a subject that interests you could be a good place to start. You might find more to enjoy in it than you expected.
-
diff --git a/hugo.toml b/hugo.toml
index a7a3aa9..9bc062d 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -11,7 +11,7 @@ tag = 'tags'
[params]
author = 'Ishmaam Khan'
description = "Hi! I’m Ishmaam. I write software and spend a lot of time thinking about science, philosophy, and whatever else catches my interest."
-images = ['/images/Pale_Blue_Dot.png']
+images = ['images/Pale_Blue_Dot.png']
[outputs]
home = ['HTML', 'RSS']
section = ['HTML', 'RSS']
@@ -49,4 +49,3 @@ files = ['katex.min.css', 'fonts/**']
source = 'node_modules/@fontsource-variable/newsreader/files'
target = 'static/fonts'
files = ['newsreader-latin-wght-normal.woff2', 'newsreader-latin-wght-italic.woff2']
-
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 212b5a5..d7b135a 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -28,10 +28,7 @@
{{ $type := cond (and .IsPage (eq .Section "writing")) "article" "website" }}
-
-
-
-
+ {{ partialCached "site-images.html" . }}
{{ $css := resources.Get "css/style.css" | minify | fingerprint }}
diff --git a/layouts/partials/site-images.html b/layouts/partials/site-images.html
new file mode 100644
index 0000000..6202441
--- /dev/null
+++ b/layouts/partials/site-images.html
@@ -0,0 +1,16 @@
+{{- $source := resources.Get (index site.Params.images 0) -}}
+{{- $earth := ($source.Crop "220x294 Right").Crop "220x220 Bottom" -}}
+{{- $icon := $earth.Resize "64x64 png lanczos" -}}
+{{- $touch := $earth.Resize "180x180 png lanczos" -}}
+{{- $preview := (($source.Crop "300x232 Right").Crop "300x158 Bottom").Fill "1200x630 Center jpg q85 lanczos" -}}
+{{- $alt := "Earth as a tiny pale dot in a sunbeam, photographed by Voyager 1." -}}
+
+
+
+
+
+
+
+
+
+
diff --git a/scripts/check.mjs b/scripts/check.mjs
index 93c2e8a..e80f8b2 100644
--- a/scripts/check.mjs
+++ b/scripts/check.mjs
@@ -28,6 +28,15 @@ export function checkSite(directory = 'dist') {
const value = element.getAttribute(name);
if (value) page.links.push(value);
}
+ if (
+ element.tagName === 'meta' &&
+ ['og:image', 'twitter:image'].includes(
+ element.getAttribute('property') || element.getAttribute('name'),
+ )
+ ) {
+ const value = element.getAttribute('content');
+ if (value) page.links.push(value);
+ }
for (const name of ['aria-controls', 'aria-labelledby', 'aria-describedby']) {
const value = element.getAttribute(name);
if (value) page.controls.push(...value.trim().split(/\s+/));
diff --git a/scripts/test.mjs b/scripts/test.mjs
index 646affc..d98119e 100644
--- a/scripts/test.mjs
+++ b/scripts/test.mjs
@@ -141,6 +141,8 @@ try {
for (const [html, expected] of [
['Broken fragment', /missing fragment/],
['
', /broken asset or link/],
+ ['', /broken asset or link/],
+ ['', /broken asset or link/],
['