{
  "$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"
}