type: decision
status: active
timestamp: 2026-06-20
tags: [decisions, architecture, og-image, satori, cloudflare-workers, social]

OG card generation — Satori on api.oriz.in/og + ray.so for code

Non-code posts get OG cards from Satori on Hono Worker route at api.oriz.in/og. Code-heavy posts continue on ray.so. Static-cached via CF edge cache headers, no per-post PNGs in any site repo.

OG card generation — Satori on api.oriz.in/og + ray.so for code

Decision

The family generates Open Graph card images via two routes, picked by post shape:

  1. Non-code posts (default)Satori on the api.oriz.in Hono Worker at https://api.oriz.in/og?title=<...>&theme=<...>&site=<...>. @vercel/og (MIT) renders JSX themes from to a 1200×630 PNG. Free unlimited on the Cloudflare Workers free tier (100K req/day cap, well above family scale after edge caching).
  2. Code-heavy postsRay.so continues to render syntax-highlighted code-screenshot PNGs.

Sites set <meta property="og:image"> to the appropriate URL; the PNG is cached at the Cloudflare edge for one year (Cache-Control: public, max-age=31536000, immutable, ETag = parameter hash).

Why

Implications

Cross-refs


Edit on GitHub · Back to index