import { ImageResponse } from "next/og"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; export const runtime = "nodejs"; // Cache font data at module level so they're only loaded once let notoRegularData: Buffer | null = null; let notoBoldData: Buffer | null = null; async function loadFonts() { const fontsDir = join(process.cwd(), "public/fonts/Noto_Sans/static"); if (!notoRegularData) { notoRegularData = await readFile(join(fontsDir, "NotoSans-Regular.ttf")); } if (!notoBoldData) { notoBoldData = await readFile(join(fontsDir, "NotoSans-Bold.ttf")); } return { regular: notoRegularData, bold: notoBoldData }; } export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const title = searchParams.get("title") || "Prabhupāda Says"; const detail = searchParams.get("detail") || ""; const rawQuote = searchParams.get("quote") || ""; // Fallback: if no quote provided, generate one from context const quote = rawQuote || (title === "Prabhupāda Says" ? "Browse the original, unedited books, letters, and teachings of His Divine Grace A.C. Bhaktivedanta Swami Prabhupāda — presented as they are." : `Read ${title}${detail ? ` — ${detail}` : ""} by His Divine Grace A.C. Bhaktivedanta Swami Prabhupāda`); // Truncate for readability and to prevent overflow const displayTitle = title.length > 60 ? title.slice(0, 57) + "..." : title; const displayDetail = detail.length > 80 ? detail.slice(0, 77) + "..." : detail; const displayQuote = quote.length > 220 ? quote.slice(0, 217) + "..." : quote; // Load fonts and image const fonts = await loadFonts(); const imgData = await readFile( join(process.cwd(), "public/images/og-left-prabhupada-reading.png"), "base64", ); const imgSrc = `data:image/png;base64,${imgData}`; return new ImageResponse(