mirror of
https://github.com/logos-co/logos-web.git
synced 2026-08-27 12:11:14 +00:00
feat: add new page configurations and JSON files for Builders Hub, Circles, and Technology Stack
This commit is contained in:
@@ -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"]
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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" }
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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> => {
|
||||
|
||||
Reference in New Issue
Block a user