forked from emre/www_projectmycelium_com
Compare commits
4 Commits
developmen
...
developmen
| Author | SHA1 | Date | |
|---|---|---|---|
| 46d02fca47 | |||
| 6779218da6 | |||
| 04b94367a9 | |||
| cdd6e3104b |
@@ -7,7 +7,7 @@ import {
|
||||
} from '@headlessui/react'
|
||||
import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline'
|
||||
|
||||
import { Eyebrow, H3 } from "@/components/Texts"
|
||||
import { Eyebrow, H3, H4 } from "@/components/Texts"
|
||||
|
||||
|
||||
const product = {
|
||||
@@ -49,26 +49,28 @@ export function CloudHostingNew() {
|
||||
<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">
|
||||
<div className="lg:grid lg:grid-cols-5 lg:items-start lg:gap-x-8">
|
||||
|
||||
{/* ✅ 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 */}
|
||||
<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>
|
||||
<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 }}
|
||||
/>
|
||||
|
||||
|
||||
{/* ✅ Details accordion */}
|
||||
<section className="mt-8">
|
||||
<section className="mt-6">
|
||||
<div className="divide-y divide-gray-800 border-t border-cyan-500">
|
||||
{product.details.map((detail) => (
|
||||
<Disclosure key={detail.name} as="div">
|
||||
|
||||
118
src/pages/compute/ComputeCapabilitiesNew.tsx
Normal file
118
src/pages/compute/ComputeCapabilitiesNew.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@@ -1,56 +1,54 @@
|
||||
import { Eyebrow, H3, P, CP, CT } from '@/components/Texts'
|
||||
import {
|
||||
ShieldCheckIcon,
|
||||
ArrowPathIcon,
|
||||
RocketLaunchIcon,
|
||||
GlobeAltIcon,
|
||||
ShieldCheckIcon,
|
||||
} 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',
|
||||
description: 'Every cluster state is signed and checksummed to guarantee truth.',
|
||||
value: 'Signed & Checksummed',
|
||||
icon: ShieldCheckIcon,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'Stateless execution that scales anywhere',
|
||||
description: 'Run workloads on any node, region, or edge without manual orchestration.',
|
||||
icon: RocketLaunchIcon,
|
||||
value: 'Global Scaling',
|
||||
icon: GlobeAltIcon,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: 'Automatic healing and recovery',
|
||||
description: 'Self-repairing processes ensure workloads stay available and consistent.',
|
||||
value: 'Self-Repairing',
|
||||
icon: ArrowPathIcon,
|
||||
},
|
||||
]
|
||||
|
||||
export function ComputeDesign() {
|
||||
return (
|
||||
<section className="bg-white py-24 sm:py-32">
|
||||
<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="">
|
||||
|
||||
<div className="mx-auto mt-16 max-w-5xl">
|
||||
<dl className="grid grid-cols-1 gap-12 text-gray-600 sm:grid-cols-2 lg:grid-cols-3">
|
||||
{features.map((feature) => (
|
||||
<div key={feature.name} className="relative pl-12">
|
||||
<feature.icon
|
||||
aria-hidden="true"
|
||||
className="absolute left-0 top-1 size-6 text-cyan-600"
|
||||
/>
|
||||
<CT className="font-semibold text-gray-900">{feature.name}</CT>
|
||||
<CP className="mt-1 text-gray-600">{feature.description}</CP>
|
||||
{/* ✅ Top horizontal line with spacing */}
|
||||
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
|
||||
<div className="w-full border-t border-l border-r border-gray-200" />
|
||||
|
||||
{/* ✅ Top horizontal line with spacing */}
|
||||
<div className="mx-auto max-w-7xl border-gray-200">
|
||||
<dl className="grid grid-cols-1 gap-4 lg:gap-14 overflow-hidden text-center lg:grid-cols-3">
|
||||
{stats.map((stat) => (
|
||||
<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">
|
||||
<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>
|
||||
))}
|
||||
</dl>
|
||||
</div>
|
||||
</Container>
|
||||
</section>
|
||||
</div>
|
||||
{/* ✅ Bottom horizontal line + 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>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ import { ComputeFeatures } from './ComputeFeatures'
|
||||
import { ComputeArchitecture } from './ComputeArchitecture'
|
||||
import { ComputeUseCases } from './ComputeUseCases'
|
||||
import { CallToAction } from './CallToAction'
|
||||
import { ComputeCapabilities } from './ComputeCapabilities'
|
||||
import { ComputeDesign } from './ComputeDesign'
|
||||
import { ComputeOverview } from './ComputeOverview'
|
||||
import { ComputeCapabilitiesNew } from './ComputeCapabilitiesNew'
|
||||
|
||||
|
||||
export default function ComputePage() {
|
||||
@@ -17,7 +17,7 @@ export default function ComputePage() {
|
||||
</AnimatedSection>
|
||||
|
||||
<AnimatedSection>
|
||||
<ComputeCapabilities />
|
||||
<ComputeCapabilitiesNew />
|
||||
</AnimatedSection>
|
||||
|
||||
<AnimatedSection>
|
||||
|
||||
Reference in New Issue
Block a user