Skip to content

Commit 197a881

Browse files
committed
docs: add agent preview conversation to homepage hero
1 parent bf5bd1c commit 197a881

3 files changed

Lines changed: 132 additions & 63 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export default async function HomePage({
126126
cta={t.hero.cta}
127127
quickStart={t.hero.quickStart}
128128
/>
129-
<CodePreview />
129+
<CodePreview t={t.agentPreview} />
130130
</section>
131131

132132
{/* Deploy Modes */}

apps/docs/components/code-preview.tsx

Lines changed: 44 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
import { cn } from '@/lib/utils';
2+
import type { HomepageTranslations } from '@/lib/homepage-i18n';
23

34
interface CodePreviewProps {
45
className?: string;
6+
t: HomepageTranslations['agentPreview'];
57
}
68

79
/**
8-
* Homepage code preview.
10+
* Homepage hero preview.
911
*
10-
* Shows a real docker-compose.yml that an enterprise operator can copy,
11-
* paste, and run to bring ObjectOS up against their own database in a
12-
* single command. Replaces the previous developer-flavored object
13-
* definition snippet.
12+
* An end-user conversation with an ObjectOS Agent — querying, analyzing,
13+
* and acting on live business data through natural language.
1414
*/
15-
export function CodePreview({ className }: CodePreviewProps) {
16-
const kw = 'text-purple-600 dark:text-purple-400 font-semibold';
17-
const str = 'text-green-600 dark:text-green-300';
18-
const num = 'text-amber-600 dark:text-yellow-300';
19-
const key = 'text-cyan-600 dark:text-sky-300';
20-
const fg = 'text-foreground';
21-
const cm = 'text-foreground/40 italic';
15+
export function CodePreview({ className, t }: CodePreviewProps) {
16+
const user = 'text-foreground';
17+
const ai = 'text-foreground/90';
18+
const label = 'text-cyan-600 dark:text-sky-300 font-semibold';
19+
const aiLabel = 'text-purple-600 dark:text-purple-400 font-semibold';
20+
const ok = 'text-green-600 dark:text-green-400';
21+
const dim = 'text-foreground/50';
22+
const accent = 'text-amber-600 dark:text-yellow-300';
23+
const tool = 'text-blue-600 dark:text-blue-300';
2224

2325
return (
2426
<div className={cn(
@@ -32,62 +34,52 @@ export function CodePreview({ className }: CodePreviewProps) {
3234
<div className="h-3 w-3 rounded-full bg-yellow-500/80" />
3335
<div className="h-3 w-3 rounded-full bg-green-500/80" />
3436
<div className="ml-2 text-xs font-medium text-muted-foreground font-mono">
35-
docker-compose.yml
37+
{t.windowTitle}
3638
</div>
3739
</div>
3840

39-
{/* Code Content — real docker-compose deployment */}
41+
{/* Conversation */}
4042
<div className="overflow-x-auto p-6 text-left bg-gradient-to-br from-card to-muted/20">
41-
<pre className="font-mono text-sm leading-7">
43+
<pre className="font-mono text-sm leading-7 whitespace-pre-wrap break-words">
4244
<code>
43-
<span className={cm}>{'# Run ObjectOS against your own Postgres'}</span>
45+
<span className={label}>{t.userLabel}</span>
4446
<br/>
45-
<span className={key}>services</span><span className={fg}>:</span>
47+
<span className={user}>{t.user1Line1}</span>
4648
<br/>
47-
{' '}<span className={key}>objectos</span><span className={fg}>:</span>
48-
<br/>
49-
{' '}<span className={key}>image</span><span className={fg}>:</span>{' '}
50-
<span className={str}>ghcr.io/objectstack/objectos:latest</span>
51-
<br/>
52-
{' '}<span className={key}>ports</span><span className={fg}>:</span>{' '}
53-
[<span className={str}>&quot;3000:3000&quot;</span>]
54-
<br/>
55-
{' '}<span className={key}>environment</span><span className={fg}>:</span>
56-
<br/>
57-
{' '}<span className={key}>OS_ARTIFACT_FILE</span><span className={fg}>:</span>{' '}
58-
<span className={str}>/artifacts/objectstack.json</span>
59-
<br/>
60-
{' '}<span className={key}>OS_DATABASE_URL</span><span className={fg}>:</span>{' '}
61-
<span className={str}>postgres://app@db:5432/objectos</span>
49+
<span className={user}>{t.user1Line2}</span>
50+
<br/><br/>
51+
52+
<span className={aiLabel}>{t.agentLabel}</span>
53+
<span className={dim}>{' '}</span>
54+
<span className={tool}>{t.tool1Name}</span>
55+
<span className={dim}>{t.tool1Target}</span>
6256
<br/>
63-
{' '}<span className={key}>OS_AUTH_SECRET</span><span className={fg}>:</span>{' '}
64-
<span className={fg}>$</span><span className={key}>{'{AUTH_SECRET}'}</span>
57+
<span className={ai}>{t.matchSummary}</span>
6558
<br/>
66-
{' '}<span className={key}>volumes</span><span className={fg}>:</span>
59+
<span className={ai}> </span><span className={accent}>TKT-2041</span><span className={ai}>{t.ticket1Meta}</span><span className={dim}>{t.ticket1Note}</span>
6760
<br/>
68-
{' '}<span className={fg}>-</span>{' '}
69-
<span className={str}>./artifacts:/artifacts:ro</span>
61+
<span className={ai}></span><span className={accent}>TKT-2038</span><span className={ai}>{t.ticket2Meta}</span><span className={dim}>{t.ticket2Note}</span>
7062
<br/>
71-
{' '}<span className={fg}>-</span>{' '}
72-
<span className={str}>objectos-data:/var/lib/objectos</span>
63+
<span className={ai}></span><span className={accent}>TKT-2035</span><span className={ai}>{t.ticket3Meta}</span><span className={dim}>{t.ticket3Note}</span>
7364
<br/>
74-
{' '}<span className={key}>depends_on</span><span className={fg}>:</span>{' '}
75-
[<span className={str}>db</span>]
65+
<span className={ai}>{t.insight}</span>
7666
<br/><br/>
77-
{' '}<span className={key}>db</span><span className={fg}>:</span>
78-
<br/>
79-
{' '}<span className={key}>image</span><span className={fg}>:</span>{' '}
80-
<span className={str}>postgres:</span><span className={num}>16</span>
67+
68+
<span className={label}>{t.userLabel}</span>
8169
<br/>
82-
{' '}<span className={key}>volumes</span><span className={fg}>:</span>{' '}
83-
[<span className={str}>db-data:/var/lib/postgresql/data</span>]
70+
<span className={user}>{t.user2}</span>
8471
<br/><br/>
85-
<span className={key}>volumes</span><span className={fg}>:</span>{' '}
86-
<span className={fg}>{'{ objectos-data: {}, db-data: {} }'}</span>
87-
<br/><br/>
88-
<span className={cm}>{'# → Application at http://localhost:3000'}</span>
72+
73+
<span className={aiLabel}>{t.agentLabel}</span>
74+
<span className={dim}>{' '}</span>
75+
<span className={tool}>{t.tool2Name}</span>
76+
<span className={dim}>{t.tool2Count}</span>
77+
<span className={tool}>{t.tool3Name}</span>
78+
<span className={dim}>{t.tool3Count}</span>
79+
<br/>
80+
<span className={ok}>{t.actionResult}</span>
8981
<br/>
90-
<span className={cm}>{'# → Setup app at http://localhost:3000/_setup/'}</span>
82+
<span className={dim}>{t.governance}</span>
9183
</code>
9284
</pre>
9385
</div>

apps/docs/lib/homepage-i18n.ts

Lines changed: 87 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,33 @@ export interface HomepageTranslations {
104104
secondaryHref: string;
105105
};
106106

107+
// Hero Agent Preview (conversation shown under the hero)
108+
agentPreview: {
109+
windowTitle: string;
110+
userLabel: string;
111+
agentLabel: string;
112+
user1Line1: string;
113+
user1Line2: string;
114+
tool1Name: string;
115+
tool1Target: string;
116+
matchSummary: string;
117+
ticket1Meta: string;
118+
ticket1Note: string;
119+
ticket2Meta: string;
120+
ticket2Note: string;
121+
ticket3Meta: string;
122+
ticket3Note: string;
123+
insight: string;
124+
user2: string;
125+
tool2Name: string;
126+
tool2Count: string;
127+
tool2Sep: string;
128+
tool3Name: string;
129+
tool3Count: string;
130+
actionResult: string;
131+
governance: string;
132+
};
133+
107134
// Footer
108135
footer: {
109136
copyright: string;
@@ -139,17 +166,17 @@ export interface HomepageTranslations {
139166
*/
140167
export const en: HomepageTranslations = {
141168
badge: {
142-
status: 'Customer-Hosted Runtime',
169+
status: 'AI-Native Business OS',
143170
version: SPEC_VERSION,
144171
},
145172
hero: {
146173
title: {
147-
line1: 'Your Data.',
148-
line2: 'Your Network. Your Rules.',
174+
line1: 'The Business OS',
175+
line2: 'for the AI-Native Era.',
149176
},
150177
subtitle: {
151-
line1: 'ObjectOS runs ObjectStack applications inside your own infrastructure — private cloud, customer data centers, or fully air-gapped networks.',
152-
line2: 'No vendor lock-in. No data leaving your perimeter.',
178+
line1: 'Define business objects, permissions, workflows, APIs, UI metadata, and Agent tools — once — as structured Zod metadata.',
179+
line2: 'ObjectStack is the metadata-driven business backend that lets AI Agents safely understand, operate, and audit your systems. Agent-ready, permission-built-in, versioned, audit-friendly.',
153180
},
154181
cta: {
155182
primary: 'Quickstart',
@@ -249,24 +276,49 @@ export const en: HomepageTranslations = {
249276
terms: 'Terms of Service',
250277
termsHref: '/terms',
251278
},
279+
agentPreview: {
280+
windowTitle: 'Studio · Support Copilot',
281+
userLabel: 'You',
282+
agentLabel: 'Agent',
283+
user1Line1: 'Which urgent tickets have been open more than 24h,',
284+
user1Line2: "and who's on the hook?",
285+
tool1Name: 'query_data',
286+
tool1Target: ' · support_ticket',
287+
matchSummary: ' 3 tickets match — grouped by assignee:',
288+
ticket1Meta: ' · 31h open · Maya ',
289+
ticket1Note: '(billing outage)',
290+
ticket2Meta: ' · 28h open · Maya ',
291+
ticket2Note: '(SSO failure)',
292+
ticket3Meta: ' · 26h open · Jordan',
293+
ticket3Note: ' (export bug)',
294+
insight: ' Maya is carrying 2/3 — likely the bottleneck.',
295+
user2: "Escalate all three and reassign Maya's to the on-call.",
296+
tool2Name: 'action_escalate_ticket',
297+
tool2Count: ' ×3 · ',
298+
tool2Sep: '',
299+
tool3Name: 'action_reassign',
300+
tool3Count: ' ×2',
301+
actionResult: ' ✓ priority → urgent · on-call notified · audited',
302+
governance: ' Runs as you. Permissions + field rules enforced.',
303+
},
252304
};
253305

254306
/**
255307
* Chinese Translations (中文翻译)
256308
*/
257309
export const cn: HomepageTranslations = {
258310
badge: {
259-
status: '客户自托管运行时',
311+
status: 'AI-Native Business OS',
260312
version: SPEC_VERSION,
261313
},
262314
hero: {
263315
title: {
264-
line1: '你的数据,',
265-
line2: '你的网络,你的规则。',
316+
line1: 'AI 原生时代的',
317+
line2: '业务操作系统。',
266318
},
267319
subtitle: {
268-
line1: 'ObjectOS 让 ObjectStack 应用运行在你自己的基础设施上 —— 私有云、客户数据中心、或完全离线的内网环境。',
269-
line2: '无厂商锁定,数据不离开企业边界。',
320+
line1: '把业务对象、权限、工作流、API、UI 元数据与 Agent 工具,一次性定义为结构化的 Zod 元数据。',
321+
line2: 'ObjectStack 是一套元数据驱动的业务后端,让 AI Agent 能够安全地理解、操作并审计你的业务系统。Agent 就绪、权限内建、版本化、可审计。',
270322
},
271323
cta: {
272324
primary: '快速开始',
@@ -366,6 +418,31 @@ export const cn: HomepageTranslations = {
366418
terms: '服务条款',
367419
termsHref: '/terms',
368420
},
421+
agentPreview: {
422+
windowTitle: 'Studio · 客服副驾',
423+
userLabel: '你',
424+
agentLabel: 'Agent',
425+
user1Line1: '哪些紧急工单已经超过 24 小时没关,',
426+
user1Line2: '分别是谁在跟?',
427+
tool1Name: 'query_data',
428+
tool1Target: ' · support_ticket',
429+
matchSummary: ' 匹配到 3 条 —— 按负责人分组:',
430+
ticket1Meta: ' · 已开 31h · Maya ',
431+
ticket1Note: '(账单中断)',
432+
ticket2Meta: ' · 已开 28h · Maya ',
433+
ticket2Note: '(SSO 故障)',
434+
ticket3Meta: ' · 已开 26h · Jordan',
435+
ticket3Note: ' (导出 bug)',
436+
insight: ' Maya 一人扛 2/3 —— 很可能是瓶颈。',
437+
user2: '把三条都升级,Maya 的两条转给值班工程师。',
438+
tool2Name: 'action_escalate_ticket',
439+
tool2Count: ' ×3 · ',
440+
tool2Sep: '',
441+
tool3Name: 'action_reassign',
442+
tool3Count: ' ×2',
443+
actionResult: ' ✓ 优先级 → 紧急 · 值班已通知 · 已审计',
444+
governance: ' 以你本人身份执行。权限与字段规则照常生效。',
445+
},
369446
};
370447

371448
/**

0 commit comments

Comments
 (0)