feat: add AgentPro section and refactor AgentUsecase layout

- Created AgentPro component highlighting local execution, mesh connectivity, private data access, and portability advantages
- Replaced horizontal scrolling carousel in AgentUsecase with responsive grid layout
- Added "Blend local + remote intelligence" use case to AgentUsecase
- Removed slider navigation buttons and replaced with static grid display
- Replaced AgentDesign with AgentPro in AgentsPage component order
- Increased hero section padding on
This commit is contained in:
2025-11-17 14:12:17 +01:00
parent 29e2d942de
commit 6ff539b3fc
5 changed files with 183 additions and 98 deletions

View File

@@ -12,7 +12,7 @@ export function AgentHeroAlt() {
style={{ backgroundImage: "url('/images/agents.webp')", backgroundSize: "contain" }} style={{ backgroundImage: "url('/images/agents.webp')", backgroundSize: "contain" }}
> >
{/* Inner padding */} {/* Inner padding */}
<div className="px-6 py-16 lg:py-16"> <div className="px-6 py-16 lg:py-24">
<div className="max-w-2xl lg:pl-6"> <div className="max-w-2xl lg:pl-6">
<Eyebrow>MYCELIUM AGENTS - COMING IN 2026</Eyebrow> <Eyebrow>MYCELIUM AGENTS - COMING IN 2026</Eyebrow>
<H3 as="h1" className="mt-4"> <H3 as="h1" className="mt-4">

View File

@@ -0,0 +1,90 @@
import { Small } from "@/components/Texts";
import { Eyebrow, H3, P } from "@/components/Texts";
const highlights = [
{
label: "Local Execution",
title: "Agents run entirely inside your environment.",
description:
"Models, logic, and memory stay within your own trusted hardware—never behind third-party APIs.",
},
{
label: "Mesh Connectivity",
title: "They communicate peer-to-peer across trusted nodes.",
description:
"Agents form direct encrypted paths between environments, without relays or central servers.",
},
{
label: "Private Data Access",
title: "They use your data without sending it elsewhere.",
description:
"Your datasets, embeddings, and context never leave your boundaries—processing stays local.",
},
{
label: "Portability",
title: "They move with you, not with a cloud provider.",
description:
"Agents follow your devices, networks, and workflows, remaining sovereign across every location.",
},
];
export function AgentPro() {
return (
<section className="relative w-full bg-[#FDFDFD] overflow-hidden">
{/* Top spacing line */}
<div className="max-w-7xl bg-[#FDFDFD] mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div>
<div className="w-full border-t border-l border-r border-gray-100" />
{/* Intro Block */}
<div className="bg-[#FDFDFD] w-full max-w-7xl mx-auto border border-t-0 border-b-0 border-gray-100">
<div className="px-8 py-12 max-w-4xl mx-auto flex flex-col items-center justify-center min-h-[220px] text-center">
<Eyebrow className="uppercase tracking-[0.16em] text-cyan-600">
Advantages
</Eyebrow>
<H3 className="mt-4 text-black">
Why Its Different
</H3>
<P className="mt-4 text-gray-700 text-base leading-relaxed">
Most AI systems run on centralized clouds, where the models, data, and
logic operate behind third-party APIs. Mycelium Agents flip that
architecture, it runs entirely inside your environment so control,
privacy, and autonomy stay with you.
</P>
</div>
{/* Grid */}
<div className="grid lg:grid-cols-4">
{highlights.map((item) => (
<div
key={item.title}
className="group relative overflow-hidden border border-gray-100 bg-white p-8 transition hover:border-cyan-400/40 hover:bg-white"
>
{/* Glow */}
<div className="absolute inset-0 bg-linear-to-br from-cyan-200/0 via-cyan-100/20 to-cyan-300/20 opacity-0 transition group-hover:opacity-100" />
<div className="relative">
<Small className="text-xs uppercase tracking-[0.16em] text-cyan-600">
{item.label}
</Small>
<h3 className="mt-4 text-lg font-semibold leading-tight text-black">
{item.title}
</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-600">
{item.description}
</p>
</div>
</div>
))}
</div>
</div>
{/* Bottom spacing */}
<div className="w-full border-b border-gray-100 bg-[#FDFDFD]" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-100" />
</section>
);
}

View File

@@ -1,9 +1,6 @@
"use client"; "use client";
import { useRef } from "react";
import { Eyebrow, SectionHeader, P } from "@/components/Texts"; import { Eyebrow, SectionHeader, P } from "@/components/Texts";
import { IoArrowBackOutline, IoArrowForwardOutline } from "react-icons/io5";
import { import {
CpuChipIcon, CpuChipIcon,
GlobeAltIcon, GlobeAltIcon,
@@ -50,98 +47,75 @@ const networkUseCases = [
"Run agents in sectors requiring strict data residency, verified identity, and controlled connectivity.", "Run agents in sectors requiring strict data residency, verified identity, and controlled connectivity.",
icon: ShieldCheckIcon, icon: ShieldCheckIcon,
}, },
{
title: "Blend local + remote intelligence",
description:
"Let lightweight agents run locally while offloading heavy tasks to trusted nodes, maintaining privacy and performance balance.",
icon: CpuChipIcon,
},
]; ];
export function AgentUsecase() { export function AgentUsecase() {
const sliderRef = useRef<HTMLUListElement>(null);
const scrollLeft = () =>
sliderRef.current?.scrollBy({ left: -400, behavior: "smooth" });
const scrollRight = () =>
sliderRef.current?.scrollBy({ left: 400, behavior: "smooth" });
return ( return (
<section className="w-full max-w-8xl mx-auto bg-transparent"> <section className="w-full max-w-8xl mx-auto bg-transparent">
{/* Top horizontal spacing line */}
{/* ✅ Top horizontal line with spacing */} <div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div>
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div>
<div className="w-full border-t border-l border-r border-gray-100" /> <div className="w-full border-t border-l border-r border-gray-100" />
<div className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-slate-200 bg-white overflow-hidden"> {/* Main framed section */}
<ul <div className="border border-t-0 border-b-0 border-gray-100 bg-white">
ref={sliderRef} <div className="mx-auto max-w-4xl sm:text-center py-12">
className="flex overflow-x-auto snap-x snap-mandatory scroll-smooth no-scrollbar" {/* Intro block (from isIntro item) */}
> {networkUseCases[0].isIntro && (
{networkUseCases.map((item, idx) => ( <>
<li <Eyebrow className="text-cyan-600">{networkUseCases[0].eyebrow}</Eyebrow>
key={idx}
className={`snap-start shrink-0 w-[85%] sm:w-[50%] lg:w-[33%]
border border-slate-200 px-10 py-12 relative
${item.isIntro ? "bg-gray-50/80" : "bg-white"}`}
>
{/* INTRO CARD */}
{item.isIntro ? (
<div className="flex flex-col justify-between h-full">
<div>
<Eyebrow>{item.eyebrow}</Eyebrow>
<SectionHeader <SectionHeader
as="h3" as="h3"
className="mt-4 text-gray-900 text-xl lg:text-2xl" className="mt-4 text-gray-900 text-3xl lg:text-4xl"
> >
{item.title} {networkUseCases[0].title}
</SectionHeader> </SectionHeader>
<P className="mt-4 text-gray-600 text-sm lg:text-base"> <P className="mt-6 text-lg text-gray-600">
{item.description} {networkUseCases[0].description}
</P> </P>
</>
)}
</div> </div>
{/* slider buttons */} {/* Grid of features (excluding intro) */}
<div className="flex items-center gap-x-4 mt-6"> <ul
<button role="list"
onClick={scrollLeft} className="mx-auto mt-6 max-w-6xl grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 md:gap-y-10 px-6 pb-16"
className="h-8 w-8 flex items-center justify-center
border border-slate-300 rounded-md
hover:border-cyan-500 transition-colors"
> >
<IoArrowBackOutline className="text-gray-600" size={16} /> {networkUseCases.slice(1).map((item, idx) => (
</button> <li
key={idx}
<button className="rounded-2xl border border-gray-200 p-8 transition-all duration-300 ease-in-out hover:scale-[1.03] hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 bg-white"
onClick={scrollRight}
className="h-8 w-8 flex items-center justify-center
border border-slate-300 rounded-md
hover:border-cyan-500 transition-colors"
> >
<IoArrowForwardOutline className="text-gray-600" size={16} /> {/* Icon */}
</button>
</div>
</div>
) : (
/* REGULAR CARD */
<div className="flex flex-col h-full">
{item.icon && ( {item.icon && (
<div className="h-12 w-12 flex items-center justify-center rounded-xl bg-gray-100 mb-6"> <div className="h-10 w-10 flex items-center justify-center rounded-xl bg-gray-100">
<item.icon className="h-6 w-6 text-cyan-600" /> <item.icon className="h-6 w-6 text-cyan-600" />
</div> </div>
)} )}
<p className="text-lg font-semibold text-gray-900"> {/* Title */}
<p className="mt-6 text-lg font-semibold text-gray-900">
{item.title} {item.title}
</p> </p>
<p className="mt-2 text-gray-600 leading-snug"> {/* Description */}
<p className="mt-2 text-gray-600 text-sm leading-snug">
{item.description} {item.description}
</p> </p>
</div>
)}
</li> </li>
))} ))}
</ul> </ul>
</div> </div>
{/* ✅ Bottom horizontal line with spacing */}
{/* Bottom horizontal line */}
<div className="w-full border-b border-gray-100" /> <div className="w-full border-b border-gray-100" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div> <div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div>
</section> </section>
); );
} }

View File

@@ -5,7 +5,8 @@ import { AgentBento } from './AgentBento'
import { AgentHeroAlt } from './AgentHeroAlt' import { AgentHeroAlt } from './AgentHeroAlt'
import { CallToAction } from './CallToAction' import { CallToAction } from './CallToAction'
import { AgentUsecase } from './AgentUseCase' import { AgentUsecase } from './AgentUseCase'
import { AgentDesign } from './AgentDesign'
import { AgentPro } from './AgentPro'
export default function AgentsPage() { export default function AgentsPage() {
return ( return (
@@ -31,7 +32,7 @@ export default function AgentsPage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<AgentDesign /> <AgentPro />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>

View File

@@ -1,47 +1,66 @@
import { Small } from '@/components/Texts' import { Small } from "@/components/Texts";
const highlights = [ const highlights = [
{ {
label: 'Platform Architecture', label: "Local Execution",
title: 'Unified compute, storage & orchestration.', title: "Agents run entirely inside your environment.",
description: description:
'One unified platform for compute, storage, and orchestration.', "Models, logic, and memory stay within your own trusted hardware—never behind third-party APIs.",
}, },
{ {
label: 'Reliability', label: "Mesh Connectivity",
title: 'Consistent performance everywhere.', title: "They communicate peer-to-peer across trusted nodes.",
description: description:
'Runs reliably across distributed environments.', "Agents form direct encrypted paths between environments, without relays or central servers.",
}, },
{ {
label: 'Compatibility', label: "Private Data Access",
title: 'Works with your existing stack.', title: "They use your data without sending it elsewhere.",
description: description:
'Works with your existing tools and workflows.', "Your datasets, embeddings, and context never leave your boundaries—processing stays local.",
}, },
{ {
label: 'Scalability', label: "Portability",
title: 'Grows with your needs.', title: "They move with you, not with a cloud provider.",
description: description:
'Scales from small projects to full environments.', "Agents follow your devices, networks, and workflows, remaining sovereign across every location.",
}, },
] ];
export function CloudPros() { export function AgentPro() {
return ( return (
<section className="relative w-full bg-[#FDFDFD] overflow-hidden"> <section className="relative w-full bg-[#FDFDFD] overflow-hidden">
{/* Top spacing line */} {/* Top spacing line */}
<div className="max-w-7xl bg-[#FDFDFD] mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div> <div className="max-w-7xl bg-[#FDFDFD] mx-auto py-6 border border-t-0 border-b-0 border-gray-100"></div>
<div className="w-full border-t border-l border-r border-gray-100" /> <div className="w-full border-t border-l border-r border-gray-100" />
{/* Intro Block */}
<div className="bg-[#FDFDFD] w-full max-w-7xl mx-auto border border-t-0 border-b-0 border-gray-100"> <div className="bg-[#FDFDFD] w-full max-w-7xl mx-auto border border-t-0 border-b-0 border-gray-100">
<div className="px-8 py-12 max-w-3xl">
<Small className="uppercase tracking-[0.16em] text-cyan-600">
Agent Advantage
</Small>
<h3 className="mt-4 text-2xl lg:text-3xl font-semibold text-black">
Why Its Different
</h3>
<p className="mt-4 text-gray-700 text-base leading-relaxed">
Most AI systems run on centralized clouds, where the models, data, and
logic operate behind third-party APIs. Mycelium Agents flip that
architecturerunning entirely inside your environment so control,
privacy, and autonomy stay with you.
</p>
</div>
{/* Grid */}
<div className="grid lg:grid-cols-4"> <div className="grid lg:grid-cols-4">
{highlights.map((item) => ( {highlights.map((item) => (
<div <div
key={item.title} key={item.title}
className="group relative overflow-hidden border border-gray-100 bg-white p-8 transition hover:border-cyan-400/40 hover:bg-white" className="group relative overflow-hidden border border-gray-100 bg-white p-8 transition hover:border-cyan-400/40 hover:bg-white"
> >
{/* Hover glow */} {/* Glow */}
<div className="absolute inset-0 bg-linear-to-br from-cyan-200/0 via-cyan-100/20 to-cyan-300/20 opacity-0 transition group-hover:opacity-100" /> <div className="absolute inset-0 bg-linear-to-br from-cyan-200/0 via-cyan-100/20 to-cyan-300/20 opacity-0 transition group-hover:opacity-100" />
<div className="relative"> <div className="relative">
@@ -62,8 +81,9 @@ export function CloudPros() {
</div> </div>
</div> </div>
{/* Bottom spacing */}
<div className="w-full border-b border-gray-100 bg-[#FDFDFD]" /> <div className="w-full border-b border-gray-100 bg-[#FDFDFD]" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-100" /> <div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-100" />
</section> </section>
) );
} }