{
"$type": "site.standard.document",
"canonicalUrl": "https://devlog.croft.click/2026/05/09/devlog-dynamic-og-images",
"description": "Each devlog post now generates its own OG image on demand using @ewanc26/og — warm amber on dark, with noise texture.",
"path": "/2026/05/09/devlog-dynamic-og-images",
"publishedAt": "2026-05-08T23:20:28.000Z",
"site": "at://did:plc:ofrbh253gwicbkc5nktqepol/site.standard.publication/3mlen2qhzrt2s",
"tags": [
"website",
"pkgs",
"tooling"
],
"textContent": "Each devlog post now generates its own OpenGraph image on demand at /og. OG images are served as PNG with 24-hour cache headers, generated using @ewanc26/og with the devlog colour palette (warm amber #e2a93b on dark #1a1816).\n\nEach post page now injects:\n\n- og:image — the generated image URL\n- og:type — article\n- twitter:card — summary_large_image\n- twitter:image — the generated image URL\n\nEndpoint: GET /og?title=<title>&description=<description>\n\nBuilt with @ewanc26/og, which uses Satori for JSX-to-SVG and resvg-js for SVG-to-PNG rendering.\n\nPart of the @ewanc26/pkgs monorepo.",
"title": "devlog: Dynamic OG image generation with @ewanc26/og"
}