diff --git a/frontend/src/lib/og-renderer.tsx b/frontend/src/lib/og-renderer.tsx index a6e8e40..cb205ad 100644 --- a/frontend/src/lib/og-renderer.tsx +++ b/frontend/src/lib/og-renderer.tsx @@ -17,7 +17,10 @@ function loadFont(): ArrayBuffer { ]; for (const path of candidates) { try { - return readFileSync(path).buffer as ArrayBuffer; + const buf = readFileSync(path); + // Node.js Buffers share a pooled ArrayBuffer — slice to get a + // standalone copy so Satori's OpenType parser starts at byte 0. + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); } catch { // try next } diff --git a/frontend/src/lib/server-api.ts b/frontend/src/lib/server-api.ts index e5b4793..a15b198 100644 --- a/frontend/src/lib/server-api.ts +++ b/frontend/src/lib/server-api.ts @@ -1,5 +1,7 @@ +// process.env is required here — Vite's import.meta.env only exposes +// PUBLIC_* prefixed vars. This module runs server-side only (SSR). export const INTERNAL_API_BASE = - import.meta.env.BACKEND_INTERNAL_URL || 'http://localhost:8099'; + process.env.BACKEND_INTERNAL_URL || 'http://localhost:8099'; export async function fetchNotebookMeta(id: string) { const url = `${INTERNAL_API_BASE}/api/notebooks/${encodeURIComponent(id)}`;