3 Commits

Author SHA1 Message Date
15e81cb5cd refactor: adjust CloudHostingNew layout spacing and styling
- Changed image width from full-width to fixed 600px
- Replaced H3 component with native h3 element with responsive text sizing
- Reduced top margin on details section from mt-12 to mt-8
2025-11-06 21:30:17 +01:00
0e6ecedf85 refactor: remove duplicate CloudHosting component from CloudPage 2025-11-06 21:28:42 +01:00
75dd7dfbc5 feat: redesign cloud hero section with new layout and capabilities component
- Updated CloudHeroNew with boxed container layout and improved visual hierarchy
- Added new CloudHostingNew component featuring accordion-style capabilities section with dark theme
- Included new cloud hosting images in webp and png formats
2025-11-06 21:26:48 +01:00
10 changed files with 133 additions and 20 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
src/images/cloudhosting.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@@ -1,47 +1,51 @@
import { H3, H5, Eyebrow } from "@/components/Texts" import { H3, H5, Eyebrow, P } from "@/components/Texts"
import { Button } from "@/components/Button" import { Button } from "@/components/Button"
export function CloudHeroNew({ onGetStartedClick = () => {} }: { onGetStartedClick?: () => void }) {
export function CloudHeroNew() {
return ( return (
<div className="">
{/* Boxed container */}
<div <div
className="relative bg-cover lg:bg-contain bg-right bg-no-repeat" className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-200 bg-white overflow-hidden bg-contain bg-right bg-no-repeat"
style={{ backgroundImage: "url('/images/cloudhero4.webp')" }} style={{ backgroundImage: "url('/images/cloudhero4.webp')", backgroundSize: "contain" }}
> >
<div className="mx-auto max-w-7xl lg:px-8"> {/* Inner padding */}
<div className="px-6 pt-12 pb-24 sm:pb-32 lg:col-span-5 lg:px-0 lg:pt-40 lg:pb-48 xl:col-span-5"> <div className="px-6 py-16 lg:py-16">
<div className="mx-auto max-w-2xl lg:mx-0"> <div className="max-w-2xl lg:pl-6">
<Eyebrow> <Eyebrow>
Mycelium Cloud Mycelium Cloud
</Eyebrow> </Eyebrow>
<H3 className="mt-4"> <H3 className="mt-4">
Run Kubernetes on the Sovereign Agentic Cloud Run Kubernetes on the Sovereign Agentic Cloud
</H3> </H3>
<H5 className="mt-4 text-lg text-gray-600"> <p className="mt-6 text-lg">
Deploy K3s clusters on a global, self-healing mesh network. Deploy K3s clusters on a global, self-healing mesh network.
Your workloads run on sovereign, encrypted infrastructure, without centralized cloud control. Your workloads run on sovereign, encrypted infrastructure, without centralized cloud control.
</H5> </p>
<H5 className="mt-4 text-sm text-gray-600"> <p className="mt-4 lg:text-base italic text-gray-600 text-sm">
Works Alone. Works Together. Works Alone. Works Together.
Mycelium Cloud can run on any network fabric, or pair with Mycelium Network Mycelium Cloud can run on any network fabric, or pair with Mycelium Network
for sovereign connectivity. for sovereign connectivity.
</H5> </p>
<div className="mt-10 flex items-center gap-x-6"> <div className="mt-10 flex items-center gap-x-6">
<Button <Button
to="#" onClick={onGetStartedClick}
variant="solid" variant="solid"
className=""
color="cyan" color="cyan"
> >
Get started Get started
</Button> </Button>
<Button to="#" variant="outline"> <Button to="#" variant="outline">
Documentation <span aria-hidden="true"> </span> Documentation <span aria-hidden="true"></span>
</Button> </Button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-200" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
</div> </div>
) )
} }

View File

@@ -0,0 +1,107 @@
'use client'
import {
Disclosure,
DisclosureButton,
DisclosurePanel,
} from '@headlessui/react'
import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline'
import { H1, H5, Eyebrow, H3, P } from "@/components/Texts"
import { Button } from "@/components/Button"
function classNames(...classes) {
return classes.filter(Boolean).join(' ')
}
const product = {
subtitle: 'capabilities',
name: 'What You Can Run on Mycelium Cloud',
description: '<p>Host nodes, deploy workloads, or build private AI systems, all on infrastructure you own and control.</p>',
details: [
{
name: 'Kubernetes Clusters',
description: 'Deterministic K3s workloads across sovereign hardware.',
},
{
name: 'Encrypted Mesh Networking',
description: 'No public ingress, no exposed attack surface, zero-trust routing.',
},
{
name: 'S3-Compatible Storage',
description: 'Distributed storage with erasure coding and residency control.',
},
{
name: 'GPU-Ready',
description: 'Scale inference & training on demand.',
},
],
}
// ✅ keep your product + relatedProducts data above here …
export function CloudHostingNew() {
return (
<div className="bg-[#121212] text-white">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-[#111111] mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
<div className="w-full border-t border-l border-r border-gray-600" />
{/* ✅ MAIN CONTENT */}
<main className="mx-auto max-w-7xl px-6 lg:px-12 py-12 border border-t-0 border-b-0 border-gray-600">
<div className="mx-auto max-w-2xl lg:max-w-none">
{/* ✅ Product Section */}
<div className="lg:grid lg:grid-cols-2 lg:items-start lg:gap-x-8">
{/* ✅ Image */}
<img alt="Mycelium Cloud" src="/images/cloudhosting.webp" className="aspect-square w-[600px] object-cover" />
{/* ✅ Product info */}
<div className="mt-10 px-4 sm:mt-16 sm:px-0 lg:mt-0">
<Eyebrow>{product.subtitle}</Eyebrow>
<h3 className="lg:text-4xl text-3xl text-white">{product.name}</h3>
<div className="mt-6 text-gray-300 text-xl"
dangerouslySetInnerHTML={{ __html: product.description }}
/>
{/* ✅ Details accordion */}
<section className="mt-8">
<div className="divide-y divide-gray-800 border-t border-cyan-500">
{product.details.map((detail) => (
<Disclosure key={detail.name} as="div">
<H3>
<DisclosureButton className="group flex w-full items-center justify-between py-6 text-left">
<span className="text-lg tracking-normal font-medium text-white">
{detail.name}
</span>
<span className="ml-6 flex items-center">
<PlusIcon className="block h-6 w-6 text-gray-500 group-open:hidden" />
<MinusIcon className="hidden h-6 w-6 text-indigo-400 group-open:block" />
</span>
</DisclosureButton>
</H3>
<DisclosurePanel className="pb-6">
<p className="text-gray-400 text-base tracking-normal">{detail.description}</p>
</DisclosurePanel>
</Disclosure>
))}
</div>
</section>
</div>
</div>
</div>
</main>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-600" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
</div>
)
}

View File

@@ -6,6 +6,7 @@ import { CloudHeroNew } from './CloudHeroNew'
import { CloudHosting } from './CloudHosting' import { CloudHosting } from './CloudHosting'
import { CloudBluePrint } from './CloudBluePrint' import { CloudBluePrint } from './CloudBluePrint'
import { CallToAction } from './CalltoAction' import { CallToAction } from './CalltoAction'
import { CloudHostingNew } from './CloudHostingNew'
export default function CloudPage() { export default function CloudPage() {
return ( return (
@@ -16,7 +17,7 @@ export default function CloudPage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudHosting /> <CloudHostingNew />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>

View File

@@ -10,7 +10,7 @@ export function HomeAurora({ onGetStartedClick }: { onGetStartedClick: () => voi
style={{ backgroundImage: "url('/images/hero11.webp')" }} style={{ backgroundImage: "url('/images/hero11.webp')" }}
> >
{/* Inner padding */} {/* Inner padding */}
<div className="px-6 py-16 lg:py-24 "> <div className="px-6 py-16 lg:py-32 ">
<div className="max-w-2xl lg:pl-6"> <div className="max-w-2xl lg:pl-6">
<div className="hidden sm:flex"> <div className="hidden sm:flex">
<div className="relative rounded-full px-3 py-1 text-sm/6 text-gray-500 ring-1 ring-gray-900/10 hover:ring-gray-900/20"> <div className="relative rounded-full px-3 py-1 text-sm/6 text-gray-500 ring-1 ring-gray-900/10 hover:ring-gray-900/20">

View File

@@ -9,6 +9,7 @@ import { HomeAurora } from './HomeAurora'
import { HomeTab } from './HomeTab' import { HomeTab } from './HomeTab'
export default function HomePage() { export default function HomePage() {
const sliderRef = useRef<HTMLDivElement>(null) const sliderRef = useRef<HTMLDivElement>(null)