Skip to content

Commit a0fb889

Browse files
authored
v0.5.29: chat voice mode, opengraph for docs, option to disable auth
2 parents f526c36 + 431f206 commit a0fb889

File tree

115 files changed

+1674
-841
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+1674
-841
lines changed

apps/docs/app/[lang]/[[...slug]]/page.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ export async function generateMetadata(props: {
243243
const baseUrl = 'https://docs.sim.ai'
244244
const fullUrl = `${baseUrl}${page.url}`
245245

246+
const description = page.data.description || ''
247+
const ogImageUrl = `${baseUrl}/api/og?title=${encodeURIComponent(page.data.title)}&category=DOCUMENTATION${description ? `&description=${encodeURIComponent(description)}` : ''}`
248+
246249
return {
247250
title: page.data.title,
248251
description:
@@ -272,12 +275,23 @@ export async function generateMetadata(props: {
272275
alternateLocale: ['en', 'es', 'fr', 'de', 'ja', 'zh']
273276
.filter((lang) => lang !== params.lang)
274277
.map((lang) => (lang === 'en' ? 'en_US' : `${lang}_${lang.toUpperCase()}`)),
278+
images: [
279+
{
280+
url: ogImageUrl,
281+
width: 1200,
282+
height: 630,
283+
alt: page.data.title,
284+
},
285+
],
275286
},
276287
twitter: {
277-
card: 'summary',
288+
card: 'summary_large_image',
278289
title: page.data.title,
279290
description:
280291
page.data.description || 'Sim visual workflow builder for AI applications documentation',
292+
images: [ogImageUrl],
293+
creator: '@simdotai',
294+
site: '@simdotai',
281295
},
282296
robots: {
283297
index: true,

apps/docs/app/api/og/route.tsx

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
import { ImageResponse } from 'next/og'
2+
import type { NextRequest } from 'next/server'
3+
4+
export const runtime = 'edge'
5+
6+
const TITLE_FONT_SIZE = {
7+
large: 64,
8+
medium: 56,
9+
small: 48,
10+
} as const
11+
12+
function getTitleFontSize(title: string): number {
13+
if (title.length > 45) return TITLE_FONT_SIZE.small
14+
if (title.length > 30) return TITLE_FONT_SIZE.medium
15+
return TITLE_FONT_SIZE.large
16+
}
17+
18+
/**
19+
* Loads a Google Font dynamically by fetching the CSS and extracting the font URL.
20+
*/
21+
async function loadGoogleFont(font: string, weights: string, text: string): Promise<ArrayBuffer> {
22+
const url = `https://fonts.googleapis.com/css2?family=${font}:wght@${weights}&text=${encodeURIComponent(text)}`
23+
const css = await (await fetch(url)).text()
24+
const resource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/)
25+
26+
if (resource) {
27+
const response = await fetch(resource[1])
28+
if (response.status === 200) {
29+
return await response.arrayBuffer()
30+
}
31+
}
32+
33+
throw new Error('Failed to load font data')
34+
}
35+
36+
/**
37+
* Generates dynamic Open Graph images for documentation pages.
38+
*/
39+
export async function GET(request: NextRequest) {
40+
const { searchParams } = new URL(request.url)
41+
const title = searchParams.get('title') || 'Documentation'
42+
const category = searchParams.get('category') || 'DOCUMENTATION'
43+
const description = searchParams.get('description') || ''
44+
45+
const baseUrl = new URL(request.url).origin
46+
const backgroundImageUrl = `${baseUrl}/static/og-background.png`
47+
48+
const allText = `${title}${category}${description}docs.sim.ai`
49+
const fontData = await loadGoogleFont('Geist', '400;500;600', allText)
50+
51+
return new ImageResponse(
52+
<div
53+
style={{
54+
height: '100%',
55+
width: '100%',
56+
display: 'flex',
57+
flexDirection: 'column',
58+
background: 'linear-gradient(315deg, #1e1e3f 0%, #1a1a2e 40%, #0f0f0f 100%)',
59+
position: 'relative',
60+
fontFamily: 'Geist',
61+
}}
62+
>
63+
{/* Background texture */}
64+
<img
65+
src={backgroundImageUrl}
66+
alt=''
67+
style={{
68+
position: 'absolute',
69+
top: 0,
70+
left: 0,
71+
width: '100%',
72+
height: '100%',
73+
objectFit: 'cover',
74+
opacity: 0.04,
75+
}}
76+
/>
77+
78+
{/* Subtle purple glow from bottom right */}
79+
<div
80+
style={{
81+
position: 'absolute',
82+
bottom: 0,
83+
right: 0,
84+
width: '50%',
85+
height: '100%',
86+
background:
87+
'radial-gradient(ellipse at bottom right, rgba(112, 31, 252, 0.1) 0%, transparent 50%)',
88+
display: 'flex',
89+
}}
90+
/>
91+
92+
{/* Content */}
93+
<div
94+
style={{
95+
display: 'flex',
96+
flexDirection: 'column',
97+
padding: '56px 72px',
98+
height: '100%',
99+
justifyContent: 'space-between',
100+
}}
101+
>
102+
{/* Logo */}
103+
<img src={`${baseUrl}/static/logo.png`} alt='sim' height={32} />
104+
105+
{/* Category + Title + Description */}
106+
<div
107+
style={{
108+
display: 'flex',
109+
flexDirection: 'column',
110+
gap: 12,
111+
}}
112+
>
113+
<span
114+
style={{
115+
fontSize: 15,
116+
fontWeight: 600,
117+
color: '#802fff',
118+
letterSpacing: '0.02em',
119+
}}
120+
>
121+
{category}
122+
</span>
123+
<span
124+
style={{
125+
fontSize: getTitleFontSize(title),
126+
fontWeight: 600,
127+
color: '#ffffff',
128+
lineHeight: 1.1,
129+
letterSpacing: '-0.02em',
130+
}}
131+
>
132+
{title}
133+
</span>
134+
{description && (
135+
<span
136+
style={{
137+
fontSize: 18,
138+
fontWeight: 400,
139+
color: '#a1a1aa',
140+
lineHeight: 1.4,
141+
marginTop: 4,
142+
}}
143+
>
144+
{description.length > 100 ? `${description.slice(0, 100)}...` : description}
145+
</span>
146+
)}
147+
</div>
148+
149+
{/* Footer */}
150+
<span
151+
style={{
152+
fontSize: 15,
153+
fontWeight: 500,
154+
color: '#52525b',
155+
}}
156+
>
157+
docs.sim.ai
158+
</span>
159+
</div>
160+
</div>,
161+
{
162+
width: 1200,
163+
height: 630,
164+
fonts: [
165+
{
166+
name: 'Geist',
167+
data: fontData,
168+
style: 'normal',
169+
},
170+
],
171+
}
172+
)
173+
}

apps/docs/app/layout.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ export const metadata = {
5656
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
5757
description:
5858
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
59+
images: [
60+
{
61+
url: 'https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION',
62+
width: 1200,
63+
height: 630,
64+
alt: 'Sim Documentation',
65+
},
66+
],
5967
},
6068
twitter: {
6169
card: 'summary_large_image',
@@ -64,7 +72,7 @@ export const metadata = {
6472
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
6573
creator: '@simdotai',
6674
site: '@simdotai',
67-
images: ['/og-image.png'],
75+
images: ['https://docs.sim.ai/api/og?title=Sim%20Documentation&category=DOCUMENTATION'],
6876
},
6977
robots: {
7078
index: true,

apps/docs/components/icons.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,12 +4206,20 @@ export function RssIcon(props: SVGProps<SVGSVGElement>) {
42064206

42074207
export function SpotifyIcon(props: SVGProps<SVGSVGElement>) {
42084208
return (
4209-
<svg {...props} viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'>
4210-
<path
4211-
fill='#1ed760'
4212-
d='M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z'
4209+
<svg
4210+
{...props}
4211+
width='386'
4212+
height='386'
4213+
viewBox='100 100 186 186'
4214+
fill='none'
4215+
xmlns='http://www.w3.org/2000/svg'
4216+
xmlnsXlink='http://www.w3.org/1999/xlink'
4217+
>
4218+
<image
4219+
width='386'
4220+
height='386'
4221+
xlinkHref='data:image/png;base64,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'
42134222
/>
4214-
<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' />
42154223
</svg>
42164224
)
42174225
}

0 commit comments

Comments
 (0)