refactor: consolidate cloud and agents page components

- Removed duplicate hero component variations (AgentsHero/AgentsHeroAlt, CloudHero/CloudHeroAlt)
- Deleted unused CloudCTA, CloudGettingStarted, and CloudDesign components
- Cleaned up empty files and legacy page structure
This commit is contained in:
2025-11-06 15:00:37 +01:00
parent b1c59a9b5a
commit b3836062a3
43 changed files with 193 additions and 71 deletions

BIN
public/images/testpic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -2,9 +2,9 @@
import { useId, useState } from 'react' import { useId, useState } from 'react'
import { Button } from '../../components/Button' import { Button } from '../../../components/Button'
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import ContactForm from '../../components/ContactForm' import ContactForm from '../../../components/ContactForm'
function BackgroundIllustration(props: React.ComponentPropsWithoutRef<'div'>) { function BackgroundIllustration(props: React.ComponentPropsWithoutRef<'div'>) {
const id = useId() const id = useId()

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const codeSamples = [ const codeSamples = [
{ {

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const differentiators = [ const differentiators = [
{ {

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const primaryUseCases = [ const primaryUseCases = [
{ {
@@ -112,7 +112,7 @@ export function ComputeUseCases() {
{computeSpecific.map((useCase) => ( {computeSpecific.map((useCase) => (
<div <div
key={useCase.title} key={useCase.title}
className="rounded-3xl border border-cyan-400/20 bg-gradient-to-br from-cyan-500/10 via-cyan-500/5 to-transparent p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-200/40 hover:from-cyan-400/20 hover:via-cyan-400/10" className="rounded-3xl border border-cyan-400/20 bg-linear-to-br from-cyan-500/10 via-cyan-500/5 to-transparent p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-200/40 hover:from-cyan-400/20 hover:via-cyan-400/10"
> >
<h3 className="text-xl font-semibold text-white"> <h3 className="text-xl font-semibold text-white">
{useCase.title} {useCase.title}

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const zeroImageBenefits = [ const zeroImageBenefits = [
'Metadata-only artifacts replace heavy images for ultra-fast delivery.', 'Metadata-only artifacts replace heavy images for ultra-fast delivery.',
@@ -10,11 +10,11 @@ const zeroImageBenefits = [
export function ComputeZeroImage() { export function ComputeZeroImage() {
return ( return (
<section className="relative overflow-hidden bg-gradient-to-b from-cyan-950 via-gray-950 to-gray-950 py-24 sm:py-32"> <section className="relative overflow-hidden bg-linear-to-b from-cyan-950 via-gray-950 to-gray-950 py-24 sm:py-32">
<div className="pointer-events-none absolute inset-0"> <div className="pointer-events-none absolute inset-0">
<div className="absolute -top-32 right-1/4 h-72 w-72 rounded-full bg-cyan-500/30 blur-[120px]" /> <div className="absolute -top-32 right-1/4 h-72 w-72 rounded-full bg-cyan-500/30 blur-[120px]" />
<div className="absolute bottom-0 left-1/3 h-96 w-96 rounded-full bg-cyan-400/10 blur-[140px]" /> <div className="absolute bottom-0 left-1/3 h-96 w-96 rounded-full bg-cyan-400/10 blur-[140px]" />
<div className="absolute inset-0 bg-[radial-gradient(circle_at_left,_rgba(8,145,178,0.18),_transparent_55%)]" /> <div className="absolute inset-0 bg-[radial-gradient(circle_at_left,rgba(8,145,178,0.18),transparent_55%)]" />
</div> </div>
<Container className="relative"> <Container className="relative">
<div className="grid items-center gap-12 lg:grid-cols-[0.85fr_1.15fr]"> <div className="grid items-center gap-12 lg:grid-cols-[0.85fr_1.15fr]">

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const architectureSections = [ const architectureSections = [
{ {

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const differentiators = [ const differentiators = [
{ {
@@ -52,7 +52,7 @@ export function GpuDifferentiators() {
{differentiators.map((item) => ( {differentiators.map((item) => (
<div <div
key={item.title} key={item.title}
className="rounded-3xl border border-white/10 bg-white/[0.04] p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.08]" className="rounded-3xl border border-white/10 bg-white/4 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/8"
> >
<h3 className="text-lg font-semibold text-white">{item.title}</h3> <h3 className="text-lg font-semibold text-white">{item.title}</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-300"> <p className="mt-4 text-sm leading-relaxed text-gray-300">
@@ -61,7 +61,7 @@ export function GpuDifferentiators() {
</div> </div>
))} ))}
</div> </div>
<div className="mt-16 rounded-3xl border border-white/10 bg-white/[0.03] p-8 text-left backdrop-blur-sm"> <div className="mt-16 rounded-3xl border border-white/10 bg-white/3 p-8 text-left backdrop-blur-sm">
<h3 className="text-xl font-semibold text-white">Cost Efficiency</h3> <h3 className="text-xl font-semibold text-white">Cost Efficiency</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-300"> <p className="mt-4 text-sm leading-relaxed text-gray-300">
Transparent economics makes capacity planning simple while keeping Transparent economics makes capacity planning simple while keeping

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P, Small } from '../../components/Texts' import { Eyebrow, SectionHeader, P, Small } from '../../../components/Texts'
const steps = [ const steps = [
{ {
@@ -44,7 +44,7 @@ export function GpuGettingStarted() {
id="gpu-getting-started" id="gpu-getting-started"
className="relative overflow-hidden bg-gray-900 py-24 sm:py-32" className="relative overflow-hidden bg-gray-900 py-24 sm:py-32"
> >
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top,_rgba(34,211,238,0.12),_transparent_60%)]" /> <div className="absolute inset-0 bg-[radial-gradient(circle_at_top,rgba(34,211,238,0.12),transparent_60%)]" />
<Container className="relative"> <Container className="relative">
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-3xl text-center">
<Eyebrow className="tracking-[0.32em] uppercase text-cyan-300"> <Eyebrow className="tracking-[0.32em] uppercase text-cyan-300">
@@ -63,7 +63,7 @@ export function GpuGettingStarted() {
{steps.map((step) => ( {steps.map((step) => (
<div <div
key={step.title} key={step.title}
className="flex h-full flex-col rounded-3xl border border-white/10 bg-white/[0.03] p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.06]" className="flex h-full flex-col rounded-3xl border border-white/10 bg-white/3 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/6"
> >
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<Small className="text-xs uppercase tracking-[0.4em] text-cyan-300"> <Small className="text-xs uppercase tracking-[0.4em] text-cyan-300">
@@ -91,7 +91,7 @@ export function GpuGettingStarted() {
</div> </div>
))} ))}
</div> </div>
<div className="mt-16 rounded-3xl border border-white/10 bg-white/[0.03] p-6 text-center backdrop-blur-sm"> <div className="mt-16 rounded-3xl border border-white/10 bg-white/3 p-6 text-center backdrop-blur-sm">
<p className="text-sm font-medium uppercase tracking-[0.3em] text-cyan-200"> <p className="text-sm font-medium uppercase tracking-[0.3em] text-cyan-200">
Basic Workflow Basic Workflow
</p> </p>

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const integrationPoints = [ const integrationPoints = [
'Unified Mycelium networking provides secure access to GPU nodes.', 'Unified Mycelium networking provides secure access to GPU nodes.',
@@ -50,7 +50,7 @@ export function GpuIntegration() {
</P> </P>
</div> </div>
<div className="mt-16 grid gap-10 lg:grid-cols-2"> <div className="mt-16 grid gap-10 lg:grid-cols-2">
<div className="space-y-4 rounded-3xl border border-white/10 bg-white/[0.04] p-8 text-left backdrop-blur-sm"> <div className="space-y-4 rounded-3xl border border-white/10 bg-white/4 p-8 text-left backdrop-blur-sm">
<h3 className="text-lg font-semibold text-white"> <h3 className="text-lg font-semibold text-white">
Platform alignment Platform alignment
</h3> </h3>
@@ -66,7 +66,7 @@ export function GpuIntegration() {
))} ))}
</ul> </ul>
</div> </div>
<div className="rounded-3xl border border-white/10 bg-white/[0.04] p-8 backdrop-blur-sm"> <div className="rounded-3xl border border-white/10 bg-white/4 p-8 backdrop-blur-sm">
<h3 className="text-lg font-semibold text-white"> <h3 className="text-lg font-semibold text-white">
Kubernetes deployment example Kubernetes deployment example
</h3> </h3>

View File

@@ -34,7 +34,7 @@ export function HomeBenefits() {
}, },
]; ];
return ( return (
<div className="relative z-20 py-10 lg:py-24 max-w-7xl mx-auto"> <div className="relative z-20 bg-blackpy-10 lg:py-24 max-w-7xl mx-auto">
<div className="px-12"> <div className="px-12">
<Eyebrow className="text-center text-cyan-500"> <Eyebrow className="text-center text-cyan-500">
Benefits Benefits
@@ -207,7 +207,7 @@ export const SkeletonTwo = () => {
}} }}
whileHover="whileHover" whileHover="whileHover"
whileTap="whileTap" whileTap="whileTap"
className="rounded-xl -mr-4 mt-4 p-1 bg-white dark:bg-neutral-800 dark:border-neutral-700 border border-neutral-100 shrink-0 overflow-hidden" className="rounded-xl -mr-4 mt-4 p-1 bg-black s border-neutral-100 shrink-0 overflow-hidden"
> >
<img <img
src={image} src={image}

View File

@@ -1,6 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../components/Container'
import {Eyebrow, H3, P } from '../../components/Texts' import { Eyebrow, H3, P } from '../../components/Texts'
/* ✅ Custom Icons */ /* ✅ Custom Icons */
@@ -82,8 +81,6 @@ function VPNIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
) )
} }
/* ✅ Updated Feature List */
const features = [ const features = [
{ {
name: 'Kubernetes Clusters', name: 'Kubernetes Clusters',
@@ -107,48 +104,40 @@ const features = [
}, },
] ]
/* ✅ Component */
export function HomeHosting() { export function HomeHosting() {
return ( return (
<section <section
id="comingsoon" id="comingsoon"
aria-label="Features" aria-label="Features"
className="py-20 sm:py-32 relative isolate overflow-hidden" className="py-20 sm:py-32"
style={{
backgroundImage: "url('/images/bg2.jpg')",
backgroundSize: 'cover',
backgroundPosition: 'center',
backgroundRepeat: 'no-repeat',
}}
> >
{/* ✅ Soft overlay for readable text */} <Container>
<div className="absolute inset-0 bg-white/60 backdrop-blur-[1px]" />
<Container className="relative z-10">
<div className="mx-auto max-w-4xl sm:text-center"> <div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow className="text-cyan-500">IN ACTIVE EVOLUTION</Eyebrow> <Eyebrow className="text-cyan-500">IN ACTIVE EVOLUTION</Eyebrow>
<H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-gray-900"> <H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-gray-900">
Expanding the Network Layer Expanding the Network Layer
</H3> </H3>
<P className="mt-6 text-lg text-gray-600"> <P className="mt-6 text-lg text-gray-600">
The Mycelium Network is evolving to support richer data movement, identity, and application connectivity across the mesh. The Mycelium Network is evolving to support richer data movement, identity,
These enhancements deepen autonomy and improve real-world usability. and application connectivity across the mesh. These enhancements deepen autonomy
and improve real-world usability.
</P> </P>
</div> </div>
<ul <ul
role="list" role="list"
className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-6 text-sm sm:grid-cols-2 md:gap-y-10 lg:max-w-none lg:grid-cols-4" className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-6 text-sm
sm:mt-20 sm:grid-cols-2 md:gap-y-10 lg:max-w-none lg:grid-cols-4"
> >
{features.map((feature) => ( {features.map((feature) => (
<li <li
key={feature.name} key={feature.name}
className="rounded-2xl border border-gray-200 px-8 py-8 transition-all duration-300 ease-in-out hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 bg-white/70 backdrop-blur-sm" className="rounded-2xl border border-gray-200 p-8 transition-all duration-300 ease-in-out
hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 bg-white"
> >
<feature.icon className="h-12 w-12" /> <feature.icon className="h-14 w-14" />
<p className="mt-6 font-semibold text-gray-900 text-sm lg:text-base leading-tight">{feature.name}</p> <h3 className="mt-6 font-semibold text-gray-900">{feature.name}</h3>
<p className="mt-2 text-gray-700 leading-tight">{feature.description}</p> <p className="mt-2 text-gray-700">{feature.description}</p>
</li> </li>
))} ))}
</ul> </ul>

View File

@@ -1,13 +1,13 @@
import { useRef } from 'react' import { useRef } from 'react'
import { AnimatedSection } from '../../components/AnimatedSection' import { AnimatedSection } from '../../components/AnimatedSection'
import { StackSectionLight } from './StackSection' import { StackSectionDark } from './StackSectionDark'
import { WorldMap } from './HomeGlobe' import { WorldMap } from './HomeGlobe'
import { HomeBenefits } from './HomeBenefits' import { HomeBenefits } from './HomeBenefits'
import { CallToAction } from './CallToAction' import { CallToAction } from './CallToAction'
import { HomeSlider } from './HomeSlider' import { HomeHosting } from './HomeHosting'
import { HomeHostingDark } from './HomeHostingDark'
import { HomeAurora } from './HomeAurora' import { HomeAurora } from './HomeAurora'
import { HomeTab } from './HomeTab'
export default function HomePage() { export default function HomePage() {
@@ -27,15 +27,15 @@ export default function HomePage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<HomeHostingDark /> <HomeHosting />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<StackSectionLight /> <StackSectionDark />
</AnimatedSection> </AnimatedSection>
<AnimatedSection ref={sliderRef}> <AnimatedSection>
<HomeSlider /> <HomeTab />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>

133
src/pages/home/HomeTab.tsx Normal file
View File

@@ -0,0 +1,133 @@
"use client";
import { useState } from "react";
import { Button } from "@/components/Button";
import { Eyebrow, H3, P } from "@/components/Texts";
import cloudImage from "/images/pages/cloud.png";
import networkImage from "/images/pages/network.png";
import agentImage from "/images/pages/agent.png";
import computeImage from "/images/pages/compute.png";
const tabs = [
{
id: "cloud",
label: "Kubernetes Clusters",
title: "Mycelium Cloud",
description: "Deploy Kubernetes clusters on sovereign infrastructure.",
image: "/images/pages/cloud.png",
bg: cloudImage,
link: "/cloud",
},
{
id: "network",
label: "Mesh Networking",
title: "Mycelium Network",
description: "Encrypted peer-to-peer mesh networking across the globe.",
image: "/images/pages/network.png",
bg: networkImage,
link: "/network",
},
{
id: "agent",
label: "AI Agents",
title: "Mycelium Agents",
description: "Private, programmable AI systems that run on your hardware.",
image: "/images/pages/agent.png",
bg: agentImage,
link: "/agent",
},
{
id: "compute",
label: "Compute & Storage",
title: "Hardware Resources",
description: "The resource layers powering the stack.",
image: "/images/pages/compute.png",
bg: computeImage,
link: "/compute",
},
];
export function HomeTab() {
const [active, setActive] = useState("cloud");
const current = tabs.find((t) => t.id === active)!;
return (
<section className="mx-4 px-6 lg:px-8 lg:mx-auto max-w-7xl py-24">
<div className="space-y-12 text-center">
{/* ✅ Replaced H1 + P with Eyebrow + H3 + P */}
<Eyebrow className="text-gray-500">Ecosystem</Eyebrow>
<H3 className="text-gray-900">
Mycelium Components
</H3>
<P className="text-gray-500 max-w-4xl mx-auto">
Each component can be used on its own or combined into a fully sovereign cloud.
</P>
{/* ✅ Tabs & content centered */}
<div className="flex justify-center">
<div className="space-y-10 max-w-5xl w-full">
{/* ✅ Tabs */}
<div className="flex justify-center">
<div className="flex flex-wrap gap-3 bg-gray-50 rounded-full p-2 border border-gray-200">
{tabs.map((tab) => (
<button
key={tab.id}
onClick={() => setActive(tab.id)}
className={`px-5 py-2 rounded-full text-sm font-medium transition-all
${
active === tab.id
? "bg-white border border-gray-300 shadow-sm"
: "text-gray-500 hover:text-gray-900"
}`}
>
{tab.label}
</button>
))}
</div>
</div>
{/* ✅ 2-column layout */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
{/* Left content */}
<div className="space-y-4 text-left mx-auto">
<h4 className="text-sm font-semibold text-gray-900 uppercase tracking-wide">
{current.title}
</h4>
<p className="text-sm text-gray-500 leading-relaxed max-w-md">
{current.description}
</p>
<Button
variant="outline"
color="gray"
asChild
className="mt-2"
>
<a href={current.link}>Learn More</a>
</Button>
</div>
{/* Right content */}
<div className="flex items-center justify-center">
<img
src={current.image}
alt={current.title}
className="w-full max-w-xs object-contain rounded-xl border border-gray-200 shadow-sm"
/>
</div>
</div>
</div>
</div>
</div>
</section>
);
}

View File

@@ -1,5 +1,5 @@
import { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline' import { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline'
import { Eyebrow, H3, P, CT } from '../../components/Texts' import { Eyebrow, H3, P, CT } from '../../../components/Texts'
const features = [ const features = [
{ name: 'Infrastructure Ownership', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> }, { name: 'Infrastructure Ownership', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
type Experience = { type Experience = {
title: string title: string
@@ -95,7 +95,7 @@ export function StorageDeveloperExperience() {
{experiences.map((experience) => ( {experiences.map((experience) => (
<div <div
key={experience.title} key={experience.title}
className="flex h-full flex-col rounded-3xl border border-white/10 bg-white/[0.04] p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.08]" className="flex h-full flex-col rounded-3xl border border-white/10 bg-white/4 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/8"
> >
<div> <div>
<h3 className="text-xl font-semibold text-white"> <h3 className="text-xl font-semibold text-white">

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '../../../components/Texts'
const differentiators = [ const differentiators = [
{ {
@@ -50,7 +50,7 @@ export function StorageDifferentiators() {
{differentiators.map((item) => ( {differentiators.map((item) => (
<div <div
key={item.title} key={item.title}
className="rounded-3xl border border-white/10 bg-white/[0.04] p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.08]" className="rounded-3xl border border-white/10 bg-white/4 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/8"
> >
<h3 className="text-lg font-semibold text-white">{item.title}</h3> <h3 className="text-lg font-semibold text-white">{item.title}</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-300"> <p className="mt-4 text-sm leading-relaxed text-gray-300">

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '../../../components/Container'
import { Eyebrow, SectionHeader, P, Small } from '../../components/Texts' import { Eyebrow, SectionHeader, P, Small } from '../../../components/Texts'
const features = [ const features = [
{ {