7 Commits

Author SHA1 Message Date
46d02fca47 feat: improve carousel scroll behavior to align fourth card with viewport edge 2025-11-07 13:55:44 +01:00
6779218da6 refactor: redesign ComputeDesign component layout
- Converted feature list to stats-style cards with centered content and icon-first layout
- Replaced vertical Container layout with full-width bordered grid design
- Simplified text content to value/name pairs and updated icons
2025-11-07 13:49:18 +01:00
04b94367a9 feat: improve cloud hosting page layout and spacing
- Restructured grid from 2-column to 5-column layout for better content distribution
- Adjusted spacing and margins throughout for improved visual hierarchy
- Updated heading component from h3 to H4 for consistent typography
2025-11-07 13:28:05 +01:00
cdd6e3104b feat: add horizontal scrolling capabilities section for compute page
- Created new ComputeCapabilitiesNew component with card-based slider showcasing containers, VMs, and native Linux workloads
- Implemented smooth horizontal scroll navigation with arrow controls and snap-to-card behavior
- Added intro card with overview text and navigation controls, followed by capability cards with icons and descriptions
2025-11-07 13:19:13 +01:00
8d1e2f4c7d feat: add mobile navigation menu to header
- Implemented responsive mobile menu using Headless UI Dialog component with hamburger toggle
- Refactored hero sections to use consistent boxed layout with background images and improved spacing
- Standardized button styling across hero components with arrow indicators for secondary actions
2025-11-06 23:43:28 +01:00
0f2f6df299 feat: redesign compute capabilities section with dark theme
- Updated ComputeCapabilities component with dark background, bordered container layout, and improved visual hierarchy
- Replaced icon components with technology-specific images (Kubernetes, VM, Linux)
- Standardized button color scheme across components (gray to white outline variant)
2025-11-06 23:03:36 +01:00
c56f67ae2e refactor: redesign ComputeHero component layout and styling
- Restructured hero section with boxed container and background image positioning
- Added onGetStartedClick callback prop for interactive button handling
- Updated button variants and added tagline about network compatibility
2025-11-06 23:03:25 +01:00
20 changed files with 448 additions and 199 deletions

BIN
public/images/agents.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
public/images/linux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
public/images/vm.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -1,10 +1,12 @@
import { useState } from 'react'
import { Link, useLocation } from 'react-router-dom' import { Link, useLocation } from 'react-router-dom'
import { Dropdown } from './ui/Dropdown' import { Dropdown } from './ui/Dropdown'
import { ChevronDownIcon } from '@heroicons/react/20/solid' import { ChevronDownIcon } from '@heroicons/react/20/solid'
import { Container } from './Container' import { Container } from './Container'
import { Button } from './Button' import { Button } from './Button'
import pmyceliumLogo from '../images/logos/logo_1.png' import pmyceliumLogo from '../images/logos/logo_1.png'
import { Dialog } from '@headlessui/react'
import { Bars3Icon, XMarkIcon } from '@heroicons/react/24/outline'
const cloudNavItems = [ const cloudNavItems = [
{ name: 'Cloud', href: '/cloud' }, { name: 'Cloud', href: '/cloud' },
@@ -15,6 +17,7 @@ const cloudNavItems = [
export function Header() { export function Header() {
const location = useLocation() const location = useLocation()
const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
const getCurrentPageName = () => { const getCurrentPageName = () => {
const currentPath = location.pathname; const currentPath = location.pathname;
@@ -72,9 +75,84 @@ export function Header() {
Get Mycelium Connector Get Mycelium Connector
</Button> </Button>
</div> </div>
<div className="lg:hidden">
<button
type="button"
className="-m-2.5 inline-flex items-center justify-center rounded-md p-2.5 text-gray-700 hover:text-cyan-500 transition-colors"
onClick={() => setMobileMenuOpen(true)}
>
<span className="sr-only">Open main menu</span>
<Bars3Icon className="h-6 w-6" aria-hidden="true" />
</button>
</div>
</div> </div>
</Container> </Container>
</nav> </nav>
<Dialog as="div" className="lg:hidden" open={mobileMenuOpen} onClose={setMobileMenuOpen}>
<div className="fixed inset-0 z-10" />
<Dialog.Panel className="fixed inset-y-0 right-0 z-10 w-full overflow-y-auto bg-white px-6 py-6 sm:max-w-sm sm:ring-1 sm:ring-gray-900/10">
<div className="flex items-center justify-between">
<Link to="#" className="-m-1.5 p-1.5">
<span className="sr-only">Mycelium</span>
<img
className="h-8 w-auto"
src={pmyceliumLogo}
alt=""
/>
</Link>
<button
type="button"
className="-m-2.5 rounded-md p-2.5 text-gray-700 hover:text-cyan-500 transition-colors"
onClick={() => setMobileMenuOpen(false)}
>
<span className="sr-only">Close menu</span>
<XMarkIcon className="h-6 w-6" aria-hidden="true" />
</button>
</div>
<div className="mt-6 flow-root">
<div className="-my-6 divide-y divide-gray-500/10">
<div className="space-y-2 py-6">
{cloudNavItems.map((item) => (
<Link
key={item.name}
to={item.href}
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-gray-900 hover:bg-gray-50"
>
{item.name}
</Link>
))}
<Link
to="/network"
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-gray-900 hover:bg-gray-50"
>
Network
</Link>
<Link
to="/agents"
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-gray-900 hover:bg-gray-50"
>
Agents
</Link>
</div>
<div className="py-6">
<Button
to="https://myceliumcloud.tf"
variant="outline"
as="a"
target="_blank"
rel="noopener noreferrer"
className="w-full"
>
Start Deployment
</Button>
<Button to="/download" variant="solid" color="cyan" className="mt-4 w-full">
Get Mycelium Connector
</Button>
</div>
</div>
</div>
</Dialog.Panel>
</Dialog>
</header> </header>
) )
} }

View File

@@ -1,40 +1,43 @@
'use client' 'use client'
import { Button } from '@/components/Button' import { Button } from '@/components/Button'
import { Eyebrow, P, H3 } from '@/components/Texts' import { Eyebrow, H3 } from '@/components/Texts'
export function AgentHeroAlt() { export function AgentHeroAlt() {
return ( return (
<div className="relative bg-white lg:mt-10 mt-0"> <div className="">
<div className="relative h-80 overflow-hidden bg-transparent md:absolute md:right-0 md:h-full md:w-1/3 lg:w-2/3"> {/* Boxed container */}
<img <div
alt="" 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"
src="/images/agents.png" style={{ backgroundImage: "url('/images/agents.webp')", backgroundSize: "contain" }}
className="size-full object-cover" >
/> {/* Inner padding */}
<div className="px-6 py-16 lg:py-16">
</div> <div className="max-w-2xl lg:pl-6">
<div className="relative mx-auto max-w-7xl py-24 sm:py-32 lg:px-8"> <Eyebrow>MYCELIUM AGENTS</Eyebrow>
<div className="pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24 xl:pr-32"> <H3 as="h1" className="mt-4">
<Eyebrow className="text-base/7 font-semibold text-cyan-500">MYCELIUM AGENTS</Eyebrow> Sovereign AI Agents, Coming Soon.
<H3 as="h1" className="mt-2 text-gray-900">Sovereign AI Agents, Coming Soon.</H3> </H3>
<P className="mt-6 text-gray-600"> <p className="mt-6 text-lg">
The Agent layer will allow you to run autonomous, policy-governed AI that operates on infrastructure you control, with private memory, verifiable execution, and coordination across your personal or organizational environment. The Agent layer will allow you to run autonomous, policy-governed AI that operates on infrastructure you control, with private memory, verifiable execution, and coordination across your personal or organizational environment.
</P> </p>
<P className="mt-6 text-gray-600"> <p className="mt-4 lg:text-base italic text-gray-600 text-sm">
Works Alone. Works Together. Works Alone. Works Together. Use Agents on top of any Mycelium Cloud deployment or pair them with the Mycelium Network for private, encrypted collaboration across users and systems.
Use Agents on top of any Mycelium Cloud deployment or pair them with the Mycelium Network for private, encrypted collaboration across users and systems. </p>
</P> <div className="mt-10 flex items-center gap-x-6">
<div className="mt-8">
<Button href="#" variant="solid" color="cyan"> <Button href="#" variant="solid" color="cyan">
Follow Deployment Follow Deployment
</Button> </Button>
<Button href="#" variant="outline" color="white"> <Button href="#" variant="outline">
Explore Docs Explore Docs <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>
) )
} }

View File

@@ -75,7 +75,7 @@ export function CloudArchitecture() {
<Button variant="solid" color="cyan" href="/start"> <Button variant="solid" color="cyan" href="/start">
Get Started Get Started
</Button> </Button>
<Button variant="outline" color="gray" href="/docs"> <Button variant="outline" color="white" href="/docs">
Explore Docs Explore Docs
</Button> </Button>
</div> </div>

View File

@@ -7,7 +7,7 @@ import {
} from '@headlessui/react' } from '@headlessui/react'
import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline' import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline'
import { Eyebrow, H3 } from "@/components/Texts" import { Eyebrow, H3, H4 } from "@/components/Texts"
const product = { const product = {
@@ -49,26 +49,28 @@ export function CloudHostingNew() {
<div className="mx-auto max-w-2xl lg:max-w-none"> <div className="mx-auto max-w-2xl lg:max-w-none">
{/* ✅ Product Section */} {/* ✅ Product Section */}
<div className="lg:grid lg:grid-cols-2 lg:items-start lg:gap-x-8"> <div className="lg:grid lg:grid-cols-5 lg:items-start lg:gap-x-8">
{/* ✅ Image */} {/* ✅ Image */}
<img alt="Mycelium Cloud" src="/images/cloudhosting.webp" className="aspect-square w-[600px] object-cover" /> <div className="lg:col-span-2 lg:mt-8 mt-2">
<img alt="Mycelium Cloud" src="/images/cloudhosting.webp" className="aspect-square w-full object-cover" />
</div>
{/* ✅ Product info */} {/* ✅ Product info */}
<div className="mt-10 px-4 sm:mt-16 sm:px-0 lg:mt-0"> <div className="mt-8 px-4 sm:px-0 lg:mt-0 lg:col-span-3">
<Eyebrow>{product.subtitle}</Eyebrow> <Eyebrow>{product.subtitle}</Eyebrow>
<h3 className="lg:text-4xl text-3xl text-white">{product.name}</h3> <H4 className=" text-white">{product.name}</H4>
<div className="mt-6 text-gray-300 text-xl" <div className="mt-4 text-gray-300 text-xl"
dangerouslySetInnerHTML={{ __html: product.description }} dangerouslySetInnerHTML={{ __html: product.description }}
/> />
{/* ✅ Details accordion */} {/* ✅ Details accordion */}
<section className="mt-8"> <section className="mt-6">
<div className="divide-y divide-gray-800 border-t border-cyan-500"> <div className="divide-y divide-gray-800 border-t border-cyan-500">
{product.details.map((detail) => ( {product.details.map((detail) => (
<Disclosure key={detail.name} as="div"> <Disclosure key={detail.name} as="div">

View File

@@ -1,58 +1,95 @@
import { 'use client';
CpuChipIcon,
CubeIcon,
ServerIcon,
} from '@heroicons/react/24/solid'
import { Eyebrow, H3, P, CT, CP } from '@/components/Texts'
import { Container } from '@/components/Container' import { Container } from '@/components/Container'
import { Eyebrow, H3, P } from '@/components/Texts'
import { Button } from '@/components/Button'
const capabilities = [ const capabilities = [
{ {
name: 'Containers', title: 'Containers & K3s',
description: 'Services, web apps, APIs. Fully compatible with Kubernetes.', description:
icon: CubeIcon, 'Deploy services, web apps, and APIs with full Kubernetes compatibility.',
icon: (
<div className=" flex items-center justify-center">
<img src="/images/kubernetes.webp" alt="Kubernetes" className="h-full w-full object-cover" />
</div>
),
}, },
{ {
name: 'Virtual Machines', title: 'Virtual Machines',
description: description:
'Legacy apps and specialized runtime stacks. Secure boot + attestation included.', 'Run legacy apps and specialized stacks with secure boot and attestation.',
icon: ServerIcon, icon: (
<div className="flex items-center justify-center">
<img src="/images/vm.webp" alt="Virtual Machines" className="h-full w-full object-cover" />
</div>
),
}, },
{ {
name: 'Native Linux Workloads', title: 'Native Linux Workloads',
description: description:
'Agents, batch jobs, tooling. Runs statelessly anywhere.', 'Execute agents, batch jobs, and custom tooling statelessly across the grid.',
icon: CpuChipIcon, icon: (
<div className="flex items-center justify-center">
<img src="/images/linux.png" alt="Linux" className="h-full w-full object-cover" />
</div>
),
}, },
] ]
export function ComputeCapabilities() { export function ComputeCapabilities() {
return ( return (
<section className="bg-white py-24 sm:py-32"> <section className="bg-[#121212] w-full max-w-8xl mx-auto">
{/* Top horizontal spacer */}
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800 bg-transparent" />
<div className="w-full border-t border-l border-r border-gray-800" />
{/* Boxed container */}
<div className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-800 bg-[#111111] py-12">
<Container> <Container>
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow>CAPABILITIES</Eyebrow> <Eyebrow className="text-cyan-400">CAPABILITIES</Eyebrow>
<H3 className="mt-4 text-gray-900">What You Can Run</H3> <H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-white">
<P className="mt-6 text-gray-600"> What You Can Run
Mycelium Compute supports multiple workload types on a single </H3>
execution fabric. <P className="mt-6 text-lg text-gray-300">
Mycelium Compute supports multiple workload types on a single execution
fabric, from legacy VMs to modern Kubernetes clusters.
</P> </P>
</div> </div>
<div className="mx-auto mt-16 max-w-5xl"> {/* Card layout */}
<dl className="grid grid-cols-1 gap-12 sm:grid-cols-2 lg:grid-cols-3"> <ul
{capabilities.map((feature) => ( role="list"
<div key={feature.name} className="flex flex-col text-center"> className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-6 text-sm sm:grid-cols-2 lg:max-w-none lg:grid-cols-3 md:gap-y-10"
<div className="mx-auto flex size-12 items-center justify-center rounded-xl bg-cyan-50"> >
<feature.icon aria-hidden="true" className="size-6 text-cyan-600" /> {capabilities.map((capability) => (
</div> <li
<CT className="mt-6 text-gray-900">{feature.name}</CT> key={capability.title}
<CP className="mt-2 text-gray-600">{feature.description}</CP> className="rounded-xl border border-gray-800 bg-[#111]/60 p-6 text-center lg:text-left"
</div> >
{capability.icon}
<h3 className="text-lg font-semibold text-white">{capability.title}</h3>
<p className="mt-2 text-gray-400 leading-snug">{capability.description}</p>
</li>
))} ))}
</dl> </ul>
{/* Button section */}
<div className="mx-auto mt-12 flex justify-center gap-6">
<Button variant="solid" color="cyan" href="#">
Get Started
</Button>
<Button variant="outline" color="white" href="#">
Explore Docs
</Button>
</div> </div>
</Container> </Container>
</div>
{/* Bottom border + spacer */}
<div className="w-full border-b border-gray-800" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800 bg-transparent" />
</section> </section>
) )
} }

View File

@@ -0,0 +1,118 @@
"use client";
import { useRef } from "react";
import { Eyebrow, CP, CT, H5 } from "@/components/Texts";
import { IoArrowBackOutline, IoArrowForwardOutline } from "react-icons/io5";
const capabilities = [
{
isIntro: true,
eyebrow: "CAPABILITIES",
title: "What You Can Run",
description:
"Mycelium Compute supports multiple workload types on a single execution fabric, from legacy VMs to modern Kubernetes clusters.",
},
{
title: "Containers & K3s",
description:
"Deploy services, web apps, and APIs with full Kubernetes compatibility.",
icon: (
<div className="flex items-center justify-center">
<img src="/images/kubernetes.webp" alt="Kubernetes" className="h-full w-full object-cover mb-2" />
</div>
),
},
{
title: "Virtual Machines",
description:
"Run legacy apps and specialized stacks with secure boot and attestation.",
icon: (
<div className="flex items-center justify-center">
<img src="/images/vm.webp" alt="Virtual Machines" className="h-full w-full object-cover mb-2" />
</div>
),
},
{
title: "Native Linux Workloads",
description:
"Execute agents, batch jobs, and custom tooling statelessly across the grid.",
icon: (
<div className="flex items-center justify-center">
<img src="/images/linux.png" alt="Linux" className="h-full w-full object-cover mb-2" />
</div>
),
},
];
export function ComputeCapabilitiesNew() {
const sliderRef = useRef<HTMLUListElement>(null);
const scrollLeft = () => sliderRef.current?.scrollBy({ left: -400, behavior: "smooth" });
const scrollRight = () => sliderRef.current?.scrollBy({ left: 400, behavior: "smooth" });
return (
<section className="bg-[#121212] w-full max-w-8xl mx-auto">
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800" />
<div className="w-full border-t border-l border-r border-gray-800" />
<div className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-800 bg-[#111111] overflow-hidden">
{/* Horizontal Slider — shows part of next card */}
<ul
ref={sliderRef}
className="flex overflow-x-auto snap-x snap-mandatory scroll-smooth no-scrollbar"
>
{capabilities.map((item, idx) => (
<li
key={idx}
className={`snap-start shrink-0 w-[85%] sm:w-[50%] lg:w-[33%] border border-gray-800 p-10 relative ${item.isIntro ? 'bg-[#1b1b1b]' : 'bg-[#111]/60'}`}
>
{/* First card with arrows */}
{item.isIntro ? (
<div className="flex flex-col justify-between h-full ">
<div>
<Eyebrow className="">{item.eyebrow}</Eyebrow>
<H5 className="text-white mt-4 lg:text-2xl text-xl">{item.title}</H5>
<p className="mt-4 text-gray-400 lg:text-lg text-sm leading-relaxed">{item.description}</p>
</div>
{/* Arrows inside first card */}
<div className="flex items-center gap-x-4 mt-2">
<a
href="#"
className="inline-flex items-center gap-1 text-cyan-400 hover:text-cyan-300 text-sm font-medium mr-auto"
>
Learn more
</a>
<button
onClick={scrollLeft}
className="h-8 w-8 flex items-center justify-center border border-gray-700 rounded-md hover:border-cyan-500 transition-colors"
>
<IoArrowBackOutline className="text-gray-300" size={16} />
</button>
<button
onClick={scrollRight}
className="h-8 w-8 flex items-center justify-center border border-gray-700 rounded-md hover:border-cyan-500 transition-colors"
>
<IoArrowForwardOutline className="text-gray-300" size={16} />
</button>
</div>
</div>
) : (
<>
{item.icon}
<CT className="text-lg font-semibold text-white mt-4">{item.title}</CT>
<CP className="mt-2 text-gray-400 leading-snug">{item.description}</CP>
</>
)}
</li>
))}
</ul>
</div>
<div className="w-full border-b border-gray-800" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800" />
</section>
);
}

View File

@@ -1,56 +1,54 @@
import { Eyebrow, H3, P, CP, CT } from '@/components/Texts'
import { import {
ShieldCheckIcon,
ArrowPathIcon, ArrowPathIcon,
RocketLaunchIcon, GlobeAltIcon,
ShieldCheckIcon,
} from '@heroicons/react/24/solid' } from '@heroicons/react/24/solid'
import { Container } from '@/components/Container'
import { Eyebrow, H3, P, CT, CP } from '@/components/Texts'
const features = [ const stats = [
{ {
id: 1,
name: 'Cryptographically verified deployments', name: 'Cryptographically verified deployments',
description: 'Every cluster state is signed and checksummed to guarantee truth.', value: 'Signed & Checksummed',
icon: ShieldCheckIcon, icon: ShieldCheckIcon,
}, },
{ {
id: 2,
name: 'Stateless execution that scales anywhere', name: 'Stateless execution that scales anywhere',
description: 'Run workloads on any node, region, or edge without manual orchestration.', value: 'Global Scaling',
icon: RocketLaunchIcon, icon: GlobeAltIcon,
}, },
{ {
id: 3,
name: 'Automatic healing and recovery', name: 'Automatic healing and recovery',
description: 'Self-repairing processes ensure workloads stay available and consistent.', value: 'Self-Repairing',
icon: ArrowPathIcon, icon: ArrowPathIcon,
}, },
] ]
export function ComputeDesign() { export function ComputeDesign() {
return ( return (
<section className="bg-white py-24 sm:py-32"> <div className="">
<Container>
<div className="mx-auto max-w-3xl sm:text-center">
<Eyebrow>CORE VALUE</Eyebrow>
<H3 className="mt-4 text-gray-900">Deterministic by Design</H3>
<P className="mt-6 text-gray-600">
Every workload runs exactly as declared: no drift, no hidden state, no surprises.
</P>
</div>
<div className="mx-auto mt-16 max-w-5xl"> {/* ✅ Top horizontal line with spacing */}
<dl className="grid grid-cols-1 gap-12 text-gray-600 sm:grid-cols-2 lg:grid-cols-3"> <div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
{features.map((feature) => ( <div className="w-full border-t border-l border-r border-gray-200" />
<div key={feature.name} className="relative pl-12">
<feature.icon {/* ✅ Top horizontal line with spacing */}
aria-hidden="true" <div className="mx-auto max-w-7xl border-gray-200">
className="absolute left-0 top-1 size-6 text-cyan-600" <dl className="grid grid-cols-1 gap-4 lg:gap-14 overflow-hidden text-center lg:grid-cols-3">
/> {stats.map((stat) => (
<CT className="font-semibold text-gray-900">{feature.name}</CT> <div key={stat.id} className="flex flex-col items-center bg-gray-400/5 py-8 px-12 border border-gray-200 lg:border-t-0 lg:border-b-0">
<CP className="mt-1 text-gray-600">{feature.description}</CP> <stat.icon className="h-8 w-8 fill-cyan-500 mb-4" aria-hidden="true" />
<CT className="">{stat.value}</CT>
<CP className="mt-1">{stat.name}</CP>
</div> </div>
))} ))}
</dl> </dl>
</div> </div>
</Container> {/* ✅ Bottom horizontal line + spacing */}
</section> <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>
) )
} }

View File

@@ -1,35 +1,51 @@
'use client' import { H3, Eyebrow } from "@/components/Texts"
import { Button } from "@/components/Button"
import { Button } from '@/components/Button' export function ComputeHero({ onGetStartedClick = () => {} }: { onGetStartedClick?: () => void }) {
import { Eyebrow, P, H3 } from '@/components/Texts'
export function ComputeHero() {
return ( return (
<div className="relative bg-white"> <div className="">
<div className="relative h-80 overflow-hidden bg-transparent md:absolute md:right-0 md:h-full md:w-1/3 lg:w-1/2"> {/* Boxed container */}
<img <div
alt="" 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"
src="/images/computehero.webp" style={{ backgroundImage: "url('/images/computehero.webp')", backgroundSize: "contain" }}
className="size-full object-contain" >
/> {/* Inner padding */}
<div className="px-6 py-16 lg:py-16">
</div> <div className="max-w-xl lg:pl-6">
<div className="relative mx-auto max-w-7xl py-12 lg:py-24 lg:px-8"> <Eyebrow>
<div className="max-w-2xl pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24"> Mycelium Compute
<Eyebrow className="text-base/7 font-semibold text-cyan-500">COMPUTE</Eyebrow> </Eyebrow>
<H3 className="mt-2 text-gray-900">Deterministic Compute You Control</H3> <H3 className="mt-4">
<P className="mt-6 text-gray-600"> Deterministic Compute You Control
</H3>
<p className="mt-6 text-lg">
Run workloads on sovereign, self-verifying infrastructure. Run workloads on sovereign, self-verifying infrastructure.
Mycelium Compute delivers predictable execution, zero drift, and automatic healing, whether youre running containers, VMs, agents, or full Kubernetes clusters. Mycelium Compute delivers predictable execution, zero drift, and automatic healing, whether youre running containers, VMs, agents, or full Kubernetes clusters.
</P> </p>
<div className="mt-12"> <p className="mt-4 lg:text-base italic text-gray-600 text-sm">
<Button href="#" variant="solid" color="cyan"> Works Alone. Works Together.
How it works Mycelium Compute can run on any network fabric, or pair with Mycelium Network
for sovereign connectivity.
</p>
<div className="mt-10 flex items-center gap-x-6">
<Button
onClick={onGetStartedClick}
variant="solid"
color="cyan"
>
Get started
</Button>
<Button to="#" variant="outline">
Documentation <span aria-hidden="true"></span>
</Button> </Button>
<Button href="#" variant="outline" color="cyan">Explore Docs</Button>
</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

@@ -4,9 +4,9 @@ import { ComputeFeatures } from './ComputeFeatures'
import { ComputeArchitecture } from './ComputeArchitecture' import { ComputeArchitecture } from './ComputeArchitecture'
import { ComputeUseCases } from './ComputeUseCases' import { ComputeUseCases } from './ComputeUseCases'
import { CallToAction } from './CallToAction' import { CallToAction } from './CallToAction'
import { ComputeCapabilities } from './ComputeCapabilities'
import { ComputeDesign } from './ComputeDesign' import { ComputeDesign } from './ComputeDesign'
import { ComputeOverview } from './ComputeOverview' import { ComputeOverview } from './ComputeOverview'
import { ComputeCapabilitiesNew } from './ComputeCapabilitiesNew'
export default function ComputePage() { export default function ComputePage() {
@@ -17,7 +17,7 @@ export default function ComputePage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeCapabilities /> <ComputeCapabilitiesNew />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>

View File

@@ -1,42 +1,40 @@
'use client' 'use client'
import { Button } from '@/components/Button' import { Button } from '@/components/Button'
import { Eyebrow, SectionHeader, P } from '@/components/Texts' import { Eyebrow, H3 } from '@/components/Texts'
export function GpuHero() { export function GpuHero() {
return ( return (
<div className="relative bg-white"> <div className="">
<div className="relative h-80 overflow-hidden bg-transparent md:absolute md:right-0 md:h-full md:w-1/3 lg:w-1/2"> {/* Boxed container */}
<img <div
alt="Mycelium GPU nebula illustration" 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"
src="/images/gpuhero2.png" style={{ backgroundImage: "url('/images/gpuhero2.png')", backgroundSize: "contain" }}
className="size-full object-contain" >
/> {/* Inner padding */}
</div> <div className="px-6 py-16 lg:py-16">
<div className="relative mx-auto max-w-7xl py-24 lg:py-32 lg:px-8"> <div className="max-w-2xl lg:pl-6">
<div className="pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24 "> <Eyebrow>Mycelium GPU</Eyebrow>
<Eyebrow className="tracking-[0.35em] uppercase text-cyan-500"> <H3 as="h1" className="mt-4">
Mycelium GPU
</Eyebrow>
<SectionHeader as="h1" className="mt-4 text-gray-900">
Sovereign GPU Acceleration for AI and High-Performance Compute Sovereign GPU Acceleration for AI and High-Performance Compute
</SectionHeader> </H3>
<P className="mt-6 text-gray-600"> <p className="mt-6 text-lg">
Access GPUs across the Mycelium mesh without waitlists, Access GPUs across the Mycelium mesh without waitlists, inflated pricing, or centralized control. Run inference, training, and compute workloads where they make sense: cloud, edge, or on your own hardware.
inflated pricing, or centralized control. </p>
Run inference, training, and compute workloads where they make sense: <div className="mt-10 flex items-center gap-x-6">
cloud, edge, or on your own hardware.
</P>
<div className="mt-10 flex flex-wrap gap-4">
<Button to="#gpu-getting-started" as="a" variant="solid" color="cyan"> <Button to="#gpu-getting-started" as="a" variant="solid" color="cyan">
How it works How it works
</Button> </Button>
<Button to="#gpu-architecture" as="a" variant="outline" color="cyan"> <Button to="#gpu-architecture" as="a" variant="outline">
Explore Docs Explore Docs <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>
) )
} }

View File

@@ -19,7 +19,7 @@ export function HomeHero() {
Start Hosting Start Hosting
</Button> </Button>
<Button href="#" variant="outline" color="gray"> <Button href="#" variant="outline" color="white">
Deploy in Cloud <span aria-hidden="true"></span> Deploy in Cloud <span aria-hidden="true"></span>
</Button> </Button>
</div> </div>

View File

@@ -1,31 +1,27 @@
'use client' 'use client'
import { Button } from '@/components/Button' import { Button } from '@/components/Button'
import { Eyebrow, SectionHeader, P } from '@/components/Texts' import { Eyebrow, H3 } from '@/components/Texts'
export function StorageHero() { export function StorageHero() {
return ( return (
<div className="relative bg-white"> <div className="">
<div className="relative h-80 overflow-hidden bg-transparent md:absolute md:right-0 md:h-full md:w-1/3 lg:w-1/2"> {/* Boxed container */}
<img <div
alt="Mycelium Storage visual" 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"
src="/images/computehero11.webp" style={{ backgroundImage: "url('/images/computehero11.webp')", backgroundSize: "contain" }}
className="size-full object-contain" >
/> {/* Inner padding */}
</div> <div className="px-6 py-16 lg:py-16">
<div className="relative mx-auto max-w-7xl py-24 lg:py-32 lg:px-8"> <div className="max-w-2xl lg:pl-6">
<div className="pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24 xl:pr-32"> <Eyebrow>Mycelium Storage</Eyebrow>
<Eyebrow className="tracking-[0.35em] uppercase text-cyan-500"> <H3 as="h1" className="mt-4">
Mycelium Storage
</Eyebrow>
<SectionHeader as="h1" className="mt-4 text-gray-900">
Sovereign Storage With Self-Healing and Multi-Protocol Access Sovereign Storage With Self-Healing and Multi-Protocol Access
</SectionHeader> </H3>
<P className="mt-6 text-gray-600"> <p className="mt-6 text-lg">
Store, replicate, and serve data across the global mesh Store, replicate, and serve data across the global mesh with encrypted, quantum safe, verifiable storage you control at the infrastructure layer.
with encrypted, quantum safe, verifiable storage you control at the infrastructure layer. </p>
</P> <div className="mt-10 flex items-center gap-x-6">
<div className="mt-10 flex flex-wrap gap-4">
<Button to="#storage-features" as="a" variant="solid" color="cyan"> <Button to="#storage-features" as="a" variant="solid" color="cyan">
How It Works How It Works
</Button> </Button>
@@ -33,13 +29,16 @@ with encrypted, quantum safe, verifiable storage you control at the infrastructu
to="#storage-developer-experience" to="#storage-developer-experience"
as="a" as="a"
variant="outline" variant="outline"
color="cyan"
> >
Explore Docs Explore Docs <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>
) )
} }