diff --git a/docs/pages/standards.md b/docs/pages/standards.md index 59e981a0..4f7c8f36 100644 --- a/docs/pages/standards.md +++ b/docs/pages/standards.md @@ -62,12 +62,13 @@ Most page content is hardcoded in each page's Astro file: ## Hardware Standards Pages -Currently two hardware standards have dedicated pages: +Currently three hardware standards have dedicated pages: +- **SILO** — `src/pages/standards/silo/index.astro` at `/standards/silo/` - **WDPC** — `src/pages/standards/wdpc/index.astro` at `/standards/wdpc/` - **Open19** — `src/pages/standards/open19/index.astro` at `/standards/open19/` -Both appear under the Hardware section in the nav (`src/lib/nav-items.ts`) and in the standards index (`src/pages/standards/index.astro`). Open19 uses WDPC's icon assets as placeholders — dedicated Open19 SVGs should be added to `public/assets/standards/open19/` once available. Articles tagged `"open19"` will automatically appear in the page carousel. +All three appear under the Hardware section in the nav (`src/lib/nav-items.ts`, SILO listed first) and in the standards index (`src/pages/standards/index.astro`, `standardDefs` array). Open19 and SILO both reuse WDPC's icon/illustration assets as placeholders — dedicated SVGs should be added to `public/assets/standards/open19/` and `public/assets/standards/silo/` once available. Articles tagged `"open19"` / `"silo"` will automatically appear in each page's carousel. ## Lifecycle Stages diff --git a/src/lib/nav-items.ts b/src/lib/nav-items.ts index d4e9031b..c7c9ffb2 100644 --- a/src/lib/nav-items.ts +++ b/src/lib/nav-items.ts @@ -72,6 +72,12 @@ export const navItems = [ { title: "Hardware", links: [ + { + href: "/standards/silo/", + label: "SILO", + description: + "Real-time interoperability layer for data centre sustainability" /* iconSrc: pi("silo"), icon: "layers" */, + }, { href: "/standards/wdpc/", label: "WDPC", diff --git a/src/pages/standards/index.astro b/src/pages/standards/index.astro index 9271f4b2..afb7000e 100644 --- a/src/pages/standards/index.astro +++ b/src/pages/standards/index.astro @@ -35,6 +35,7 @@ const standardDefs = [ { slug: "sci-web" }, { slug: "soft" }, { slug: "real-time-cloud", urlSlug: "rtc" }, + { slug: "silo" }, { slug: "wdpc" }, { slug: "open19" }, { slug: "see", urlSlug: "sei" }, diff --git a/src/pages/standards/silo/index.astro b/src/pages/standards/silo/index.astro new file mode 100644 index 00000000..26ce6bb6 --- /dev/null +++ b/src/pages/standards/silo/index.astro @@ -0,0 +1,439 @@ +--- +import Layout from "@/layouts/showcase.astro"; +import { navItems } from "@/lib/nav-items"; + +import Navbar from "@/components/navbar.astro"; +import Hero from "@/components/hero.astro"; +import LogoMarquee from "@/components/logo-marquee.astro"; +import FeatureGrid from "@/components/feature-grid.astro"; +import TextBlock from "@/components/text-block.astro"; +import TextWithImage from "@/components/text-with-image.astro"; +import TabbedSection from "@/components/tabbed-section.astro"; +import CardGrid from "@/components/card-grid.astro"; +import Timeline from "@/components/timeline.astro"; +import CTACard from "@/components/cta-card.astro"; +import CTABanner from "@/components/cta-banner.astro"; +import Breadcrumb from "@/components/breadcrumb.astro"; +import Footer from "@/components/footer.astro"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; + +import ArticleCarousel from "@/components/article-carousel.astro"; + +import projects from "@/data/projects.json"; +import { getCollection } from "astro:content"; +import { articleUrl } from "@/lib/utils"; + +const siloProject = projects.find(p => p.slug === "silo"); +const parentWg = projects.find(p => p.name === siloProject?.parent); + +const carouselArticles = (await getCollection("articles", (a) => a.data.published !== false)) + .filter(a => (a.data.tags || []).map((t: string) => t.toLowerCase()).includes("silo")) + .sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime()) + .map(a => ({ + title: a.data.title, + description: a.data.summary || a.data.teaserText || "", + imageSrc: a.data.mainImage?.src || "/assets/hero-illustration.svg", + href: articleUrl(a.id), + cta: "Read more →", + })); + +const GSF_SILO_REPO = "https://github.com/Green-Software-Foundation/silo"; +const HARDWARE_WG = "https://github.com/Green-Software-Foundation/hardware-standards-wg"; +const MEMBERSHIP_CTA = "/membership/"; +--- + + + + + + + + + + + + + + + + + + + + + + + Adaptive Cooling coordinates thermal response to real-time workload and environmental signals', + }, + { + icon: "/assets/standards/wdpc/realtime-icon.svg", + description: 'Dynamic Workload Placement routes compute to where power, cooling, and carbon conditions are most favourable', + }, + { + icon: "/assets/standards/wdpc/infra-icon.svg", + description: 'Predictive Maintenance surfaces early warning signals across facility and IT systems', + }, + { + icon: "/assets/standards/wdpc/heat-icon.svg", + description: 'Heat Reuse Optimisation coordinates waste heat delivery to district heating and other reuse pathways', + }, + { + icon: "/assets/standards/wdpc/co2-icon.svg", + description: 'Automated Sustainability Reporting standardises PUE, WUE, CUE, and emissions reporting across vendors', + }, + ]} + iconFeaturesBgIcon="/assets/standards/wdpc/icon-bg.svg" + bgClass="bg-accent-lightest-2" + /> + + + + + +
+
+
+
+ +
+
+

Complementing, Not Replacing, WDPC

+

+ Rather than replacing existing management protocols or telemetry systems, SILO plugs into the existing WDPC Data Bus and defines a common semantic layer — providing semantic models, APIs, governance, and interoperability as a foundation for future interoperability across the data centre ecosystem. +

+
+
+
+
+ + + + + + + + +
Consistent metrics mean comparable data across your fleet.", + }, + { + imageSrc: "/assets/standards/wdpc/blog-illustration-2.svg", + icon: "/assets/standards/wdpc/blog-business-icon.svg", + title: "Software & Platform Vendors", + description: "", + bodyHtml: "SILO's standardised APIs and semantic models let you build optimisation engines and management platforms that work across heterogeneous infrastructure — without writing custom integrations for every vendor's telemetry format.

Build once against a common interface, deploy anywhere.", + }, + { + imageSrc: "/assets/standards/wdpc/blog-illustration-3.svg", + icon: "/assets/standards/wdpc/blog-sustainability-icon.svg", + title: "Sustainability Teams", + description: "", + bodyHtml: "SILO standardises how PUE, WUE, CUE, energy, water, and carbon data flows through your infrastructure — giving you consistent, auditable metrics to track sustainability outcomes over time.

Reliable, comparable data is the foundation for credible reporting.", + }, + ]} + bgClass="bg-accent-lightest-2" + /> + + +
+
+
+
+ +
+ +
+
+

Leading The Charge

+

Project Leadership

+ Actively recruiting contributors +

+ We're building this standard with input from data centre operators, infrastructure and platform vendors, and sustainability experts worldwide. Your expertise can help shape how the industry standardises real-time sustainability data for decades to come. +

+ +
+
+
+ +
+
+
+
+ + + + + +
+
+

Dive Deeper

+
+
+ +
+
+
+ {[ + { + icon: "/assets/standards/wdpc/dive-icon-1.svg", + title: "Contribute to the Project", + description: "Work on the SILO codebase — open issues, submit PRs, and collaborate on the specification.", + buttonLink: GSF_SILO_REPO, + buttonText: "View Repository", + badge: "GSF Members Only", + }, + { + icon: "/assets/standards/wdpc/dive-icon-2.svg", + title: "Shape the Specification", + description: "Review the SILO proposal and data models; propose changes and provide technical feedback.", + buttonLink: GSF_SILO_REPO, + buttonText: "Read Specification", + badge: "GSF Members Only", + }, + { + icon: "/assets/standards/wdpc/dive-icon-4.svg", + title: "Hardware Standards WG", + description: "Join the working group overseeing SILO, WDPC, and other hardware sustainability standards.", + buttonLink: HARDWARE_WG, + buttonText: "Join Working Group", + badge: "GSF Members Only", + }, + ].map((feature) => ( +
+
+
+ +
+

{feature.title}

+ {feature.badge && {feature.badge}} +
+
+
+

{feature.description}

+ + {feature.buttonText} → + +
+ ))} +
+
+
+
+
+ + + + + {carouselArticles.length >= 3 && ( + + )} + + + + +