Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion apps/docs/app/[lang]/[[...slug]]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,9 @@ export async function generateMetadata(props: {
const baseUrl = 'https://docs.sim.ai'
const fullUrl = `${baseUrl}${page.url}`

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,
description:
Expand Down Expand Up @@ -272,12 +275,23 @@ export async function generateMetadata(props: {
alternateLocale: ['en', 'es', 'fr', 'de', 'ja', 'zh']
.filter((lang) => lang !== params.lang)
.map((lang) => (lang === 'en' ? 'en_US' : `${lang}_${lang.toUpperCase()}`)),
images: [
{
url: ogImageUrl,
width: 1200,
height: 630,
alt: page.data.title,
},
],
},
twitter: {
card: 'summary',
card: 'summary_large_image',
title: page.data.title,
description:
page.data.description || 'Sim visual workflow builder for AI applications documentation',
images: [ogImageUrl],
creator: '@simdotai',
site: '@simdotai',
},
robots: {
index: true,
Expand Down
173 changes: 173 additions & 0 deletions apps/docs/app/api/og/route.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
import { ImageResponse } from 'next/og'
import type { NextRequest } from 'next/server'

export const runtime = 'edge'

const TITLE_FONT_SIZE = {
large: 64,
medium: 56,
small: 48,
} as const

function getTitleFontSize(title: string): number {
if (title.length > 45) return TITLE_FONT_SIZE.small
if (title.length > 30) return TITLE_FONT_SIZE.medium
return TITLE_FONT_SIZE.large
}

/**
* Loads a Google Font dynamically by fetching the CSS and extracting the font URL.
*/
async function loadGoogleFont(font: string, weights: string, text: string): Promise<ArrayBuffer> {
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)'\)/)

if (resource) {
const response = await fetch(resource[1])
if (response.status === 200) {
return await response.arrayBuffer()
}
}

throw new Error('Failed to load font data')
}

/**
* Generates dynamic Open Graph images for documentation pages.
*/
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`

const allText = `${title}${category}${description}docs.sim.ai`
const fontData = await loadGoogleFont('Geist', '400;500;600', allText)

return new ImageResponse(
<div
style={{
height: '100%',
width: '100%',
display: 'flex',
flexDirection: 'column',
background: 'linear-gradient(315deg, #1e1e3f 0%, #1a1a2e 40%, #0f0f0f 100%)',
position: 'relative',
fontFamily: 'Geist',
}}
>
{/* Background texture */}
<img
src={backgroundImageUrl}
alt=''
style={{
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
objectFit: 'cover',
opacity: 0.04,
}}
/>

{/* Subtle purple glow from bottom right */}
<div
style={{
position: 'absolute',
bottom: 0,
right: 0,
width: '50%',
height: '100%',
background:
'radial-gradient(ellipse at bottom right, rgba(112, 31, 252, 0.1) 0%, transparent 50%)',
display: 'flex',
}}
/>

{/* Content */}
<div
style={{
display: 'flex',
flexDirection: 'column',
padding: '56px 72px',
height: '100%',
justifyContent: 'space-between',
}}
>
{/* Logo */}
<img src={`${baseUrl}/static/logo.png`} alt='sim' height={32} />

{/* Category + Title + Description */}
<div
style={{
display: 'flex',
flexDirection: 'column',
gap: 12,
}}
>
<span
style={{
fontSize: 15,
fontWeight: 600,
color: '#802fff',
letterSpacing: '0.02em',
}}
>
{category}
</span>
<span
style={{
fontSize: getTitleFontSize(title),
fontWeight: 600,
color: '#ffffff',
lineHeight: 1.1,
letterSpacing: '-0.02em',
}}
>
{title}
</span>
{description && (
<span
style={{
fontSize: 18,
fontWeight: 400,
color: '#a1a1aa',
lineHeight: 1.4,
marginTop: 4,
}}
>
{description.length > 100 ? `${description.slice(0, 100)}...` : description}
</span>
)}
</div>

{/* Footer */}
<span
style={{
fontSize: 15,
fontWeight: 500,
color: '#52525b',
}}
>
docs.sim.ai
</span>
</div>
</div>,
{
width: 1200,
height: 630,
fonts: [
{
name: 'Geist',
data: fontData,
style: 'normal',
},
],
}
)
}
10 changes: 9 additions & 1 deletion apps/docs/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,14 @@ export const metadata = {
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
description:
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
images: [
{
url: 'https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION',
width: 1200,
height: 630,
alt: 'Sim Documentation',
},
],
},
twitter: {
card: 'summary_large_image',
Expand All @@ -64,7 +72,7 @@ export const metadata = {
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
creator: '@simdotai',
site: '@simdotai',
images: ['/og-image.png'],
images: ['https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION'],
},
robots: {
index: true,
Expand Down
18 changes: 13 additions & 5 deletions apps/docs/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4206,12 +4206,20 @@ export function RssIcon(props: SVGProps<SVGSVGElement>) {

export function SpotifyIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'>
<path
fill='#1ed760'
d='M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z'
<svg
{...props}
width='386'
height='386'
viewBox='100 100 186 186'
fill='none'
xmlns='http://www.w3.org/2000/svg'
xmlnsXlink='http://www.w3.org/1999/xlink'
>
<image
width='386'
height='386'
xlinkHref='data:image/png;base64,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'
/>
<path d='M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z' />
</svg>
)
}
Loading
Loading