diff --git a/public/images/6b080b431e628e15126de0893db49e1a.webp b/public/images/6b080b431e628e15126de0893db49e1a.webp new file mode 100644 index 0000000..6fdc3c2 Binary files /dev/null and b/public/images/6b080b431e628e15126de0893db49e1a.webp differ diff --git a/public/images/ainode.png b/public/images/ainode.png new file mode 100644 index 0000000..deeab5a Binary files /dev/null and b/public/images/ainode.png differ diff --git a/public/images/edgenode.png b/public/images/edgenode.png new file mode 100644 index 0000000..04a33c2 Binary files /dev/null and b/public/images/edgenode.png differ diff --git a/src/pages/node/NodePage.tsx b/src/pages/node/NodePage.tsx index 5b95a58..19f51dd 100644 --- a/src/pages/node/NodePage.tsx +++ b/src/pages/node/NodePage.tsx @@ -1,12 +1,16 @@ import React from 'react'; import { NodeHero } from './NodeHero'; import { NodeBenefits } from './NodeBenefits'; +import { NodeSteps } from './NodeSteps'; +import { NodeProducts } from './NodeProducts'; const NodePage: React.FC = () => { return ( <> + + ); }; diff --git a/src/pages/node/NodeProducts.tsx b/src/pages/node/NodeProducts.tsx new file mode 100644 index 0000000..99737af --- /dev/null +++ b/src/pages/node/NodeProducts.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { motion } from "framer-motion"; +import { Eyebrow, SectionHeader, P, CT, CP } from "@/components/Texts"; + +const nodes = [ + { + name: "Edge AI Node", + subtitle: "Based on Ryzen AI MAX+ 395 platform", + image: "/images/ainode.png", + }, + { + name: "Edge Compute Node", + subtitle: "Based on GMKtec NUCBox M6 Ultra (Ryzen 5 7640HS)", + image: "/images/edgenode.png", + }, +]; + +export function NodeProducts() { + return ( +
+ {/* Top spacing + border */} +
+
+ + {/* MAIN CONTAINER */} +
+ + {/* Header */} + + Recommended + + + Recommended Nodes to Buy + + +

+ The best entry-level and performance-balanced hardware for hosting + Mycelium nodes, running agents, and contributing compute to the network. +

+
+ + {/* Node cards */} +
+ + {nodes.map((node, i) => ( + + {node.name} + + + {node.name} + + + + {node.subtitle} + + + + + ))} + +
+
+ + {/* Bottom border */} +
+
+ ); +} diff --git a/src/pages/node/NodeSteps.tsx b/src/pages/node/NodeSteps.tsx new file mode 100644 index 0000000..f9241e6 --- /dev/null +++ b/src/pages/node/NodeSteps.tsx @@ -0,0 +1,87 @@ +"use client"; + +import { Eyebrow, H3, P, CT, CP } from "@/components/Texts"; +import { + CloudArrowDownIcon, + CpuChipIcon, + WalletIcon, + BoltIcon, +} from "@heroicons/react/24/solid"; + +const steps = [ + { + name: "Buy a Node", + description: + "Choose your hardware setup. You can use your own device or one of the recommended models below.", + icon: CpuChipIcon, + }, + { + name: "Download Mycelium OS", + description: + "Install the Mycelium OS to prepare your node for network access.", + icon: CloudArrowDownIcon, + }, + { + name: "Link Your Wallet", + description: + "Connect your private key from your Mycelium account to enable rewards and authentication.", + icon: WalletIcon, + }, + { + name: "Plug In and Go", + description: + "Connect to power and to the internet. Your node will join automatically and start contributing.", + icon: BoltIcon, + }, +]; + +export function NodeSteps() { + return ( +
+ {/* Top line */} +
+
+ +
+
+ HOW IT WORKS + +

+ Host a Node +

+ +

+ Hosting a node takes minutes, and it runs automatically once online. +

+
+ + {/* 🔹 Horizontal Stepper */} +
+ {steps.map((step, i) => ( +
+ {/* 🔹 Horizontal connector line (desktop only) */} + {i < steps.length - 1 && ( +
+ )} + + {/* 🔹 Step header with icon */} +
+
+ +
+ {step.name} +
+ + {/* 🔹 Description */} + {step.description} +
+ ))} +
+
+ {/* bottom line */} + {/* ✅ Bottom horizontal line with spacing */} +
+
+
+ ); +}