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 — 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
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 },
};
/**