diff --git a/public/images/cons.png b/public/images/cons.png new file mode 100644 index 0000000..46a4085 Binary files /dev/null and b/public/images/cons.png differ diff --git a/public/images/dev.png b/public/images/dev.png new file mode 100644 index 0000000..a37fd1a Binary files /dev/null and b/public/images/dev.png differ diff --git a/public/images/seekers.png b/public/images/seekers.png new file mode 100644 index 0000000..c3b6e3e Binary files /dev/null and b/public/images/seekers.png differ diff --git a/src/App.tsx b/src/App.tsx index 51485b1..f3569b8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,7 +11,7 @@ const ComputePage = lazy(() => import('./pages/compute/ComputePage')); const StoragePage = lazy(() => import('./pages/storage/StoragePage')); const GpuPage = lazy(() => import('./pages/gpu/GpuPage')); const PodsPage = lazy(() => import('./pages/pods/PodsPage')); -const NodePage = lazy(() => import('./pages/node/NodePage')); +const NodesPage = lazy(() => import('./pages/nodes/NodesPage')); function App() { return ( @@ -28,7 +28,7 @@ function App() { } /> } /> } /> - } /> + } /> diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index d4f36c0..766967f 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -28,7 +28,7 @@ export function Footer() { Agents - Node + Nodes diff --git a/src/components/Header.tsx b/src/components/Header.tsx index d11eb79..d0d718c 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -46,7 +46,7 @@ export function Header() { to="/nodes" className="text-base/7 tracking-tight text-gray-700 hover:text-cyan-500 transition-colors" > - Node + Nodes @@ -135,7 +135,7 @@ export function Header() { className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-gray-900 hover:bg-gray-50" onClick={() => setMobileMenuOpen(false)} > - Node + Nodes
diff --git a/src/components/HeaderDark.tsx b/src/components/HeaderDark.tsx index 80cf471..ddee062 100644 --- a/src/components/HeaderDark.tsx +++ b/src/components/HeaderDark.tsx @@ -46,7 +46,7 @@ export function HeaderDark() { to="/nodes" className="text-base/7 tracking-tight text-gray-300 hover:text-cyan-400 transition-colors" > - Node + Nodes
@@ -135,7 +135,7 @@ export function HeaderDark() { className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-white hover:bg-gray-800" onClick={() => setMobileMenuOpen(false)} > - Node + Nodes
diff --git a/src/pages/home/CallToAction.tsx b/src/pages/home/CallToAction.tsx index 6618438..f05f0ba 100644 --- a/src/pages/home/CallToAction.tsx +++ b/src/pages/home/CallToAction.tsx @@ -1,3 +1,4 @@ +import { Link } from 'react-router-dom'; import { Container } from '@/components/Container' import { Button } from '@/components/Button' import { H3, P } from '@/components/Texts' @@ -63,9 +64,9 @@ export function CallToAction() { Deploy in Cloud - + Host a Node → - +
diff --git a/src/pages/network/CallToAction.tsx b/src/pages/network/CallToAction.tsx index e200f21..2f1076d 100644 --- a/src/pages/network/CallToAction.tsx +++ b/src/pages/network/CallToAction.tsx @@ -1,6 +1,7 @@ "use client"; -import { Container } from "@/components/Container"; +import { Link } from 'react-router-dom'; +import { Container } from '@/components/Container' import { Button } from "@/components/Button"; export function CallToAction() { @@ -42,9 +43,9 @@ Use the network to link environments, deploy workloads, or host nodes to strengt Deploy in Cloud - + Host a Node → - + diff --git a/src/pages/network/NetworkPage.tsx b/src/pages/network/NetworkPage.tsx index 2684e23..60d54fd 100644 --- a/src/pages/network/NetworkPage.tsx +++ b/src/pages/network/NetworkPage.tsx @@ -6,6 +6,8 @@ import { SecondaryFeatures } from './SecondaryFeatures' import { CallToAction } from './CallToAction' import { NetworkCapabilities } from './NetworkCapabilities' import { NetworkUsecases } from './NetworkUsecases' +import { NetworkPros } from './NetworkPros' + export default function NetworkPage() { return ( @@ -19,7 +21,7 @@ export default function NetworkPage() { - + @@ -27,13 +29,18 @@ export default function NetworkPage() { - + - + + + + + + diff --git a/src/pages/network/NetworkPros.tsx b/src/pages/network/NetworkPros.tsx new file mode 100644 index 0000000..23f0f9c --- /dev/null +++ b/src/pages/network/NetworkPros.tsx @@ -0,0 +1,68 @@ +import { Small } from '@/components/Texts' + +const highlights = [ + { + label: 'Network Advantage', + title: 'Fully peer-to-peer, no logins, no central cloud.', + description: + 'Connectivity flows directly between users, nodes, and services without platform ownership.', + }, + { + label: 'Identity', + title: 'One identity across all capabilities.', + description: + 'A single cryptographic identity governs your network, storage, agents, and deployments.', + }, + { + label: 'Scale', + title: 'Scales instantly from one POD to thousands.', + description: + 'Deploy locally or expand globally — the mesh routes and balances itself automatically.', + }, + { + label: 'Security', + title: 'Secure, quantum-safe, and edge-ready for the next decade.', + description: + 'Next-gen encryption, multipath routing, and attested nodes protect workloads everywhere.', + }, +] + +export function NetworkPros() { + return ( +
+ {/* ✅ Top horizontal line with spacing */} +
+
+ +
+
+ {highlights.map((item) => ( +
+
+ +
+ + {item.label} + + +

+ {item.title} +

+ +

+ {item.description} +

+
+
+ ))} +
+
+ +
+
+
+ ) +} diff --git a/src/pages/network/NetworkUsecases.tsx b/src/pages/network/NetworkUsecases.tsx index 964499f..12f0c80 100644 --- a/src/pages/network/NetworkUsecases.tsx +++ b/src/pages/network/NetworkUsecases.tsx @@ -1,12 +1,12 @@ "use client"; -import { useRef } from "react"; import { Eyebrow, SectionHeader, P } from "@/components/Texts"; -import { IoArrowBackOutline, IoArrowForwardOutline } from "react-icons/io5"; import { LockClosedIcon, ArrowPathIcon, GlobeAltIcon, + SignalIcon, + CpuChipIcon, } from "@heroicons/react/24/solid"; const networkUseCases = [ @@ -27,46 +27,52 @@ const networkUseCases = [ { title: "Service-to-Service Networking Across Environments", description: - "Connect applications running across home labs, cloud regions, edge nodes, and data centers all on one address space.", + "Connect apps running across home labs, cloud regions, edge nodes, and datacenters — all on one address space.", ideal: "Ideal for: dev teams, distributed apps, container + K3s workloads", icon: GlobeAltIcon, }, { title: "Resilient Connectivity Across Regions & Outages", description: - "Connect systems across countries, datacenters, edge locations, and remote deployments — with routing that automatically heals around ISP failures, censorship, and regional outages.", + "Automatically routes around ISP failures, censorship, and regional outages using multipath encrypted relays.", ideal: - "Ideal for: research networks, cross-border orgs, distributed compute, off-grid / rural deployments", + "Ideal for: cross-border orgs, distributed compute, remote/off-grid deployments", icon: ArrowPathIcon, }, + { + title: "Adaptive Mesh for Mobile & Edge Movement", + description: + "Devices moving between networks, cities, or countries maintain continuous secure connectivity with no reconnection steps.", + ideal: "Ideal for: mobile agents, field teams, robotics, vehicles, IoT", + icon: SignalIcon, + }, + { + title: "Compute Fabric Linking Nodes & Agents", + description: + "Agents, jobs, and tasks can interact across nodes without exposing private IPs or opening firewalls.", + ideal: "Ideal for: agent networks, edge AI workloads, distributed computation", + icon: CpuChipIcon, + }, ]; export function NetworkUsecases() { - const sliderRef = useRef(null); - - const scrollLeft = () => - sliderRef.current?.scrollBy({ left: -400, behavior: "smooth" }); - - const scrollRight = () => - sliderRef.current?.scrollBy({ left: 400, behavior: "smooth" }); - return (
-
-
    +
    + {/* GRID 3 x 3 */} +
    {networkUseCases.map((item, idx) => ( -
  • + {/* Intro Card */} {item.isIntro ? (
    @@ -81,47 +87,39 @@ export function NetworkUsecases() { {item.description}

    - -
    - - -
    ) : ( <> - {/* ✅ Icon above title */} - {item.icon && ( + {/* Icon */} + {item.icon && (
    )} -

    + {/* Title */} +

    {item.title}

    -

    + {/* Description */} +

    {item.description}

    -

    + + {/* Ideal for */} +

    {item.ideal}

    )} -
  • +
    ))} -
+
+ +
+
); } diff --git a/src/pages/network/SecondaryFeatures.tsx b/src/pages/network/SecondaryFeatures.tsx index 7c65d21..c0cff04 100644 --- a/src/pages/network/SecondaryFeatures.tsx +++ b/src/pages/network/SecondaryFeatures.tsx @@ -197,12 +197,12 @@ export function SecondaryFeatures() {
-

IN ACTIVE EVOLUTION

+

FEATURES

- Expanding the Network Layer + Core Features

- The Mycelium Network is evolving to support richer data movement, identity, and application connectivity across the mesh. These enhancements deepen autonomy and improve real-world usability. + The Mycelium Network is evolving with new features to support richer data movement, identity, and application connectivity across the mesh.

    { +const NodesPage: React.FC = () => { return ( <> @@ -19,4 +19,4 @@ const NodePage: React.FC = () => { ); }; -export default NodePage; +export default NodesPage;