feat(web): Open Graph images for the landing page and docs pages

The site card shows BBCA's KSEI ownership split under the tagline; each docs
page gets a card with its section, title and description. Cards are rendered
at build time with satori and sharp from the bundled Plex and JetBrains Mono
fonts, and a Starlight route middleware points og:image at them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ep2qFFvuFEnBvLpoLxxdEi
This commit is contained in:
hermes 2026-10-15 06:32:14 +00:00
commit 0859c00020
9 changed files with 248 additions and 1 deletions

13
web/src/routeData.ts Normal file
View file

@ -0,0 +1,13 @@
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
// Point each docs page's og:image at its card from src/pages/og/[...slug].png.ts.
export const onRequest = defineRouteMiddleware((context) => {
const { entry, head } = context.locals.starlightRoute;
const image = new URL(`/og/${entry.id}.png`, context.site);
head.push(
{ tag: 'meta', attrs: { property: 'og:image', content: image.href } },
{ tag: 'meta', attrs: { property: 'og:image:width', content: '1200' } },
{ tag: 'meta', attrs: { property: 'og:image:height', content: '630' } },
{ tag: 'meta', attrs: { property: 'og:image:alt', content: `${entry.data.title} | idx` } },
);
});