Skip to content

Commit 52b0a9f

Browse files
committed
feat(docs): rebrand homepage for self-hosted ObjectOS runtime
1 parent ff2334d commit 52b0a9f

12 files changed

Lines changed: 3204 additions & 348 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ coverage/
1212
.env.*.local
1313
*.tsbuildinfo
1414
.vercel
15+
.open-next/
16+
.wrangler/
17+
cloudflare-env.d.ts
1518
*.db
1619
*.db-journal
1720
docker/artifacts/*

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

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Database, Monitor, HardDrive, ShieldCheck, Puzzle, Code2, Rocket, Users, Blocks, LucideIcon } from 'lucide-react';
1+
import { Server, Container, ShieldOff, KeyRound, Lock, LineChart, Wrench, ShieldCheck, Briefcase } from 'lucide-react';
22
import { HomeLayout } from 'fumadocs-ui/layouts/home';
33
import { baseOptions } from '@/lib/layout.shared';
44
import { getHomepageTranslations } from '@/lib/homepage-i18n';
@@ -17,76 +17,76 @@ export default async function HomePage({
1717

1818
const features = [
1919
{
20-
key: 'restApi',
21-
icon: Rocket,
22-
href: '/docs/getting-started/quick-start',
23-
title: t.features.restApi.title,
24-
description: t.features.restApi.description,
20+
key: 'selfHosted',
21+
icon: Server,
22+
href: '/docs/architecture',
23+
title: t.features.selfHosted.title,
24+
description: t.features.selfHosted.description,
2525
},
2626
{
27-
key: 'studio',
28-
icon: Monitor,
29-
href: '/docs/getting-started/cli',
30-
title: t.features.studio.title,
31-
description: t.features.studio.description,
27+
key: 'deployAnywhere',
28+
icon: Container,
29+
href: '/docs/deployment',
30+
title: t.features.deployAnywhere.title,
31+
description: t.features.deployAnywhere.description,
3232
},
3333
{
34-
key: 'multiDb',
35-
icon: HardDrive,
36-
href: '/docs/guides/driver-configuration',
37-
title: t.features.multiDb.title,
38-
description: t.features.multiDb.description,
34+
key: 'airGapped',
35+
icon: ShieldOff,
36+
href: '/docs/deploy/air-gapped',
37+
title: t.features.airGapped.title,
38+
description: t.features.airGapped.description,
3939
},
4040
{
41-
key: 'typeSafety',
42-
icon: ShieldCheck,
43-
href: '/docs/references/data',
44-
title: t.features.typeSafety.title,
45-
description: t.features.typeSafety.description,
41+
key: 'identity',
42+
icon: KeyRound,
43+
href: '/docs/configure/authentication',
44+
title: t.features.identity.title,
45+
description: t.features.identity.description,
4646
},
4747
{
48-
key: 'namespace',
49-
icon: Blocks,
50-
href: '/docs/concepts/core',
51-
title: t.features.namespace.title,
52-
description: t.features.namespace.description,
48+
key: 'permissions',
49+
icon: Lock,
50+
href: '/docs/configure/permissions',
51+
title: t.features.permissions.title,
52+
description: t.features.permissions.description,
5353
},
5454
{
55-
key: 'plugins',
56-
icon: Puzzle,
57-
href: '/docs/getting-started/examples',
58-
title: t.features.plugins.title,
59-
description: t.features.plugins.description,
55+
key: 'observability',
56+
icon: LineChart,
57+
href: '/docs/operate/observability',
58+
title: t.features.observability.title,
59+
description: t.features.observability.description,
6060
},
6161
];
6262

6363
const personas = [
6464
{
65-
key: 'fullStack',
66-
icon: Code2,
65+
key: 'itOps',
66+
icon: Wrench,
6767
color: 'text-blue-500',
68-
href: '/docs/getting-started/quick-start',
69-
title: t.personas.fullStack.title,
70-
description: t.personas.fullStack.description,
71-
action: t.personas.fullStack.action,
68+
href: '/docs/deployment',
69+
title: t.personas.itOps.title,
70+
description: t.personas.itOps.description,
71+
action: t.personas.itOps.action,
7272
},
7373
{
74-
key: 'platformTeam',
75-
icon: Users,
74+
key: 'security',
75+
icon: ShieldCheck,
7676
color: 'text-purple-500',
77-
href: '/docs/concepts',
78-
title: t.personas.platformTeam.title,
79-
description: t.personas.platformTeam.description,
80-
action: t.personas.platformTeam.action,
77+
href: '/docs/configure/permissions',
78+
title: t.personas.security.title,
79+
description: t.personas.security.description,
80+
action: t.personas.security.action,
8181
},
8282
{
83-
key: 'lowCode',
84-
icon: Blocks,
83+
key: 'business',
84+
icon: Briefcase,
8585
color: 'text-green-500',
86-
href: '/docs/getting-started/examples',
87-
title: t.personas.lowCode.title,
88-
description: t.personas.lowCode.description,
89-
action: t.personas.lowCode.action,
86+
href: '/docs/architecture',
87+
title: t.personas.business.title,
88+
description: t.personas.business.description,
89+
action: t.personas.business.action,
9090
},
9191
];
9292

apps/docs/components/code-preview.tsx

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@ interface CodePreviewProps {
44
className?: string;
55
}
66

7+
/**
8+
* Homepage code preview.
9+
*
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.
14+
*/
715
export function CodePreview({ className }: CodePreviewProps) {
816
const kw = 'text-purple-600 dark:text-purple-400 font-semibold';
917
const str = 'text-green-600 dark:text-green-300';
10-
const fn = 'text-blue-600 dark:text-blue-300';
11-
const typ = 'text-amber-600 dark:text-yellow-300';
12-
const prop = 'text-cyan-600 dark:text-sky-300';
13-
const bool = 'text-red-600 dark:text-red-300';
18+
const num = 'text-amber-600 dark:text-yellow-300';
19+
const key = 'text-cyan-600 dark:text-sky-300';
1420
const fg = 'text-foreground';
1521
const cm = 'text-foreground/40 italic';
1622

@@ -26,63 +32,67 @@ export function CodePreview({ className }: CodePreviewProps) {
2632
<div className="h-3 w-3 rounded-full bg-yellow-500/80" />
2733
<div className="h-3 w-3 rounded-full bg-green-500/80" />
2834
<div className="ml-2 text-xs font-medium text-muted-foreground font-mono">
29-
src/objects/task.object.ts
35+
docker-compose.yml
3036
</div>
3137
</div>
32-
33-
{/* Code Content — real ObjectStack API */}
38+
39+
{/* Code Content — real docker-compose deployment */}
3440
<div className="overflow-x-auto p-6 text-left bg-gradient-to-br from-card to-muted/20">
3541
<pre className="font-mono text-sm leading-7">
3642
<code>
37-
<span className={kw}>import</span>{' '}
38-
<span className={fg}>{'{'}</span>{' '}
39-
<span className={typ}>Data</span>{' '}
40-
<span className={fg}>{'}'}</span>{' '}
41-
<span className={kw}>from</span>{' '}
42-
<span className={str}>&apos;@objectstack/spec&apos;</span>;
43-
<br/><br/>
44-
<span className={kw}>const</span>{' '}
45-
<span className={fn}>task</span>:{' '}
46-
<span className={typ}>Data.Object</span>{' '}
47-
<span className={fg}>=</span>{' '}
48-
<span className={fg}>{'{'}</span>
43+
<span className={cm}>{'# Run ObjectOS against your own Postgres'}</span>
44+
<br/>
45+
<span className={key}>services</span><span className={fg}>:</span>
46+
<br/>
47+
{' '}<span className={key}>objectos</span><span className={fg}>:</span>
4948
<br/>
50-
{' '}<span className={prop}>name</span>:{' '}<span className={str}>&apos;task&apos;</span>,
49+
{' '}<span className={key}>image</span><span className={fg}>:</span>{' '}
50+
<span className={str}>ghcr.io/objectstack/objectos:latest</span>
5151
<br/>
52-
{' '}<span className={prop}>label</span>:{' '}<span className={str}>&apos;Task&apos;</span>,
52+
{' '}<span className={key}>ports</span><span className={fg}>:</span>{' '}
53+
[<span className={str}>&quot;3000:3000&quot;</span>]
5354
<br/>
54-
{' '}<span className={prop}>fields</span>:{' '}<span className={fg}>{'{'}</span>
55+
{' '}<span className={key}>environment</span><span className={fg}>:</span>
5556
<br/>
56-
{' '}<span className={prop}>subject</span>:{' '}<span className={fg}>{'{'}</span>{' '}
57-
<span className={prop}>type</span>:{' '}<span className={str}>&apos;text&apos;</span>,{' '}
58-
<span className={prop}>required</span>:{' '}<span className={bool}>true</span>{' '}
59-
<span className={fg}>{'}'}</span>,
57+
{' '}<span className={key}>OS_ARTIFACT_FILE</span><span className={fg}>:</span>{' '}
58+
<span className={str}>/artifacts/objectstack.json</span>
6059
<br/>
61-
{' '}<span className={prop}>status</span>:{' '}<span className={fg}>{'{'}</span>
60+
{' '}<span className={key}>OS_DATABASE_URL</span><span className={fg}>:</span>{' '}
61+
<span className={str}>postgres://app@db:5432/objectos</span>
6262
<br/>
63-
{' '}<span className={prop}>type</span>:{' '}<span className={str}>&apos;select&apos;</span>,
63+
{' '}<span className={key}>OS_AUTH_SECRET</span><span className={fg}>:</span>{' '}
64+
<span className={fg}>$</span><span className={key}>{'{AUTH_SECRET}'}</span>
6465
<br/>
65-
{' '}<span className={prop}>options</span>:{' '}[<span className={str}>&apos;draft&apos;</span>, <span className={str}>&apos;active&apos;</span>, <span className={str}>&apos;done&apos;</span>],
66+
{' '}<span className={key}>volumes</span><span className={fg}>:</span>
6667
<br/>
67-
{' '}<span className={fg}>{'}'}</span>,
68+
{' '}<span className={fg}>-</span>{' '}
69+
<span className={str}>./artifacts:/artifacts:ro</span>
6870
<br/>
69-
{' '}<span className={prop}>assignee</span>:{' '}<span className={fg}>{'{'}</span>{' '}
70-
<span className={prop}>type</span>:{' '}<span className={str}>&apos;lookup&apos;</span>,{' '}
71-
<span className={prop}>reference</span>:{' '}<span className={str}>&apos;user&apos;</span>{' '}
72-
<span className={fg}>{'}'}</span>,
71+
{' '}<span className={fg}>-</span>{' '}
72+
<span className={str}>objectos-data:/var/lib/objectos</span>
7373
<br/>
74-
{' '}<span className={fg}>{'}'}</span>,
74+
{' '}<span className={key}>depends_on</span><span className={fg}>:</span>{' '}
75+
[<span className={str}>db</span>]
76+
<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>
7581
<br/>
76-
<span className={fg}>{'}'}</span>;
82+
{' '}<span className={key}>volumes</span><span className={fg}>:</span>{' '}
83+
[<span className={str}>db-data:/var/lib/postgresql/data</span>]
7784
<br/><br/>
78-
<span className={cm}>{'// → REST API at /api/v1/task'}</span>
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>
7989
<br/>
80-
<span className={cm}>{'//Console UI at /_studio/'}</span>
90+
<span className={cm}>{'#Setup app at http://localhost:3000/_setup/'}</span>
8191
</code>
8292
</pre>
8393
</div>
8494
</div>
85-
95+
8696
{/* Glow Effect */}
8797
<div className="absolute -inset-4 -z-10 bg-primary/20 blur-3xl opacity-30 rounded-[50%]" />
8898
</div>

0 commit comments

Comments
 (0)