From c3c59b4bea86ae01237d1eb5e14d5feb25d3c23a Mon Sep 17 00:00:00 2001 From: Daniel Maksymilian Syrnicki Date: Wed, 26 Aug 2026 14:33:28 +0200 Subject: [PATCH] feat(website): share card for /logo/ (og:image) so links to the vote get a preview Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MScAinbyMdeNc7H2BZdnnG --- website/content/logo.de.md | 1 + website/content/logo.md | 1 + website/layouts/partials/head.html | 4 ++++ website/static/img/logo/vote-card.png | Bin 0 -> 26701 bytes website/tools/logo-assets.py | 30 ++++++++++++++++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 website/static/img/logo/vote-card.png diff --git a/website/content/logo.de.md b/website/content/logo.de.md index fe820ad..b658664 100644 --- a/website/content/logo.de.md +++ b/website/content/logo.de.md @@ -5,6 +5,7 @@ translationKey: "logo" layout: single type: poll poll: logo +image: /img/logo/vote-card.png sitemap: priority: 0.5 m: diff --git a/website/content/logo.md b/website/content/logo.md index 7091e93..721b96d 100644 --- a/website/content/logo.md +++ b/website/content/logo.md @@ -6,6 +6,7 @@ url: /logo/ layout: single type: poll poll: logo +image: /img/logo/vote-card.png sitemap: priority: 0.5 m: diff --git a/website/layouts/partials/head.html b/website/layouts/partials/head.html index 546d8f9..4c83b53 100644 --- a/website/layouts/partials/head.html +++ b/website/layouts/partials/head.html @@ -11,6 +11,10 @@ +{{ with .Params.image }} + + +{{ end }} {{ $parts := split .Site.Language.LanguageCode "-" }} {{ range .AllTranslations }} diff --git a/website/static/img/logo/vote-card.png b/website/static/img/logo/vote-card.png new file mode 100644 index 0000000000000000000000000000000000000000..55cb6d72fa674c0fcb364aac767fd71f1fd1fcad GIT binary patch literal 26701 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

{mYwM`88d%zZfkdmF_0g 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

kFdIj?BKN@9+q=Kncg}=GxP=wk%Lr9YT0Tad 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 literal 0 HcmV?d00001 diff --git a/website/tools/logo-assets.py b/website/tools/logo-assets.py index cc7c8ad..0797638 100644 --- a/website/tools/logo-assets.py +++ b/website/tools/logo-assets.py @@ -232,7 +232,37 @@ def b64png(im): return "data:image/png;base64," + base64.b64encode(buf.getvalue()).decode() +def vote_card(path): + """1200x630 share card for /logo/: M on cream, R on ink, side by side.""" + W, H = 1200, 630 + im = Image.new("RGBA", (W, H), "#f7f6f3") + ImageDraw.Draw(im).rectangle([W // 2, 0, W, H], fill=MARKS["r"]["ink"]) + for k, cx in (("m", W // 4), ("r", 3 * W // 4)): + m = mark_png(k, "flat", 330) + im.alpha_composite(m, (cx - m.width // 2, 110 - (m.height - 330) // 2)) + size = 46 + d = ImageDraw.Draw(im) + for text, cx, col in (("M", W // 4, "#6b6b6f"), ("R", 3 * W // 4, "#8a8a90")): + paths, tw = wordmark(text, size) + # letters via the same outlines: rasterise a tiny SVG for crisp text + svgtxt = (f'' + f'{paths}') + t = raster(svgtxt, round(tw), round(size * 1.3)) + im.alpha_composite(t, (cx - t.width // 2, 500)) + # url line, centred on the seam + paths, tw = wordmark("furtka.org/logo", 40) + svgtxt = (f'{paths}') + t = raster(svgtxt, round(tw), 52) + pad = 18 + box = Image.new("RGBA", (t.width + 2 * pad, t.height + 2 * pad), "#f7f6f3") + ImageDraw.Draw(box).rounded_rectangle([0, 0, box.width - 1, box.height - 1], 14, outline="#e4e3dc") + box.alpha_composite(t, (pad, pad)) + im.alpha_composite(box, (W // 2 - box.width // 2, 40)) + im.convert("RGB").save(path, optimize=True) + + def main(): + vote_card(os.path.join(SITE, "static", "img", "logo", "vote-card.png")) for k in MARKS: out = os.path.join(SITE, "static", "img", "logo", k) os.makedirs(out, exist_ok=True)