diff --git a/apps/docs/app/[lang]/[[...slug]]/page.tsx b/apps/docs/app/[lang]/[[...slug]]/page.tsx index 93b09e200..ee65b256c 100644 --- a/apps/docs/app/[lang]/[[...slug]]/page.tsx +++ b/apps/docs/app/[lang]/[[...slug]]/page.tsx @@ -243,7 +243,8 @@ export async function generateMetadata(props: { const baseUrl = 'https://docs.sim.ai' const fullUrl = `${baseUrl}${page.url}` - const ogImageUrl = `${baseUrl}/api/og?title=${encodeURIComponent(page.data.title)}&category=DOCUMENTATION` + const description = page.data.description || '' + const ogImageUrl = `${baseUrl}/api/og?title=${encodeURIComponent(page.data.title)}&category=DOCUMENTATION${description ? `&description=${encodeURIComponent(description)}` : ''}` return { title: page.data.title, diff --git a/apps/docs/app/api/og/route.tsx b/apps/docs/app/api/og/route.tsx index 63ca67c61..c4d8e550a 100644 --- a/apps/docs/app/api/og/route.tsx +++ b/apps/docs/app/api/og/route.tsx @@ -18,8 +18,8 @@ function getTitleFontSize(title: string): number { /** * Loads a Google Font dynamically by fetching the CSS and extracting the font URL. */ -async function loadGoogleFont(font: string, text: string): Promise { - const url = `https://fonts.googleapis.com/css2?family=${font}:wght@500;600&text=${encodeURIComponent(text)}` +async function loadGoogleFont(font: string, weights: string, text: string): Promise { + const url = `https://fonts.googleapis.com/css2?family=${font}:wght@${weights}&text=${encodeURIComponent(text)}` const css = await (await fetch(url)).text() const resource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/) @@ -40,13 +40,13 @@ export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url) const title = searchParams.get('title') || 'Documentation' const category = searchParams.get('category') || 'DOCUMENTATION' + const description = searchParams.get('description') || '' const baseUrl = new URL(request.url).origin const backgroundImageUrl = `${baseUrl}/static/og-background.png` - // Load Inter font dynamically from Google Fonts - const allText = `${title}${category}docs.sim.ai` - const fontData = await loadGoogleFont('Inter', allText) + const allText = `${title}${category}${description}docs.sim.ai` + const fontData = await loadGoogleFont('Geist', '400;500;600', allText) return new ImageResponse(
{/* Background texture */} @@ -71,7 +71,21 @@ export async function GET(request: NextRequest) { width: '100%', height: '100%', objectFit: 'cover', - opacity: 0.06, + opacity: 0.04, + }} + /> + + {/* Subtle purple glow from bottom right */} +
@@ -80,28 +94,28 @@ export async function GET(request: NextRequest) { style={{ display: 'flex', flexDirection: 'column', - padding: '60px 72px', + padding: '56px 72px', height: '100%', justifyContent: 'space-between', }} > {/* Logo */} - sim + sim - {/* Category + Title */} + {/* Category + Title + Description */}
{category} @@ -111,20 +125,33 @@ export async function GET(request: NextRequest) { fontSize: getTitleFontSize(title), fontWeight: 600, color: '#ffffff', - lineHeight: 1.15, + lineHeight: 1.1, letterSpacing: '-0.02em', }} > {title} + {description && ( + + {description.length > 100 ? `${description.slice(0, 100)}...` : description} + + )}
{/* Footer */} docs.sim.ai @@ -136,7 +163,7 @@ export async function GET(request: NextRequest) { height: 630, fonts: [ { - name: 'Inter', + name: 'Geist', data: fontData, style: 'normal', },