feat: add new page configurations and JSON files for Builders Hub, Circles, and Technology Stack

This commit is contained in:
jinhojang6
2026-04-28 02:32:15 +09:00
parent 22879040fd
commit aef61ea207
5 changed files with 254 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
{
"schemaVersion": 1,
"language": "en",
"route": "/builders-hub",
"title": "Builders Hub | Logos",
"description": "Explore RFPs, submit ideas, install the Logos App, and join a growing community of builders shipping privacy-first decentralised applications.",
"heading": "Logos Builders Hub",
"seo": {
"keywords": ["logos", "builders", "rfps", "ideas", "decentralised"]
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"schemaVersion": 1,
"language": "en",
"route": "/circles",
"title": "Circles | Logos",
"description": "Local chapters are at the heart of the Logos movement. Find a Circle near you, join upcoming events, and tackle winnable local issues.",
"heading": "Logos Circles",
"seo": {
"keywords": ["logos", "circles", "community", "events", "civil organising"]
}
}
@@ -0,0 +1,60 @@
{
"schemaVersion": 1,
"language": "en",
"route": "/technology-stack/blockchain",
"title": "Blockchain | Logos",
"description": "This isn't just another L1 — it's a purpose-built blockchain using Cryptarchia, a private proof-of-stake consensus mechanism where validator identities and stake amounts remain hidden.",
"heading": "Blockchain",
"seo": {
"keywords": ["logos", "blockchain", "cryptarchia", "proof of stake", "privacy", "consensus"]
},
"sections": [
{
"componentType": "hero",
"key": "blockchain.hero",
"eyebrow": "Technology stack",
"headline": "Blockchain",
"body": "This isn't just another L1 — it's a purpose-built blockchain using Cryptarchia, a private proof-of-stake consensus mechanism where validator identities and stake amounts remain hidden.",
"ctas": [
{ "label": "Logos app", "href": "https://logos.co/app", "external": true, "variant": "primary" },
{ "label": "Docs", "href": "https://docs.logos.co/blockchain", "external": true, "variant": "secondary" }
]
},
{
"componentType": "richText",
"key": "blockchain.privacy",
"body": "Privacy as infrastructure. Logos addresses privacy concerns through a combination of private leadership elections and anonymous broadcasting, creating a system where proposers can participate in consensus without revealing their identity or stake."
},
{
"componentType": "cardGrid",
"key": "blockchain.cryptarchia",
"heading": "Cryptarchia",
"subheading": "A private proof-of-stake consensus mechanism where validator identities and stake amounts remain hidden.",
"cards": [
{
"title": "The Blend Network",
"description": "Providing network-level anonymity for block propagation."
},
{
"title": "Logos Execution Zone (LEZ)",
"description": "Enabling programmable state — both public and private — where developers can deploy programs, run AMMs, transfer tokens, and build financial primitives with built-in privacy."
}
]
},
{
"componentType": "ctaPanel",
"key": "blockchain.builderCta",
"title": "Logos Builder Hub",
"description": "Everything you need to start building privacy-first decentralised applications. Explore RFPs, find ideas, and connect with other builders.",
"cta": { "label": "Build", "href": "/builders-hub" }
},
{
"componentType": "relatedArticles",
"key": "blockchain.relatedArticles",
"eyebrow": "Logos in the News",
"title": "Related Articles",
"cta": { "label": "Explore all articles", "href": "/press" },
"visibleCount": 4
}
]
}
+111
View File
@@ -0,0 +1,111 @@
{
"schemaVersion": 1,
"language": "en",
"route": "/technology-stack",
"title": "Technology Stack | Logos",
"description": "Modular by design. Storage, Messaging, Blockchain, and User Modules form the foundation for privacy-first decentralised applications.",
"heading": "The Logos Technology Stack",
"seo": {
"keywords": ["logos", "technology stack", "storage", "messaging", "blockchain", "modules"]
},
"sections": [
{
"componentType": "hero",
"key": "techStack.hero",
"eyebrow": "Open by design, open in spirit.",
"headline": "The Logos Technology Stack",
"body": "The Logos Technology Stack is a unified ecosystem of distinct modules. The entire stack is modular so developers can assemble their own Logos-based platform with a different selection of modules."
},
{
"componentType": "techStackOverview",
"key": "techStack.overview",
"pillars": [
{
"id": "storage",
"title": "Storage",
"body": "Codex-based content addressing with reproducible attestation and graceful client-side fallback.",
"href": "/technology-stack/storage"
},
{
"id": "messaging",
"title": "Messaging",
"body": "Waku peer-to-peer messaging that survives hostile networks and adversarial intermediaries.",
"href": "/technology-stack/messaging"
},
{
"id": "blockchain",
"title": "Blockchain",
"body": "Cryptarchia: a private proof-of-stake consensus where validator identities and stake amounts remain hidden.",
"href": "/technology-stack/blockchain"
},
{
"id": "userModules",
"title": "User Modules",
"body": "Wallet, chat, files, and explorer modules composing into the Logos App.",
"href": "/technology-stack#logos-app"
}
],
"networkingTitle": "The Networking Stack: Discovery, Peering, and Mix-Net",
"foundationTitle": "The Foundation: Logos Kernel"
},
{
"componentType": "giantSwitch",
"key": "techStack.appInstall",
"accent": "grey",
"imagePosition": "right",
"title": "Install the Logos app.",
"description": "The Logos App is a complete distribution that bundles the kernel, the default modules, and UI packages into a usable product. It provides the primary user interface, hosting Simple Apps that let users interact with the various modules.",
"image": {
"src": "/cms/pages/technology-stack/app-install.webp",
"alt": "",
"width": 566,
"height": 566
},
"tags": [
{ "label": "Wallet", "icon": "wallet" },
{ "label": "Chat Interface", "icon": "chat" },
{ "label": "Filesharing Tool", "icon": "files" },
{ "label": "Explorer", "icon": "explorer" }
],
"primaryCta": {
"label": "Install",
"href": "https://logos.co/app",
"external": true,
"variant": "primary"
},
"secondaryCta": {
"label": "Learn more",
"href": "/technology-stack#logos-app",
"variant": "secondary"
}
},
{
"componentType": "cardGrid",
"key": "techStack.useCases",
"heading": "Use Cases",
"subheading": "We know today's systems are captured and brittle. We build alternatives to give people a choice. Build on Logos and serve your community.",
"cards": [
{
"title": "Attack-Resistant Public Registries",
"description": "Privacy-preserving blockchain for sovereign order and decentralised governance.",
"cta": { "label": "Learn more", "href": "/technology-stack/blockchain" }
},
{
"title": "Decentralised Archives",
"description": "Permanent, censorship-proof preservation of knowledge, culture, and history.",
"cta": { "label": "Learn more", "href": "/technology-stack/storage" }
},
{
"title": "Private Financial Networks",
"description": "Money that moves securely and freely, without surveillance or control.",
"cta": { "label": "Learn more", "href": "/technology-stack/blockchain" }
},
{
"title": "Community Governance",
"description": "Self-organising groups establish and enforce their own rules, with members engaging voluntarily.",
"cta": { "label": "Learn more", "href": "/circles" }
}
]
}
]
}
+61
View File
@@ -398,6 +398,14 @@ const buildCirclesChecks = (locale: Language): Check[] => [
},
]
const PAGE_ROUTES: ReadonlyArray<{ route: string; minSections: number }> = [
{ route: '/', minSections: 1 },
{ route: '/builders-hub', minSections: 0 },
{ route: '/circles', minSections: 0 },
{ route: '/technology-stack', minSections: 1 },
{ route: '/technology-stack/blockchain', minSections: 1 },
]
const buildPagesChecks = (locale: Language): Check[] => [
{
name: `pages.home (${locale}) → loads + every section componentType valid`,
@@ -456,6 +464,59 @@ const buildPagesChecks = (locale: Language): Check[] => [
return page
},
},
{
name: `pages — every seed route loads + route-field round-trips + minSections`,
run: async () => {
for (const { route, minSections } of PAGE_ROUTES) {
const page = await getPageCopy(route, locale)
if (page.route !== route) {
throw new Error(`route mismatch on "${route}": file declares "${page.route}"`)
}
if (page.sections.length < minSections) {
throw new Error(
`page "${route}" has ${page.sections.length} sections, expected at least ${minSections}`,
)
}
if (!page.title || !page.description) {
throw new Error(`page "${route}" missing title or description`)
}
}
return PAGE_ROUTES
},
},
{
name: `pages.technology-stack (${locale}) → giantSwitch present + tags icons enum-validated`,
run: async () => {
const page = await getPageCopy('/technology-stack', locale)
const gs = page.sections.find((s) => s.componentType === 'giantSwitch')
if (!gs || gs.componentType !== 'giantSwitch') {
throw new Error('technology-stack.json missing a giantSwitch section')
}
if (!gs.tags || gs.tags.length === 0) {
throw new Error('giantSwitch tags missing — Logos App banner expects at least one tag')
}
const allowed = new Set(['wallet', 'chat', 'files', 'explorer', 'lambda'])
for (const tag of gs.tags) {
if (tag.icon !== undefined && !allowed.has(tag.icon)) {
throw new Error(`giantSwitch tag "${tag.label}" has unknown icon "${tag.icon}"`)
}
}
return gs
},
},
{
name: `pages.technology-stack/blockchain (${locale}) → relatedArticles section + ctaPanel present`,
run: async () => {
const page = await getPageCopy('/technology-stack/blockchain', locale)
const types = new Set(page.sections.map((s) => s.componentType))
for (const required of ['hero', 'richText', 'cardGrid', 'ctaPanel', 'relatedArticles']) {
if (!types.has(required as never)) {
throw new Error(`blockchain page missing "${required}" section`)
}
}
return page
},
},
]
const main = async (): Promise<void> => {