@pagenary/publisher 2026.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +337 -0
- package/bin/pagenary.mjs +116 -0
- package/build.config.json +5 -0
- package/package.json +66 -0
- package/scripts/build-site.js +87 -0
- package/scripts/build-tenants.js +3569 -0
- package/scripts/build.js +99 -0
- package/scripts/generate-sections.js +41 -0
- package/scripts/lib/seo-generator.js +558 -0
- package/scripts/lint-content.js +62 -0
- package/scripts/seo-smoke.js +94 -0
- package/scripts/serve.js +142 -0
- package/site/app.js +1 -0
- package/site/index.html +57 -0
- package/site/lib/categories.js +1 -0
- package/site/lib/export.js +1 -0
- package/site/lib/manifest-utils.js +1 -0
- package/site/lib/router.js +1 -0
- package/site/lib/search.js +1 -0
- package/site/llms.txt +22 -0
- package/site/manifest.js +132 -0
- package/site/mermaid-init.js +1 -0
- package/site/pages/api.html +339 -0
- package/site/pages/architecture.html +303 -0
- package/site/pages/deployment.html +282 -0
- package/site/pages/developer-guide.html +157 -0
- package/site/pages/extending.html +135 -0
- package/site/pages/quickstart.html +318 -0
- package/site/pages/seo-strategy.html +121 -0
- package/site/pages/tenant-config.html +519 -0
- package/site/pages/welcome.html +116 -0
- package/site/robots.txt +10 -0
- package/site/sections/api.js +3 -0
- package/site/sections/architecture.js +3 -0
- package/site/sections/deployment.js +3 -0
- package/site/sections/developer-guide.js +3 -0
- package/site/sections/extending.js +3 -0
- package/site/sections/quickstart.js +3 -0
- package/site/sections/section-templates.js +1 -0
- package/site/sections/seo-strategy.js +3 -0
- package/site/sections/tenant-config.js +3 -0
- package/site/sections/welcome.js +3 -0
- package/site/seo.js +1 -0
- package/site/sitemap.xml +63 -0
- package/site/styles.css +1982 -0
- package/site/syntax-highlight.js +1 -0
- package/src/app.js +988 -0
- package/src/index.html +56 -0
- package/src/lib/categories.js +55 -0
- package/src/lib/export.js +195 -0
- package/src/lib/manifest-utils.js +69 -0
- package/src/lib/router.js +44 -0
- package/src/lib/search.js +151 -0
- package/src/manifest.js +246 -0
- package/src/mermaid-init.js +207 -0
- package/src/sections/archive-future-roadmap.js +7 -0
- package/src/sections/archive-initiative-alpha.js +7 -0
- package/src/sections/archive-milestone-records.js +7 -0
- package/src/sections/archive-timeline-overview.js +7 -0
- package/src/sections/core-technology-compliance-frameworks.js +7 -0
- package/src/sections/core-technology-coordination-model.js +7 -0
- package/src/sections/core-technology-data-definitions.js +7 -0
- package/src/sections/core-technology-hardware-integration.js +7 -0
- package/src/sections/core-technology-integrity-controls.js +7 -0
- package/src/sections/core-technology-network-topology.js +7 -0
- package/src/sections/core-technology-operator-requirements.js +7 -0
- package/src/sections/core-technology-overview.js +7 -0
- package/src/sections/core-technology-service-interfaces.js +7 -0
- package/src/sections/core-technology-synchronization-strategy.js +7 -0
- package/src/sections/core-technology-system-foundation.js +7 -0
- package/src/sections/developers-api-credentials.js +7 -0
- package/src/sections/developers-api-operations.js +7 -0
- package/src/sections/developers-api-reference.js +7 -0
- package/src/sections/developers-api-websocket.js +7 -0
- package/src/sections/developers-automation-blueprints.js +7 -0
- package/src/sections/developers-automation-modules.js +7 -0
- package/src/sections/developers-automation-patterns.js +7 -0
- package/src/sections/developers-deployment-playbook.js +7 -0
- package/src/sections/developers-overview.js +7 -0
- package/src/sections/developers-scheduling-patterns.js +7 -0
- package/src/sections/developers-sdk-go.js +7 -0
- package/src/sections/developers-sdk-javascript.js +7 -0
- package/src/sections/developers-sdk-python.js +7 -0
- package/src/sections/developers-sdk-rust.js +7 -0
- package/src/sections/developers-sdks.js +7 -0
- package/src/sections/developers-solution-examples.js +7 -0
- package/src/sections/developers-testing-framework.js +7 -0
- package/src/sections/getting-started-architecture-basics.js +7 -0
- package/src/sections/getting-started-introduction.js +7 -0
- package/src/sections/getting-started-performance-overview.js +7 -0
- package/src/sections/governance-community-initiatives.js +7 -0
- package/src/sections/governance-dao-overview.js +7 -0
- package/src/sections/governance-multi-token.js +7 -0
- package/src/sections/governance-overview.js +7 -0
- package/src/sections/governance-proposal-process.js +7 -0
- package/src/sections/governance-proposals.js +7 -0
- package/src/sections/governance-structure.js +7 -0
- package/src/sections/governance-token-distribution.js +7 -0
- package/src/sections/governance-treasury.js +7 -0
- package/src/sections/operations-environment-prep.js +7 -0
- package/src/sections/operations-getting-started.js +7 -0
- package/src/sections/operations-incentives-guide.js +7 -0
- package/src/sections/operations-incentives-strategies.js +7 -0
- package/src/sections/operations-incentives.js +7 -0
- package/src/sections/operations-infrastructure.js +7 -0
- package/src/sections/operations-monitoring.js +7 -0
- package/src/sections/operations-overview.js +7 -0
- package/src/sections/operations-performance.js +7 -0
- package/src/sections/operations-power-infrastructure.js +7 -0
- package/src/sections/operations-setup-guide.js +7 -0
- package/src/sections/operations-sync-setup.js +7 -0
- package/src/sections/products-flagship-solution.js +7 -0
- package/src/sections/products-solution-library.js +7 -0
- package/src/sections/resources-brand-assets.js +7 -0
- package/src/sections/resources-faq.js +7 -0
- package/src/sections/resources-glossary.js +7 -0
- package/src/sections/resources-research-papers.js +7 -0
- package/src/sections/section-templates.js +873 -0
- package/src/sections/security-audits.js +7 -0
- package/src/sections/security-best-practices.js +7 -0
- package/src/sections/security-bug-bounty.js +7 -0
- package/src/sections/security-incident-response.js +7 -0
- package/src/sections/security-overview.js +7 -0
- package/src/sections/technical-architecture.js +7 -0
- package/src/sections/technical-whitepaper.js +7 -0
- package/src/sections/tutorial-automation-bot.js +7 -0
- package/src/sections/tutorial-build-first-integration.js +7 -0
- package/src/sections/tutorial-deploy-automation.js +7 -0
- package/src/sections/tutorial-event-driven-experience.js +7 -0
- package/src/sections/tutorial-operations-onboarding.js +7 -0
- package/src/sections/tutorial-systems-integration.js +7 -0
- package/src/sections/tutorials-overview.js +7 -0
- package/src/sections/use-case-connected-devices.js +7 -0
- package/src/sections/use-case-digital-auctions.js +7 -0
- package/src/sections/use-case-financial-automation.js +7 -0
- package/src/sections/use-case-interactive-media.js +7 -0
- package/src/sections/use-case-realtime-execution.js +7 -0
- package/src/sections/use-case-research-analytics.js +7 -0
- package/src/sections/use-case-supply-operations.js +7 -0
- package/src/sections/use-cases-overview.js +7 -0
- package/src/sections/welcome-overview.js +7 -0
- package/src/seo.js +90 -0
- package/src/styles.css +1982 -0
- package/src/syntax-highlight.js +90 -0
- package/tenants.json.example +68 -0
- package/tenants.schema.json +231 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Syntax highlighting module using Prism.js
|
|
3
|
+
* Lazy-loads Prism only when code blocks are detected
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
let prismPromise = null;
|
|
7
|
+
|
|
8
|
+
// Languages to load - add more as needed
|
|
9
|
+
const LANGUAGES = ['c', 'json', 'javascript', 'typescript', 'python', 'rust', 'go', 'bash', 'shell', 'yaml', 'toml', 'sql', 'solidity', 'ini'];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Lazily load Prism.js and required language modules
|
|
13
|
+
*/
|
|
14
|
+
async function loadPrism() {
|
|
15
|
+
if (prismPromise) return prismPromise;
|
|
16
|
+
|
|
17
|
+
prismPromise = (async () => {
|
|
18
|
+
// Load Prism core
|
|
19
|
+
const Prism = (await import('https://esm.sh/prismjs@1.29.0')).default;
|
|
20
|
+
|
|
21
|
+
// Load additional languages in parallel
|
|
22
|
+
await Promise.all([
|
|
23
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-c'),
|
|
24
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-json'),
|
|
25
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-typescript'),
|
|
26
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-python'),
|
|
27
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-rust'),
|
|
28
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-go'),
|
|
29
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-bash'),
|
|
30
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-yaml'),
|
|
31
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-toml'),
|
|
32
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-sql'),
|
|
33
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-solidity'),
|
|
34
|
+
import('https://esm.sh/prismjs@1.29.0/components/prism-ini'),
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
return Prism;
|
|
38
|
+
})();
|
|
39
|
+
|
|
40
|
+
return prismPromise;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Map common language aliases to Prism language names
|
|
45
|
+
*/
|
|
46
|
+
function normalizeLanguage(lang) {
|
|
47
|
+
const aliases = {
|
|
48
|
+
'js': 'javascript',
|
|
49
|
+
'ts': 'typescript',
|
|
50
|
+
'py': 'python',
|
|
51
|
+
'sh': 'bash',
|
|
52
|
+
'shell': 'bash',
|
|
53
|
+
'yml': 'yaml',
|
|
54
|
+
'sol': 'solidity',
|
|
55
|
+
};
|
|
56
|
+
return aliases[lang] || lang;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Highlight all code blocks within a container
|
|
61
|
+
* @param {HTMLElement} container - The container to search for code blocks
|
|
62
|
+
*/
|
|
63
|
+
export async function highlightCodeBlocks(container) {
|
|
64
|
+
// Find all code blocks with a language class
|
|
65
|
+
const codeBlocks = container.querySelectorAll('pre code[class*="language-"]');
|
|
66
|
+
if (codeBlocks.length === 0) return;
|
|
67
|
+
|
|
68
|
+
// Filter out mermaid blocks (handled separately)
|
|
69
|
+
const highlightable = Array.from(codeBlocks).filter(
|
|
70
|
+
block => !block.classList.contains('language-mermaid')
|
|
71
|
+
);
|
|
72
|
+
if (highlightable.length === 0) return;
|
|
73
|
+
|
|
74
|
+
const Prism = await loadPrism();
|
|
75
|
+
|
|
76
|
+
for (const codeBlock of highlightable) {
|
|
77
|
+
// Extract language from class
|
|
78
|
+
const langClass = Array.from(codeBlock.classList).find(c => c.startsWith('language-'));
|
|
79
|
+
if (!langClass) continue;
|
|
80
|
+
|
|
81
|
+
const lang = normalizeLanguage(langClass.replace('language-', ''));
|
|
82
|
+
|
|
83
|
+
// Check if Prism supports this language
|
|
84
|
+
if (Prism.languages[lang]) {
|
|
85
|
+
const code = codeBlock.textContent;
|
|
86
|
+
codeBlock.innerHTML = Prism.highlight(code, Prism.languages[lang], lang);
|
|
87
|
+
codeBlock.parentElement.classList.add('highlighted');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./tenants.schema.json",
|
|
3
|
+
"tenants": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tenant-alpha",
|
|
6
|
+
"enabled": true,
|
|
7
|
+
"source": {
|
|
8
|
+
"type": "local",
|
|
9
|
+
"path": "./tenants/tenant-alpha"
|
|
10
|
+
},
|
|
11
|
+
"target": {
|
|
12
|
+
"type": "local",
|
|
13
|
+
"path": "./dist/tenant-alpha"
|
|
14
|
+
},
|
|
15
|
+
"domains": ["tenant-alpha.local", "alpha.example.com"],
|
|
16
|
+
"config": {
|
|
17
|
+
"title": "Tenant Alpha Documentation",
|
|
18
|
+
"brandMark": "Alpha",
|
|
19
|
+
"brandSub": "Docs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "tenant-beta",
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "local",
|
|
27
|
+
"path": "./tenants/tenant-beta"
|
|
28
|
+
},
|
|
29
|
+
"target": {
|
|
30
|
+
"type": "local",
|
|
31
|
+
"path": "./dist/tenant-beta"
|
|
32
|
+
},
|
|
33
|
+
"domains": ["tenant-beta.local"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "tenant-default",
|
|
37
|
+
"enabled": true,
|
|
38
|
+
"domains": ["localhost", "docs.example.com"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "external-docs",
|
|
42
|
+
"enabled": false,
|
|
43
|
+
"source": {
|
|
44
|
+
"type": "local",
|
|
45
|
+
"path": "/home/user/projects/external-docs"
|
|
46
|
+
},
|
|
47
|
+
"target": {
|
|
48
|
+
"type": "local",
|
|
49
|
+
"path": "/var/www/docs/external"
|
|
50
|
+
},
|
|
51
|
+
"domains": ["external.example.com"],
|
|
52
|
+
"config": {
|
|
53
|
+
"title": "External Documentation",
|
|
54
|
+
"accentColor": "#10B981"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"defaults": {
|
|
59
|
+
"source": {
|
|
60
|
+
"type": "local",
|
|
61
|
+
"path": "./tenants"
|
|
62
|
+
},
|
|
63
|
+
"target": {
|
|
64
|
+
"type": "local",
|
|
65
|
+
"path": "./dist"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://pagenary.io/schemas/tenants.schema.json",
|
|
4
|
+
"title": "Pagenary Tenant Registry",
|
|
5
|
+
"description": "Configuration file for multi-tenant documentation builds",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"$schema": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "JSON Schema reference for validation"
|
|
11
|
+
},
|
|
12
|
+
"tenants": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"description": "List of tenant configurations",
|
|
15
|
+
"items": {
|
|
16
|
+
"$ref": "#/definitions/tenant"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"defaults": {
|
|
20
|
+
"$ref": "#/definitions/defaults",
|
|
21
|
+
"description": "Default source and target paths for tenants without explicit paths"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"required": ["tenants"],
|
|
25
|
+
"definitions": {
|
|
26
|
+
"tenant": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"description": "A single tenant configuration",
|
|
29
|
+
"required": ["id"],
|
|
30
|
+
"properties": {
|
|
31
|
+
"id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$",
|
|
34
|
+
"description": "Unique tenant identifier (lowercase alphanumeric with hyphens)"
|
|
35
|
+
},
|
|
36
|
+
"enabled": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"default": true,
|
|
39
|
+
"description": "Whether this tenant should be built"
|
|
40
|
+
},
|
|
41
|
+
"source": {
|
|
42
|
+
"$ref": "#/definitions/sourcePath",
|
|
43
|
+
"description": "Where to read tenant content from"
|
|
44
|
+
},
|
|
45
|
+
"target": {
|
|
46
|
+
"$ref": "#/definitions/targetPath",
|
|
47
|
+
"description": "Where to write built tenant bundle"
|
|
48
|
+
},
|
|
49
|
+
"domains": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": {
|
|
52
|
+
"type": "string"
|
|
53
|
+
},
|
|
54
|
+
"description": "Domain names for routing (used by Caddyfile generator)"
|
|
55
|
+
},
|
|
56
|
+
"config": {
|
|
57
|
+
"$ref": "#/definitions/tenantConfig",
|
|
58
|
+
"description": "Branding and configuration overrides"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"sourcePath": {
|
|
63
|
+
"oneOf": [
|
|
64
|
+
{ "$ref": "#/definitions/localSource" },
|
|
65
|
+
{ "$ref": "#/definitions/gitSource" }
|
|
66
|
+
],
|
|
67
|
+
"description": "Source location for tenant content (local path or git repository)"
|
|
68
|
+
},
|
|
69
|
+
"localSource": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"description": "Local filesystem source",
|
|
72
|
+
"properties": {
|
|
73
|
+
"type": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": ["local"],
|
|
76
|
+
"default": "local",
|
|
77
|
+
"description": "Local source type"
|
|
78
|
+
},
|
|
79
|
+
"path": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"description": "Path to tenant source directory. Relative paths resolve from publisher root. Supports environment variable expansion ($VAR or ${VAR})."
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"required": ["path"]
|
|
85
|
+
},
|
|
86
|
+
"gitSource": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"description": "Git repository source",
|
|
89
|
+
"properties": {
|
|
90
|
+
"type": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"enum": ["git"],
|
|
93
|
+
"description": "Git source type"
|
|
94
|
+
},
|
|
95
|
+
"url": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "Git repository URL (HTTPS, SSH, or file://)"
|
|
98
|
+
},
|
|
99
|
+
"ref": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"default": "main",
|
|
102
|
+
"description": "Branch, tag, or commit SHA to checkout"
|
|
103
|
+
},
|
|
104
|
+
"path": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"default": ".",
|
|
107
|
+
"description": "Subdirectory within repository containing tenant content"
|
|
108
|
+
},
|
|
109
|
+
"sparse": {
|
|
110
|
+
"type": "boolean",
|
|
111
|
+
"default": false,
|
|
112
|
+
"description": "Use sparse checkout (only fetch subdirectory specified by path)"
|
|
113
|
+
},
|
|
114
|
+
"depth": {
|
|
115
|
+
"type": "integer",
|
|
116
|
+
"minimum": 1,
|
|
117
|
+
"default": 1,
|
|
118
|
+
"description": "Shallow clone depth (1 = latest commit only)"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"required": ["type", "url"]
|
|
122
|
+
},
|
|
123
|
+
"targetPath": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"description": "Target location for built tenant bundle",
|
|
126
|
+
"properties": {
|
|
127
|
+
"type": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"enum": ["local"],
|
|
130
|
+
"default": "local",
|
|
131
|
+
"description": "Target type (currently only 'local' is supported)"
|
|
132
|
+
},
|
|
133
|
+
"path": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"description": "Path to output directory. Relative paths resolve from publisher root. Supports environment variable expansion ($VAR or ${VAR})."
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"tenantConfig": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"description": "Tenant branding and configuration",
|
|
142
|
+
"properties": {
|
|
143
|
+
"title": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"description": "HTML page title"
|
|
146
|
+
},
|
|
147
|
+
"description": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"description": "Meta description for SEO"
|
|
150
|
+
},
|
|
151
|
+
"brandMark": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"description": "Primary brand text in header"
|
|
154
|
+
},
|
|
155
|
+
"brandSub": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"description": "Secondary brand text in header"
|
|
158
|
+
},
|
|
159
|
+
"tagline": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"description": "Tagline shown in header"
|
|
162
|
+
},
|
|
163
|
+
"accentColor": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
|
|
166
|
+
"description": "CSS accent color (hex format)"
|
|
167
|
+
},
|
|
168
|
+
"welcome": {
|
|
169
|
+
"$ref": "#/definitions/welcomeConfig",
|
|
170
|
+
"description": "Welcome section customization"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"welcomeConfig": {
|
|
175
|
+
"type": "object",
|
|
176
|
+
"description": "Welcome section content",
|
|
177
|
+
"properties": {
|
|
178
|
+
"eyebrow": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"description": "Small text above headline"
|
|
181
|
+
},
|
|
182
|
+
"headline": {
|
|
183
|
+
"type": "string",
|
|
184
|
+
"description": "Main welcome heading"
|
|
185
|
+
},
|
|
186
|
+
"lead": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"description": "Introductory paragraph"
|
|
189
|
+
},
|
|
190
|
+
"pillars": {
|
|
191
|
+
"type": "array",
|
|
192
|
+
"items": { "type": "string" },
|
|
193
|
+
"description": "Value proposition bullet points"
|
|
194
|
+
},
|
|
195
|
+
"checklist": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"items": { "type": "string" },
|
|
198
|
+
"description": "Getting started checklist items"
|
|
199
|
+
},
|
|
200
|
+
"quickLinks": {
|
|
201
|
+
"type": "array",
|
|
202
|
+
"items": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"properties": {
|
|
205
|
+
"label": { "type": "string" },
|
|
206
|
+
"href": { "type": "string" }
|
|
207
|
+
},
|
|
208
|
+
"required": ["label", "href"]
|
|
209
|
+
},
|
|
210
|
+
"description": "Quick navigation links"
|
|
211
|
+
},
|
|
212
|
+
"quote": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"description": "Optional quote or testimonial"
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
"defaults": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"description": "Default paths for tenants without explicit configuration",
|
|
221
|
+
"properties": {
|
|
222
|
+
"source": {
|
|
223
|
+
"$ref": "#/definitions/sourcePath"
|
|
224
|
+
},
|
|
225
|
+
"target": {
|
|
226
|
+
"$ref": "#/definitions/targetPath"
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|