From 1e38c0396224ad8d576831ac4c442bfa50318059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Thu, 5 Feb 2026 16:17:07 +0100 Subject: [PATCH] feat: enhance OG/Twitter meta tags with cover images - Use page resource cover.* for track pages (resized to 1200x webp) - Fall back to .Params.image then configurable site default - Add [images] config section with default OG image path - Add og-default.png (1200x630) with centered logo Co-Authored-By: Claude Opus 4.5 --- config/_default/params.toml | 3 +++ layouts/partials/head/opengraph.html | 16 ++++++++++++++-- layouts/partials/head/twitter.html | 18 +++++++++++++++--- static/images/og-default.png | Bin 0 -> 24985 bytes 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 static/images/og-default.png diff --git a/config/_default/params.toml b/config/_default/params.toml index eb74615..efee285 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -14,3 +14,6 @@ email = "valknar@pivoine.art" [visualizer] particleCount = 5000 fftSize = 512 + +[images] + default = "/images/og-default.png" diff --git a/layouts/partials/head/opengraph.html b/layouts/partials/head/opengraph.html index 7dec406..81479a5 100755 --- a/layouts/partials/head/opengraph.html +++ b/layouts/partials/head/opengraph.html @@ -1,7 +1,19 @@ {{- $title := .Title | default .Site.Title -}} {{- $desc := .Description | default .Summary | default .Site.Params.description | plainify | truncate 200 -}} -{{- $image := .Params.image | default "/images/og-default.png" -}} -{{- if not (strings.HasPrefix $image "http") -}} + +{{/* Resolve image: page resource cover.* > .Params.image > site default */}} +{{- $image := "" -}} +{{- with .Resources.GetMatch "cover.*" -}} + {{- $img := .Resize "1200x webp q90" -}} + {{- $image = $img.Permalink -}} +{{- else -}} + {{- with $.Params.image -}} + {{- $image = . -}} + {{- else -}} + {{- $image = $.Site.Params.images.default | default "/images/og-default.png" -}} + {{- end -}} +{{- end -}} +{{- if and $image (not (strings.HasPrefix $image "http")) -}} {{- $image = $image | absURL -}} {{- end -}} diff --git a/layouts/partials/head/twitter.html b/layouts/partials/head/twitter.html index b89f1be..c4e2f50 100755 --- a/layouts/partials/head/twitter.html +++ b/layouts/partials/head/twitter.html @@ -1,11 +1,23 @@ {{- $title := .Title | default .Site.Title -}} {{- $desc := .Description | default .Summary | default .Site.Params.description | plainify | truncate 200 -}} -{{- $image := .Params.image | default "/images/og-default.png" -}} -{{- if not (strings.HasPrefix $image "http") -}} + +{{/* Resolve image: page resource cover.* > .Params.image > site default */}} +{{- $image := "" -}} +{{- with .Resources.GetMatch "cover.*" -}} + {{- $img := .Resize "1200x webp q90" -}} + {{- $image = $img.Permalink -}} +{{- else -}} + {{- with $.Params.image -}} + {{- $image = . -}} + {{- else -}} + {{- $image = $.Site.Params.images.default | default "/images/og-default.png" -}} + {{- end -}} +{{- end -}} +{{- if and $image (not (strings.HasPrefix $image "http")) -}} {{- $image = $image | absURL -}} {{- end -}} -{{/* Determine card type */}} +{{/* Determine card type - use large image when we have one */}} {{- $cardType := "summary" -}} {{- if $image -}} {{- $cardType = "summary_large_image" -}} diff --git a/static/images/og-default.png b/static/images/og-default.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad5d5e07e2c0583504dbd9de0127def2e802bdb GIT binary patch literal 24985 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 literal 0 HcmV?d00001