From 83e100efad28c7dc0db55cdece3717dbe2e5fade Mon Sep 17 00:00:00 2001 From: G <41178744+catomean@users.noreply.github.com> Date: Sat, 29 Aug 2026 09:43:54 +0200 Subject: [PATCH] feat: render a real link preview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was not missing metadata. title and description were both set, and Next renders them as and <meta name="description"> — but it only emits og:title and og:description from an `openGraph` block. Without one, a share on LinkedIn, WhatsApp or Slack falls back to guessing. Audited all 18 public surfaces by FETCHING each image rather than trusting the tag: 15 had a working preview. This was one of the three that did not. Text only. An og:image here is a brand decision, not a defect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UvjGNAS9CMfEGNW26tUR4P --- app/layout.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/layout.tsx b/app/layout.tsx index f35e1a7..9c4ede7 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,7 +8,17 @@ export const metadata: Metadata = { description: 'Open-source research on the physical chokepoints between here and a technological singularity.', metadataBase: new URL(`https://${SITE.host}`), - openGraph: { siteName: SITE.name, type: 'website' }, + // siteName and type alone render no og:title and no og:description, so a + // shared link previewed with whatever the scraper could infer. Naming them + // explicitly is the difference between a card and a bare URL. + openGraph: { + siteName: SITE.name, + type: 'website', + title: SITE.name, + description: + 'Open-source research on the physical chokepoints between here and a technological singularity.', + }, + twitter: { card: 'summary_large_image', title: SITE.name }, }; /**