Skip to content

Commit e43626a

Browse files
os-zhuangclaude
andauthored
docs(ia): audience-first navigation — Learn/Build/Operate/Extend sections + business-facing entry pages (#3423)
* docs(ia): audience-first navigation — Learn/Build/Operate/Extend sections + business-facing entry pages - Root sidebar split into four audience sections via separators (zero URL churn) - getting-started split into Start Here / Cheatsheets; CLI and Validating Metadata moved to Deployment & Operations with redirects (incl. chain fix for the pre-2026-07 guides redirect) and in-content link rewrites - New: getting-started/platform-capabilities (business-language capability tour, HotCRM as running example) and getting-started/build-without-code (Studio/Console/Setup visual-building guide) - concepts/index gains Find Your Path reader cards; ui section renamed 'Views & Apps' in nav and home cards Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(i18n): English-only by decision — remove the cn shell The cn language was declared in docs.site.json and mapped in middleware, but lib/i18n.ts (what fumadocs actually consumes) only ever listed en and there is zero cn content — a config-vs-runtime drift that made the site look bilingual. Remove the declaration and the dead zh->cn Accept-Language mapping; keep the i18n plumbing so a future language is content + one config line. Verified: docs build passes; with Accept-Language: zh-CN, /docs serves the English page with no /cn redirect. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(nav): declutter the sidebar — text-only, three sections, one screen Feedback pass on the audience-first IA: the sidebar still read as crowded. - Drop the hardcoded Docs/Blog links above the tree (layout.shared.tsx) - Strip per-item icons from all 14 section meta.json files (text-only tree) - Merge the one-item Operate section: Learn / Build / Platform - Take References and Releases (lookup content, 22 generated/log pages) out of the tree — URLs still resolve (verified 200) and the docs home page links both; getting-started no longer defaultOpen so the first screen shows all twelve top-level entries at once Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(nav): surface the business-facing pages at the top of Learn 'What Can It Do?' and 'Build Without Code' were buried inside the Get Started folder — the exact audience they serve would never expand it. Promote both to top-level Learn entries (/docs/platform-capabilities, /docs/build-without-code; new-in-this-PR pages, so no redirects needed), and lead the docs-home 'Start here' list with them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(capabilities): expand the business tour into a full section 'What Can It Do?' grows from one page into a Learn-section folder of ten business-language pages — data, views, forms & quality, automation, approvals, permissions, analytics, AI, integrations & everyday work, and a requirements one-pager template. Each page keeps three anchors: business scenarios, an 'In HotCRM' pointer at the running example, and a 'For developers' cross-link into the technical Build docs. The index becomes a card directory; new pages drop hand-written H1s (frontmatter title renders them). URL /docs/platform-capabilities → /docs/capabilities (page introduced in this PR, so no redirect debt). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(capabilities): correct HotCRM flow count to 17 (verified against src/flows) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * chore(ratchet): migrate role-word baseline entry for relocated cli.mdx The page moved getting-started → deployment in this PR; its single pre-existing occurrence (a table header) moves with it. Net change zero. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 1c8bf4f commit e43626a

48 files changed

Lines changed: 507 additions & 90 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
---
3+
4+
docs: audience-first IA — sidebar sections (Learn / Build / Operate / Extend & Reference), tooling pages moved to Deployment with redirects, new business-facing capability tour and no-code building guide, reader-path cards on Core Concepts.

apps/docs/lib/i18n.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import { defineI18n } from 'fumadocs-core/i18n';
22

33
/**
44
* i18n Configuration for ObjectStack Documentation
5-
*
5+
*
66
* Supported Languages:
77
* - en: English (Default)
8-
* - cn: Chinese (中文)
8+
*
9+
* The docs are English-only by decision (2026-07). To add a language later,
10+
* list it here and provide content — routing already handles the rest.
911
*/
1012
export const i18n = defineI18n({
1113
defaultLanguage: 'en',

apps/docs/lib/layout.shared.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@ export function baseOptions(): BaseLayoutProps {
1717
</div>
1818
),
1919
},
20-
links: [
21-
{ text: 'Docs', url: '/docs', active: 'nested-url' },
22-
{ text: 'Blog', url: '/blog', active: 'nested-url' },
23-
],
2420
githubUrl: `https://github.com/${gitConfig.user}/${gitConfig.repo}`,
2521
};
2622
}

apps/docs/middleware.ts

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,6 @@ function setLocaleCookie(response: NextResponse, locale: string): void {
1919
});
2020
}
2121

22-
/**
23-
* Language code mapping
24-
* Maps browser language codes to our supported language codes
25-
*/
26-
const LANGUAGE_MAPPING: Record<string, string> = {
27-
'zh': 'cn', // Chinese -> cn
28-
'zh-CN': 'cn', // Chinese (China) -> cn
29-
'zh-TW': 'cn', // Chinese (Taiwan) -> cn
30-
'zh-HK': 'cn', // Chinese (Hong Kong) -> cn
31-
};
32-
33-
/**
34-
* Normalize language code to match our supported languages
35-
*/
36-
function normalizeLanguage(lang: string): string {
37-
// Check direct mapping first
38-
if (LANGUAGE_MAPPING[lang]) {
39-
return LANGUAGE_MAPPING[lang];
40-
}
41-
42-
// Check if the base language (without region) is mapped
43-
const baseLang = lang.split('-')[0];
44-
if (LANGUAGE_MAPPING[baseLang]) {
45-
return LANGUAGE_MAPPING[baseLang];
46-
}
47-
48-
return lang;
49-
}
50-
5122
/**
5223
* Get the preferred language from the request
5324
*/
@@ -62,12 +33,9 @@ function getPreferredLanguage(request: NextRequest): string {
6233
const negotiatorHeaders = Object.fromEntries(request.headers.entries());
6334
const negotiator = new Negotiator({ headers: negotiatorHeaders });
6435
const browserLanguages = negotiator.languages();
65-
66-
// Normalize browser languages to match our supported languages
67-
const normalizedLanguages = browserLanguages.map(normalizeLanguage);
68-
36+
6937
// Find the first match
70-
for (const lang of normalizedLanguages) {
38+
for (const lang of browserLanguages) {
7139
if (SUPPORTED_LANGUAGES.includes(lang)) {
7240
return lang;
7341
}
@@ -82,9 +50,11 @@ function getPreferredLanguage(request: NextRequest): string {
8250
* This middleware:
8351
* - Detects the user's preferred language from browser settings or cookies
8452
* - Redirects users to the appropriate localized version
85-
* - For default language (en): keeps URL as "/" (with internal rewrite)
86-
* - For other languages (cn): redirects to "/cn/"
53+
* - For the default language (en): keeps URL as "/" (with internal rewrite)
8754
* - Stores language preference as a cookie
55+
*
56+
* The docs are English-only by decision (2026-07); the i18n plumbing stays so a
57+
* future language only needs entries in lib/i18n.ts and content, not new routing.
8858
*/
8959
export default function middleware(request: NextRequest) {
9060
const { pathname } = request.nextUrl;

apps/docs/redirects.mjs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ export const docsRedirects = [
1212
// getting-started
1313
['/docs/guides/cheatsheets/quick-reference', '/docs/getting-started/quick-reference'],
1414
['/docs/guides/common-patterns', '/docs/getting-started/common-patterns'],
15-
['/docs/guides/validating-metadata', '/docs/getting-started/validating-metadata'],
15+
['/docs/guides/validating-metadata', '/docs/deployment/validating-metadata'],
16+
// 2026-07 audience-first IA: tooling pages moved out of getting-started
17+
['/docs/getting-started/cli', '/docs/deployment/cli'],
18+
['/docs/getting-started/validating-metadata', '/docs/deployment/validating-metadata'],
1619
// concepts
1720
['/docs/getting-started/core-concepts', '/docs/concepts'],
1821
['/docs/getting-started/architecture', '/docs/concepts/architecture'],

content/docs.site.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"i18n": {
99
"enabled": true,
1010
"defaultLanguage": "en",
11-
"languages": ["en", "cn"
11+
"languages": [
12+
"en"
1213
]
1314
},
1415
"branding": {
@@ -18,7 +19,7 @@
1819
"dark": "/logo.svg"
1920
},
2021
"theme": {
21-
"accentColor": "blue",
22+
"accentColor": "blue",
2223
"radius": "0.5rem"
2324
}
2425
},
@@ -34,7 +35,10 @@
3435
}
3536
],
3637
"socials": [
37-
{ "platform": "github", "url": "https://github.com/objectstack-ai/spec" }
38+
{
39+
"platform": "github",
40+
"url": "https://github.com/objectstack-ai/spec"
41+
}
3842
]
3943
},
4044
"sidebar": {

content/docs/ai/meta.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"title": "AI",
3-
"icon": "Bot",
43
"pages": [
54
"index",
65
"connect-mcp",

content/docs/api/meta.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"title": "API & SDK",
3-
"icon": "Plug",
43
"pages": [
54
"index",
65
"data-api",

content/docs/automation/meta.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"title": "Automation",
3-
"icon": "Workflow",
43
"pages": [
54
"index",
65
"hooks",
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: Build Without Code
3+
description: What admins and business analysts can do visually in Console, Studio, and Setup — and how that stays in sync with metadata written as code
4+
---
5+
6+
7+
You do not have to write metadata files to build on this platform. **Console**, **Studio**, and **Setup** cover the run–design–administer loop visually — and everything you do there produces *the same metadata artifacts* a developer would write by hand, checked by the same validation gate. Clicking and coding are two editors over one definition, so a team can freely mix both.
8+
9+
## Console — where the app runs
10+
11+
`/_console/` is the workspace end users live in:
12+
13+
- **Home** lists your apps, pending approvals, scheduled digests, and recently visited records.
14+
- Each app renders its declared navigation, views (table, kanban, calendar, gantt, …), dashboards, and record pages — switch views from the toolbar, save filters, pin favorites.
15+
- **Approvals inbox** collects everything waiting on you; decisions (approve / reject / send back) happen here.
16+
- Record pages carry the collaboration surface: discussion threads, attachments, activity timeline, and change history.
17+
- Global search (`⌘K`) spans objects, with partial and pinyin matching.
18+
19+
## Studio — where the app is designed
20+
21+
From any app, **"Design in Studio"** opens the same application in design mode. Studio is organized around four pillars:
22+
23+
| Pillar | What you manage there |
24+
|---|---|
25+
| **Data** | Every object with its fields, plus per-object tabs for records, forms, validation rules, lifecycle hooks, actions, and API exposure |
26+
| **Automation** | All flows in one list with enable/disable switches; each opens as a visual diagram — triggers, branches, approval nodes, run history, and problem markers |
27+
| **Interface** | Apps, navigation, views, pages, and dashboards |
28+
| **Access** | Permission sets as a matrix of object/field grants, plus sharing configuration |
29+
30+
Two properties make Studio safe to hand to non-developers:
31+
32+
- **Draft → publish.** Changes save as drafts and go live only when published, with a change list to review first.
33+
- **Same gate as code.** A change that would break the app (a dangling reference, an invalid predicate) is rejected by the same validation that checks hand-written metadata — there is no "UI edits bypass review" back door.
34+
35+
## Setup — where the platform is administered
36+
37+
The **System Settings** app covers platform administration: user management and invitations, permission assignment, datasources (including federated external databases), diagnostics and audit logs, and the **Marketplace** — template apps such as HotCRM install with one click and appear alongside your own apps, ready to customize in Studio.
38+
39+
## When to reach for code instead
40+
41+
Visual editing shines for day-to-day evolution: adding fields, adjusting views, tweaking a flow, granting access. Teams typically switch to [metadata as code](/docs/getting-started/your-first-project) when they want version control and pull-request review across many changes, AI-assisted authoring, or promotion of the same app across environments. Both roads meet in the same artifact — start visual, graduate to code, or run both side by side.

0 commit comments

Comments
 (0)