diff --git a/src/pages/compute/CallToAction.tsx b/src/pages/compute/CallToAction.tsx index 5572085..d2c4290 100644 --- a/src/pages/compute/CallToAction.tsx +++ b/src/pages/compute/CallToAction.tsx @@ -1,42 +1,55 @@ -import { CircleBackground } from '../../components/CircleBackground' -import { Container } from '@/components/Container' -import { Button } from '@/components/Button' +"use client"; + +import { Container } from "@/components/Container"; +import { Button } from "@/components/Button"; export function CallToAction() { return ( -
-
- -
- -
-

- Choose How You Want to Start -

-

- Run workloads using Mycelium Cloud, or host your own compute node. -Both use the same deterministic execution fabric. +

+ {/* ✅ Top horizontal line with spacing */} +
+
-

-
- - + {/* ✅ Main boxed area */} +
+ + + +
+

+ Choose How You Want to Start +

+ +

+ Host your own node to contribute capacity or deploy workloads using the Mycelium Cloud. + You don’t need to host before deploying, and you don’t need to deploy before hosting. + +

+ + {/* ✅ Two cards, stacked center with spacing */} +
+
+ +
+ +
+ +
+
-
- + +
+ + {/* ✅ Bottom horizontal line with spacing */} +
+
- ) + ); } diff --git a/src/pages/compute/ComputeCapabilitiesNew.tsx b/src/pages/compute/ComputeCapabilitiesNew.tsx index 0d85204..2d45f00 100644 --- a/src/pages/compute/ComputeCapabilitiesNew.tsx +++ b/src/pages/compute/ComputeCapabilitiesNew.tsx @@ -110,7 +110,6 @@ export function ComputeCapabilitiesNew() { ))}
-
diff --git a/src/pages/compute/ComputeCodeTabs.tsx b/src/pages/compute/ComputeCodeTabs.tsx new file mode 100644 index 0000000..446125a --- /dev/null +++ b/src/pages/compute/ComputeCodeTabs.tsx @@ -0,0 +1,112 @@ +"use client"; + +import { useState } from "react"; + +const files = [ + { + id: "train", + label: "train.py", + code: `from mycelium import GPUCluster, Dataset + +# connect to private GPU cluster +cluster = GPUCluster("secure://my-node") + +# load training data +data = Dataset.load("s3://models/private-dataset") + +# run a reproducible training job +job = cluster.train( + model="resnet50", + dataset=data, + epochs=40, + deterministic=True +) + +job.save("s3://models/checkpoints/resnet-private")`, + }, + { + id: "deploy", + label: "deploy.yaml", + code: `apiVersion: mycelium/v1 +kind: Service +metadata: + name: vector-api +spec: + image: registry.mycelium/vector:latest + replicas: 3 + selfHeal: true + mesh: private + resources: + gpu: 1 + cpu: 2 + memory: 4Gi`, + }, + { + id: "edge", + label: "edge.ts", + code: `import { EdgeClient } from "@mycelium/sdk" + +// deploy inference to nearest node +const client = new EdgeClient() + +await client.deploy({ + model: "resnet-private", + region: "eu-home-nodes", + autoscale: true, + cache: "on-device" +})`, + }, +]; + +export function ComputeCodeTabs() { + const [active, setActive] = useState("train"); + const file = files.find((f) => f.id === active)!; + + return ( +
+
+ + + ); +} \ No newline at end of file diff --git a/src/pages/compute/ComputeUseCases.tsx b/src/pages/compute/ComputeUseCases.tsx index 948d207..c63fd85 100644 --- a/src/pages/compute/ComputeUseCases.tsx +++ b/src/pages/compute/ComputeUseCases.tsx @@ -1,53 +1,137 @@ -import { Container } from '@/components/Container' -import { Eyebrow, SectionHeader } from '@/components/Texts' +"use client"; -const useCases = [ +import { useState } from "react"; +import { ComputeCodeTabs } from "./ComputeCodeTabs"; // ✅ Make sure path is correct +import { Eyebrow, SectionHeader, H3, P } from "@/components/Texts"; + +const tabs = [ { - title: 'AI / ML Training', - description: - 'Reproducible pipelines, private model execution, scalable GPU orchestration.', + id: "ai", + label: "AI / ML TRAINING", + content: [ + { + item: "Reproducible pipelines", + desc: "Build deterministic, version-locked training pipelines that produce the same result every time.", + }, + { + + item: "Private model execution", + desc: "Train sensitive models on hardware you control, keeping datasets and checkpoints off hyperscalers.", + }, + { + item: "Scalable GPU orchestration", + desc: "Scale training and inference across decentralized GPU nodes with automated orchestration.", + }, + ], }, { - title: 'Application Hosting', - description: - 'Private, reliable, self-healing services – without cloud vendor lock-in.', + id: "apps", + label: "APPLICATION HOSTING", + content: [ + { + item: "Self-healing services", + desc: "Private, reliable services that repair automatically without cloud vendor lock-in.", + }, + { + item: "Zero cloud lock-in", + desc: "Deploy containers, VMs, or full Kubernetes clusters — migrate off AWS/GCP/Azure with no code changes.", + }, + { + item: "Encrypted networking", + desc: "All services communicate through Mycelium Mesh — no VPNs, no exposed ports.", + }, + ], }, { - title: 'Distributed & Edge Compute', - description: - 'Run workloads where data lives, in homes, offices, datacenters, or remote regions.', + id: "edge", + label: "DISTRIBUTED & EDGE COMPUTE", + content: [ + { + item: "Distributed workloads", + desc: "Run compute where data lives — homes, factories, hospitals, or remote regions.", + }, + { + item: "Offline-first resilience", + desc: "Nodes keep working even with weak internet or outages — ideal for mission-critical edge.", + }, + { + item: "Global deployment, local data", + desc: "Keep data in-country or on-prem for compliance, privacy, and regulated industries.", + }, + ], }, -] +]; export function ComputeUseCases() { + const [active, setActive] = useState("ai"); + const current = tabs.find((t) => t.id === active)!; + return ( -
- -
- +
+ {/* ✅ Top horizontal line with spacing */} +
+
+ +
+ + {/* ✅ H3 on own row */} +
+ Use Cases - - Built for Serious Workloads - +

+ Built for Serious Workloads +

+

+ Mycelium Compute is a decentralized physical infrastructure network + (DePIN) for high-performance workloads. Run reproducible AI/ML + pipelines, host self-healing applications, or deploy to the edge — all + on a fabric that’s more resilient and private than the cloud. +

-
- {useCases.map((useCase) => ( -
-

- {useCase.title} -

-

- {useCase.description} -

+ {/* ✅ Two-column layout */} +
+ + {/* ✅ Replace image with CodeTabs */} +
+ +
+ + {/* ✅ Right side tabs & content */} +
+ + {/* Tabs Nav */} +
+ {tabs.map((tab) => ( + + ))}
- ))} + + {/* Tab Content */} +
+ {current.content.map((c, i) => ( +
+

{c.item}

+

{c.desc}

+
+ ))} +
+
- +
+
+
- ) + ); }