58 Commits

Author SHA1 Message Date
6d186c2304 refactor: remove redundant height constraint from phone frame image 2025-11-06 22:45:10 +01:00
681a7606d5 feat: update outline button styles for cleaner appearance
- Changed background from white/90 to transparent for better visual consistency
- Removed hover state from cyan outline variant to simplify interaction design
2025-11-06 22:45:04 +01:00
0e8de7e7fe refactor: remove unused imports across cloud page components
- Cleaned up unused component imports (CircleBackground, Button, Texts components)
- Removed unused utility function classNames
- Changed button color prop from "dark" to "white" in CallToAction component
2025-11-06 22:42:24 +01:00
3919b72b0c feat: redesign cloud page sections with improved layout and branding
- Added logo assets for featured applications (CryptPad, Gitea, Matrix, Nextcloud, Stalwart, LifeKit)
- Restructured CallToAction, CloudBluePrint, and CloudUseCases components with consistent boxed layouts and border styling
- Enhanced hover effects on architecture layers and use case cards with scale transforms
- Updated button styling and improved responsive grid layouts for better visual hierarchy
2025-11-06 22:39:22 +01:00
f796ec1218 feat: redesign CloudArchitecture section with dark theme and animated icons
- Added animated icon components (MeshNetworkIcon, SovereignComputer, DeterministicOrchestration) to architecture cards
- Updated styling to match dark theme with bordered container layout consistent with HomeHosting section
- Improved card layout with better spacing, hover effects, and visual hierarchy
2025-11-06 22:08:00 +01:00
5af349ad4a refactor: adjust CloudFeaturesLight layout and remove duplicate CloudFeatures section
- Changed vertical alignment from items-start to items-center in desktop grid
- Reduced top margins for better spacing consistency (mt-20→mt-12, mt-16→mt-12)
- Removed redundant CloudFeatures section from CloudPage
2025-11-06 21:49:42 +01:00
6485e1e3ce refactor: remove unused icon components and simplify feature layout
- Removed DeviceUserIcon, DeviceNotificationIcon, and DeviceTouchIcon components that were no longer being used
- Cleaned up unused useId import
- Adjusted spacing in feature titles and tab list padding
2025-11-06 21:48:20 +01:00
e7b33b75c9 feat: add animated transitions to cloud features tabs
- Implemented slide and fade animations when switching between feature tabs using Framer Motion
- Added animated background indicator that follows the selected tab
- Enhanced hover states with scale transitions and outline effects for better interactivity
2025-11-06 21:40:26 +01:00
2e22ed9683 feat: add light-themed cloud features section with boxed layout
- Created CloudFeaturesLight component with desktop/mobile responsive views
- Implemented tabbed interface for feature showcase with hover effects
- Added bordered container layout matching CloudHeroNew design system
2025-11-06 21:39:14 +01:00
15e81cb5cd refactor: adjust CloudHostingNew layout spacing and styling
- Changed image width from full-width to fixed 600px
- Replaced H3 component with native h3 element with responsive text sizing
- Reduced top margin on details section from mt-12 to mt-8
2025-11-06 21:30:17 +01:00
0e6ecedf85 refactor: remove duplicate CloudHosting component from CloudPage 2025-11-06 21:28:42 +01:00
75dd7dfbc5 feat: redesign cloud hero section with new layout and capabilities component
- Updated CloudHeroNew with boxed container layout and improved visual hierarchy
- Added new CloudHostingNew component featuring accordion-style capabilities section with dark theme
- Included new cloud hosting images in webp and png formats
2025-11-06 21:26:48 +01:00
d8ce04252a fix: adjust spacing in bento card grid layout
- Increased gap between cards from 4 to 6 for better visual separation
- Added bottom padding to card content area for improved spacing
2025-11-06 20:50:44 +01:00
c14c0e92d4 chore: remove saved HTML file from images directory 2025-11-06 20:48:43 +01:00
9730129506 feat: add Project Mycelium landing page HTML 2025-11-06 20:39:31 +01:00
8b4e0defb9 refactor: extract bento cards into data-driven component
- Replaced hardcoded card markup with array-based configuration for maintainability
- Added Link components to enable navigation to individual product pages
- Implemented hover animation for improved user interaction
2025-11-06 20:28:13 +01:00
15cc1f70e3 feat: update home page bento grid with custom images
- Replaced placeholder images with custom bento grid assets
- Adjusted image styling and object positioning for better visual presentation
2025-11-06 20:23:35 +01:00
ae3e78f75a refactor: standardize vertical spacing across feature sections
- Reduced py-10 to py-8 for consistent spacing in feature grids and carousels
- Restructured HomeHosting and HomeTab sections with full-width border layout pattern
- Replaced HomeTab card grid with bento-style component showcase layout
2025-11-06 19:46:09 +01:00
7ee6da68fe feat: update homepage layout and color scheme
- Changed background colors from transparent/white to off-white (#fdfdfd) for softer appearance
- Removed HomeBenefits section from homepage to streamline content
- Updated header and hero section backgrounds to use consistent white color
2025-11-06 17:51:49 +01:00
6e2ea7c87c feat: update Explore Docs button color to gray 2025-11-06 15:50:29 +01:00
5f0c749f94 feat: add consistent border styling and improve layout spacing
- Applied border-gray-200 borders to main sections for visual consistency
- Restructured HomeTab component with full-width card grid layout
- Refined spacing and padding across hero, benefits, and hosting sections
2025-11-06 15:45:15 +01:00
b3836062a3 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
2025-11-06 15:00:37 +01:00
b1c59a9b5a feat: redesign home page with new hero and layout
- Replaced abstract aurora background with hero section featuring image background and call-to-action
- Reorganized page sections with new components (HomeHostingDark, HomeBenefits, StackSectionLight)
- Changed layout background from #FAFAFA to white and removed conditional aurora rendering
2025-11-06 14:06:44 +01:00
db92f1271e refactor: remove unused imports from HomePage component 2025-11-06 03:53:03 +01:00
6dc318704a fix: add semi-transparent white background to buttons for better visibility 2025-11-06 03:48:06 +01:00
6304f8fc1d feat: adjust outline button background opacity 2025-11-06 03:47:57 +01:00
d7769a5ecd feat: redesign homepage with new sections and layout
- Added new component sections including globe visualization, statistics dashboard, interactive stack explorer, and product showcase
- Replaced existing homepage sections with updated components featuring improved visual hierarchy and user engagement
- Removed footer border and adjusted hero section spacing for cleaner visual flow
2025-11-06 03:41:26 +01:00
005d8c35d4 feat: redesign hero section with card-based layout
- Updated hero to use bordered card container with subtle shadow for visual hierarchy
- Reduced font sizes and adjusted spacing for better readability and modern aesthetic
- Enhanced button styling with larger padding and improved outline variant hover state
2025-11-06 01:32:55 +01:00
a73608ce6c refactor: extract hero content from aurora background component
- Separated HomeAurora into pure background component and new HomeHero for content
- Converted aurora to absolute positioned background layer in Layout for homepage
- Removed z-index conflicts and cleaned up background color declarations
2025-11-06 01:13:36 +01:00
ef7dc12bc2 feat: update UI styling and add new overview sections
- Changed DarkCard border radius from rounded-3xl to rounded-xl for more subtle styling
- Added ComputeOverview section to compute page
- Replaced StackSectionLight with new StackSectionDark component featuring enhanced aurora effects and improved visual hierarchy
2025-11-06 00:33:57 +01:00
2d856a5858 feat: redesign hero section with cloud background and decorative blobs
- Replaced hero background image with cloud.png and added cyan gradient blobs for visual depth
- Centered hero content with larger typography and improved spacing
- Removed onGetStartedClick callback in favor of direct href navigation
2025-11-05 16:29:20 +01:00
8fac6f8edd refactor: clean up unused imports and fix component naming
- Removed unused component imports across multiple page files
- Fixed component name casing inconsistencies (CalltoAction → CallToAction, NetworkUseCases → NetworkUsecases)
- Changed AgentComponents from default to named export
- Removed stray character in NetworkPage.tsx
2025-11-05 13:10:45 +01:00
560ec7dcd0 feat: add agent components section and update agents page content
- Created AgentComponents table showcasing building blocks of sovereign agents
- Added CallToAction section with deployment and documentation links
- Updated hero and deployment sections to clarify agent layer timeline and current capabilities
2025-11-05 13:02:43 +01:00
aaf02d0a7c feat: update network page messaging and structure
- Revised call-to-action copy to emphasize dual paths: using the network vs hosting nodes
- Reorganized page sections to introduce new NetworkCapabilities and NetworkUsecases components
- Updated roadmap section to reflect active evolution rather than future-focused messaging
2025-11-05 12:52:40 +01:00
b767bdbcb4 refactor: simplify product section content and layout
- Condensed GPU Architecture section from detailed bullet points to concise three-pillar overview
- Removed redundant descriptive paragraphs from Capabilities and Design sections
- Streamlined Network Hero messaging and added standalone/integrated positioning
- Created new NetworkCapabilities component with four-column grid layout
2025-11-05 12:47:18 +01:00
c25f6aaba6 refactor: reorder compute page sections and simplify use cases heading
- Moved ComputeArchitecture and ComputeUseCases sections earlier in the page flow
- Updated use cases section heading to be more concise
- Removed descriptive paragraph from use cases section
2025-11-05 12:20:49 +01:00
2bd3026bac feat: simplify cloud and compute architecture sections
- Condensed architecture explanations to focus on core capabilities rather than implementation details
- Replaced detailed bullet lists with concise descriptions for better readability
- Added new CallToAction component with dual-path user journey (host vs deploy)
2025-11-05 12:17:22 +01:00
88d6a90f60 refactor: streamline home page content and reorder ecosystem components
- Removed comparison table section from home page
- Removed descriptive paragraph from benefits section
- Reordered ecosystem slider to show Cloud, Network, and Agent before Compute resources
2025-11-05 12:08:16 +01:00
8d9f02a846 refactor: clean up unused imports and component exports
- Removed unused component imports across multiple pages (AgentHeroAlt, ComputeHero, CloudPage, GpuPage, StoragePage)
- Changed ComputeDesign export from default to named export for consistency
- Removed CloudDesign section from CloudPage layout
2025-11-04 17:15:07 +01:00
e16456bb94 feat: update GPU CTA section copy and button labels
- Changed heading from "Bring sovereign GPU acceleration to production" to "Choose How You Want to Start"
- Updated description to emphasize dual options: using Mycelium Cloud or contributing GPU nodes
- Renamed buttons to "Deploy GPU Workloads" and "Host A GPU Node" for clearer action paths
2025-11-04 17:03:50 +01:00
388654fcbd refactor: remove unused GPU page sections 2025-11-04 16:50:20 +01:00
865252274c feat: restructure GPU page layout and simplify content presentation
- Reordered sections to improve information flow (Capabilities → Design → Architecture → Overview)
- Simplified use cases and overview sections by removing redundant bullet points
- Added new GpuCapabilities and GpuDesign components with cleaner, more focused messaging
2025-11-04 16:50:15 +01:00
8b892c9432 feat: simplify GPU hero section messaging
- Replaced technical jargon with clearer value proposition focused on accessibility and control
- Streamlined copy to emphasize practical benefits (no waitlists, transparent pricing, flexible deployment)
- Updated CTA button labels for better clarity ("How it works" and "Explore Docs")
2025-11-04 16:43:37 +01:00
7f9023c631 feat: simplify storage page messaging and structure
- Streamlined call-to-action to focus on cloud vs. self-hosted options
- Condensed architecture and use cases sections to remove excessive detail
- Reorganized page component order and added new capability/design sections
2025-11-04 16:23:57 +01:00
f3456eb470 feat: update storage hero section messaging and CTAs
- Simplified headline to emphasize sovereignty, self-healing, and multi-protocol access
- Streamlined description to focus on core value proposition of encrypted, quantum-safe storage
- Updated button labels for clearer user navigation (Features → How It Works, Developer Flow → Explore Docs)
2025-11-04 16:12:07 +01:00
46272e939d feat: simplify compute and cloud page content
- Streamlined ComputeFeatures and ComputeUseCases to focus on high-level benefits rather than detailed bullet points
- Updated ComputeHero messaging to emphasize deterministic control and self-verification
- Revised CallToAction to clarify deployment vs hosting options
- Added CloudDesign and ComputeCapabilities/ComputeDesign sections to page layouts
2025-11-04 16:06:13 +01:00
0daabe56f5 feat: replace SecurityPillars with CloudBluePrint component and reorder sections
- Removed CloudGettingStarted section from the page
- Replaced SecurityPillars with new CloudBluePrint component
- Adjusted section ordering to improve page flow
2025-11-04 15:16:50 +01:00
85afc05c35 feat: update cloud use cases with enterprise and edge focus
- Reframed use cases to emphasize sovereignty, workload ownership, and distributed deployment
- Replaced AI/ML training and DigitalMe Blueprint sections with enterprise Kubernetes and AI/agent workloads
- Updated descriptions and feature bullets to highlight compliance, mesh networking, and autonomous capabilities
2025-11-04 15:16:43 +01:00
866e1df042 feat: add Cloud Blueprint landing section with logo showcase 2025-11-04 15:16:32 +01:00
28ea2ab49d feat: clarify cloud infrastructure independence in features section 2025-11-04 14:06:29 +01:00
1f11ca5319 feat: update cloud hosting capabilities section with audience-focused messaging
- Reorganized features to target specific user personas (DevOps, Security, Data, AI/ML teams)
- Updated feature descriptions to emphasize technical benefits and security posture
- Changed section eyebrow from "DEPLOY" to "CAPABILITIES" for clearer positioning
2025-11-04 14:05:27 +01:00
3e99e85e48 feat: enhance CloudHero messaging and formatting
- Added tagline "Works Alone. Works Together." with explanation of Mycelium Cloud's flexibility
- Simplified "Explore Docs" button text to "Documentation"
- Fixed indentation for improved code readability
2025-11-04 14:01:17 +01:00
b39694ea24 feat: update CTA button text from "Start Deployment" to "Get Started" 2025-11-04 13:35:53 +01:00
363b822d8b feat: refine benefits section messaging and ordering
- Reordered features to lead with "Unbreakable by Design" for stronger impact
- Simplified benefit descriptions for clarity and conciseness
- Updated section heading from "Why It Changes Everything" to "Why It Matters"
2025-11-04 13:35:22 +01:00
00802c7064 feat: reorder slider items and update ecosystem messaging
- Moved Compute/Storage/GPU to first position in slider
- Updated heading from "Mycelium Products" to "Mycelium Components"
- Changed description to emphasize Agents instead of "intelligent automation"
2025-11-04 13:33:53 +01:00
e45ca7c86f feat: reorder HomeSlider section before HomeBenefits 2025-11-04 13:33:47 +01:00
664897ee19 refactor: simplify StackSection description text 2025-11-04 13:31:29 +01:00
91d249f097 feat: update homepage content and section ordering
- Revised hosting section description to emphasize decentralized grid and user control
- Swapped order of StackSectionLight and HomeHostingDark sections
- Enhanced Kubernetes feature description with additional context
2025-11-04 13:29:37 +01:00
138 changed files with 3307 additions and 1098 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB

BIN
public/images/bento-gpu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
public/images/bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
public/images/bg2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
public/images/cloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
public/images/testpic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -3,9 +3,9 @@ import clsx from 'clsx'
const baseStyles = { const baseStyles = {
solid: solid:
'inline-flex justify-center rounded-full py-2 px-4 text-sm font-semibold transition-colors', 'inline-flex justify-center rounded-full py-2 px-5 text-base font-semibold transition-colors',
outline: outline:
'inline-flex justify-center rounded-full border py-[calc(--spacing(2)-1px)] px-[calc(--spacing(4)-1px)] text-sm transition-colors', 'inline-flex justify-center bg-transparent rounded-full border py-[calc(--spacing(2)-1px)] px-[calc(--spacing(5)-1px)] text-base transition-colors',
} }
const variantStyles = { const variantStyles = {
@@ -17,7 +17,7 @@ const variantStyles = {
green: 'bg-green-500 text-white hover:bg-green-600', green: 'bg-green-500 text-white hover:bg-green-600',
}, },
outline: { outline: {
cyan: 'border-cyan-500 text-cyan-500 hover:bg-cyan-50', cyan: 'border-cyan-500 text-cyan-500',
gray: 'border-gray-300 text-gray-700 hover:border-cyan-500 active:border-cyan-500', gray: 'border-gray-300 text-gray-700 hover:border-cyan-500 active:border-cyan-500',
white: 'border-gray-300 text-white hover:border-cyan-500 active:border-cyan-500', white: 'border-gray-300 text-white hover:border-cyan-500 active:border-cyan-500',
}, },

View File

@@ -3,7 +3,7 @@ import { Container } from './Container'
export function Footer() { export function Footer() {
return ( return (
<footer className="border-t border-gray-200"> <footer className="">
<Container> <Container>
<div className="flex flex-col items-start justify-between gap-y-12 pt-16 pb-6 lg:flex-row lg:items-center lg:py-8"> <div className="flex flex-col items-start justify-between gap-y-12 pt-16 pb-6 lg:flex-row lg:items-center lg:py-8">
<div> <div>

View File

@@ -26,9 +26,9 @@ export function Header() {
}; };
return ( return (
<header> <header className="bg-white">
<nav> <nav className="border-b border-gray-200">
<Container className="relative z-50 flex justify-between py-4"> <Container className="flex bg-transparent justify-between py-4">
<div className="relative z-10 flex items-center gap-16"> <div className="relative z-10 flex items-center gap-16">
<Link to="/" aria-label="Home"> <Link to="/" aria-label="Home">
<img src={pmyceliumLogo} alt="Mycelium" className="h-8 w-auto" /> <img src={pmyceliumLogo} alt="Mycelium" className="h-8 w-auto" />

View File

@@ -5,12 +5,14 @@ import { Header } from './Header'
export function Layout() { export function Layout() {
return ( return (
<div className="bg-white antialiased" style={{ fontFamily: 'var(--font-inter)' }}> <div className="bg-[#fdfdfd] antialiased relative" style={{ fontFamily: 'var(--font-inter)' }}>
<div className="relative z-10">
<Header /> <Header />
<main className=""> <main>
<Outlet /> <Outlet />
</main> </main>
<Footer /> <Footer />
</div> </div>
</div>
) )
} }

View File

@@ -59,7 +59,7 @@ export default function FeaturesSectionDemo() {
}, },
]; ];
return ( return (
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 relative z-10 py-10 max-w-7xl mx-auto"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 relative z-10 py-8 max-w-7xl mx-auto">
{features.map((feature, index) => ( {features.map((feature, index) => (
<Feature key={feature.title} {...feature} index={index} /> <Feature key={feature.title} {...feature} index={index} />
))} ))}
@@ -81,7 +81,7 @@ const Feature = ({
return ( return (
<div <div
className={cn( className={cn(
"flex flex-col lg:border-r py-10 relative group/feature dark:border-neutral-800", "flex flex-col lg:border-r py-8 relative group/feature dark:border-neutral-800",
(index === 0 || index === 4) && "lg:border-l dark:border-neutral-800", (index === 0 || index === 4) && "lg:border-l dark:border-neutral-800",
index < 4 && "lg:border-b dark:border-neutral-800" index < 4 && "lg:border-b dark:border-neutral-800"
)} )}

View File

@@ -40,7 +40,7 @@ export default function FeaturesSectionDemo() {
}, },
]; ];
return ( return (
<div className="relative z-20 py-10 lg:py-40 max-w-7xl mx-auto"> <div className="relative z-20 py-8 lg:py-40 max-w-7xl mx-auto">
<div className="px-8"> <div className="px-8">
<h4 className="text-3xl lg:text-5xl lg:leading-tight max-w-5xl mx-auto text-center tracking-tight font-medium text-black dark:text-white"> <h4 className="text-3xl lg:text-5xl lg:leading-tight max-w-5xl mx-auto text-center tracking-tight font-medium text-black dark:text-white">
Packed with thousands of features Packed with thousands of features

View File

@@ -62,7 +62,7 @@ export const Carousel = ({ items, initialScroll = 0 }: CarouselProps) => {
return ( return (
<div className="relative w-full"> <div className="relative w-full">
<div <div
className="flex w-full overflow-x-scroll overscroll-x-auto scroll-smooth py-10 [scrollbar-width:none] md:py-20" className="flex w-full overflow-x-scroll overscroll-x-auto scroll-smooth py-8 [scrollbar-width:none] md:py-20"
ref={carouselRef} ref={carouselRef}
onScroll={checkScrollability} onScroll={checkScrollability}
> >
@@ -135,7 +135,7 @@ export const Card = ({
layoutId={layout ? `card-${card.title}` : undefined} layoutId={layout ? `card-${card.title}` : undefined}
className="relative z-10 flex h-104 w-80 flex-col justify-between overflow-hidden rounded-3xl p-8 md:h-120 md:w-96" className="relative z-10 flex h-104 w-80 flex-col justify-between overflow-hidden rounded-3xl p-8 md:h-120 md:w-96"
> >
<div className="flex h-2/5 flex-col justify-center py-6 px-4"> <div className="flex h-2/5 flex-col justify-center py-4 px-4">
<motion.p <motion.p
layoutId={layout ? `category-${card.category}` : undefined} layoutId={layout ? `category-${card.category}` : undefined}
className="text-left font-sans font-semibold text-cyan-500 uppercase tracking-wider text-xs md:text-sm" className="text-left font-sans font-semibold text-cyan-500 uppercase tracking-wider text-xs md:text-sm"

View File

@@ -8,7 +8,7 @@ const DarkCard = React.forwardRef<
<div <div
ref={ref} ref={ref}
className={cn( className={cn(
"border border-white/10 bg-white/3 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 rounded-3xl hover:bg-white/6 hover:scale-105 hover:shadow-lg hover:shadow-cyan-500/15", "border border-white/10 bg-white/3 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 rounded-xl hover:bg-white/6 hover:scale-105 hover:shadow-lg hover:shadow-cyan-500/15",
className className
)} )}
{...props} {...props}

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 KiB

BIN
src/images/bento-gpu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/images/cloudhosting.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@@ -6,9 +6,7 @@
line-height: 1.5; line-height: 1.5;
font-weight: 400; font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87); color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none; font-synthesis: none;
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;
@@ -60,7 +58,6 @@ button:focus-visible {
@media (prefers-color-scheme: light) { @media (prefers-color-scheme: light) {
:root { :root {
color: #213547; color: #213547;
background-color: #ffffff;
} }
a:hover { a:hover {
color: #747bff; color: #747bff;

View File

@@ -0,0 +1,75 @@
import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader } from '@/components/Texts'
const components = [
{
component: 'Long-Term Memory (FungiStor)',
purpose: 'Durable, distributed memory with erasure-coded resilience',
backedBy: 'Mycelium Storage',
},
{
component: 'Active Retrieval (HeroDB)',
purpose: 'Fast multimodal vector + keyword retrieval',
backedBy: 'Compute + Storage',
},
{
component: 'Secure Agent Workspaces (MOS Sandboxes)',
purpose: 'Ephemeral, isolated execution for agent actions',
backedBy: 'Mycelium Compute',
},
{
component: 'Private Communication (Mycelium Mesh)',
purpose: 'Peer-to-peer encrypted network',
backedBy: 'Mycelium Network',
},
{
component: 'Verifiable Execution (Deterministic Deploy)',
purpose: 'Ensure the code running is exactly what you signed',
backedBy: 'The Stack',
},
{
component: 'Agent Coordination Engine (coming online next)',
purpose: 'Orchestrate multi-step workflows and tool use',
backedBy: 'Hero Orchestrator',
},
]
export function AgentComponents() {
return (
<section className="bg-white py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl text-center">
<Eyebrow>AGENT COMPONENTS</Eyebrow>
<SectionHeader as="h2" className="mt-6 text-gray-900">
The Building Blocks of Sovereign Agents
</SectionHeader>
</div>
<div className="mx-auto mt-16 max-w-6xl overflow-x-auto">
<table className="w-full table-auto border-collapse text-left text-sm text-gray-700">
<thead>
<tr className="bg-cyan-50 border-b border-gray-200">
<th className="py-3 px-4 font-semibold text-gray-900">Component</th>
<th className="py-3 px-4 font-semibold text-gray-900">Purpose</th>
<th className="py-3 px-4 font-semibold text-gray-900">Backed By</th>
</tr>
</thead>
<tbody>
{components.map((item) => (
<tr
key={item.component}
className="border-b border-gray-100 hover:bg-cyan-50/40 transition"
>
<td className="py-4 px-4 font-medium text-gray-900">{item.component}</td>
<td className="py-4 px-4">{item.purpose}</td>
<td className="py-4 px-4 text-cyan-700 font-medium">{item.backedBy}</td>
</tr>
))}
</tbody>
</table>
</div>
</Container>
</section>
)
}

View File

@@ -1,7 +1,7 @@
'use client' 'use client'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
import { Eyebrow, SectionHeader, P, H3 } from '../../components/Texts' import { Eyebrow, P, H3 } from '@/components/Texts'
export function AgentHeroAlt() { export function AgentHeroAlt() {
return ( return (
@@ -16,14 +16,21 @@ export function AgentHeroAlt() {
</div> </div>
<div className="relative mx-auto max-w-7xl py-24 sm:py-32 lg:px-8"> <div className="relative mx-auto max-w-7xl py-24 sm:py-32 lg:px-8">
<div className="pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24 xl:pr-32"> <div className="pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24 xl:pr-32">
<Eyebrow className="text-base/7 font-semibold text-cyan-500">AGENT</Eyebrow> <Eyebrow className="text-base/7 font-semibold text-cyan-500">MYCELIUM AGENTS</Eyebrow>
<H3 as="h1" className="mt-2 text-gray-900">Sovereign AI Agents, Coming Soon.</H3> <H3 as="h1" className="mt-2 text-gray-900">Sovereign AI Agents, Coming Soon.</H3>
<P className="mt-6 text-gray-600"> <P className="mt-6 text-gray-600">
Hero is the autonomous agent layer for the Mycelium platformtrusted, policy-aware AI that runs on infrastructure you control and remembers what matters. The Agent layer will allow you to run autonomous, policy-governed AI that operates on infrastructure you control, with private memory, verifiable execution, and coordination across your personal or organizational environment.
</P>
<P className="mt-6 text-gray-600">
Works Alone. Works Together.
Use Agents on top of any Mycelium Cloud deployment or pair them with the Mycelium Network for private, encrypted collaboration across users and systems.
</P> </P>
<div className="mt-8"> <div className="mt-8">
<Button href="#" variant="solid" color="cyan"> <Button href="#" variant="solid" color="cyan">
Join the Waitlist Follow Deployment
</Button>
<Button href="#" variant="outline" color="white">
Explore Docs
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -4,6 +4,8 @@ import { GallerySection } from './GallerySection'
import { Companies } from './Companies' import { Companies } from './Companies'
import { BentoSection } from './BentoSection' import { BentoSection } from './BentoSection'
import { AgentHeroAlt } from './AgentHeroAlt' import { AgentHeroAlt } from './AgentHeroAlt'
import { CallToAction } from './CallToAction'
import { AgentComponents } from './AgentComponents'
export default function AgentsPage() { export default function AgentsPage() {
return ( return (
@@ -27,6 +29,14 @@ export default function AgentsPage() {
<AnimatedSection> <AnimatedSection>
<BentoSection /> <BentoSection />
</AnimatedSection> </AnimatedSection>
<AnimatedSection>
<AgentComponents />
</AnimatedSection>
<AnimatedSection>
<CallToAction />
</AnimatedSection>
</div> </div>
) )
} }

View File

@@ -1,6 +1,6 @@
import { motion } from 'framer-motion' import { motion } from 'framer-motion'
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P, CT, CP } from '../../components/Texts' import { Eyebrow, SectionHeader, P, CT, CP } from '@/components/Texts'
const items = [ const items = [
{ {
@@ -19,7 +19,7 @@ const items = [
title: 'MOS Sandboxes', title: 'MOS Sandboxes',
subtitle: 'Secure Agent Workspaces', subtitle: 'Secure Agent Workspaces',
description: 'Attested, signed workspaces spin up ≈5s worldwide—ready to execute. Hardware isolation and scoped egress: run hard, tear down clean, zero residue.', description: 'Attested, signed workspaces spin up ≈5s worldwide—ready to execute. Hardware isolation and scoped egress: run hard, tear down clean, zero residue.',
video: '/videos/sandbox.mp4', video: '/videos/herodb.mp4',
}, },
{ {
title: 'Mycelium Mesh', title: 'Mycelium Mesh',

View File

@@ -0,0 +1,59 @@
import { CircleBackground } from '../../components/CircleBackground'
import { Container } from '@/components/Container'
import { Button } from '@/components/Button'
export function CallToAction() {
return (
<section
id="get-started"
className="relative overflow-hidden bg-gray-900 py-20 sm:py-28"
>
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<CircleBackground color="#06b6d4" className="animate-spin-slower" />
</div>
<Container className="relative">
<div className="mx-auto max-w-2xl text-center">
<h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
Start Building the Future of Sovereign AI
</h2>
<p className="mt-6 text-lg text-gray-300">
Use todays components models, storage, compute, mesh
and step into agents as they arrive.
</p>
<div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4">
<Button
as="a"
to="/deploy"
variant="solid"
color="white"
>
Deploy a Model
</Button>
<Button
as="a"
to="/host"
variant="outline"
color="white"
>
Host a Node
</Button>
<Button
as="a"
to="https://threefold.info/mycelium_network/docs/"
target="_blank"
rel="noreferrer"
variant="outline"
color="white"
>
Follow Development
</Button>
</div>
</div>
</Container>
</section>
)
}

View File

@@ -55,12 +55,12 @@ export function DeploySection() {
transition={{ duration: 0.6, ease: "easeOut", delay: 0.1 }} transition={{ duration: 0.6, ease: "easeOut", delay: 0.1 }}
className="mx-auto max-w-5xl text-center" className="mx-auto max-w-5xl text-center"
> >
<Eyebrow color="accent">Get Started</Eyebrow> <Eyebrow color="accent">Deployment</Eyebrow>
<SectionHeader className="text-3xl font-medium tracking-tight" color="light"> <SectionHeader className="text-3xl font-medium tracking-tight" color="light">
Deploy Scalable LLMs and AI Agents Run LLMs and Agent Workloads privately, today.
</SectionHeader> </SectionHeader>
<P className="mt-6" color="light"> <P className="mt-6" color="light">
Launch and scale intelligence on your own terms. Mycelium Cloud makes it simple to deploy models, integrate knowledge, and run everything on a network you control. Even before the full Agent layer launches, you can deploy models and retrieval pipelines using Mycelium Cloud.
</P> </P>
</motion.div> </motion.div>
<motion.ul <motion.ul

View File

@@ -53,14 +53,13 @@ export function GallerySection() {
<FadeIn transition={{ duration: 0.8, delay: 0.1 }}> <FadeIn transition={{ duration: 0.8, delay: 0.1 }}>
<div className="mx-auto max-w-5xl lg:mt-12"> <div className="mx-auto max-w-5xl lg:mt-12">
<Eyebrow color="accent">Use Cases</Eyebrow> <Eyebrow color="accent">Use Cases</Eyebrow>
<SectionHeader className="text-center" color="dark">Agents with Endless Possibilities.</SectionHeader> <SectionHeader className="text-center" color="dark">What Agents Will Enable</SectionHeader>
</div> </div>
</FadeIn> </FadeIn>
<FadeIn transition={{ duration: 0.8, delay: 0.2 }}> <FadeIn transition={{ duration: 0.8, delay: 0.2 }}>
<div className="mx-auto max-w-4xl mt-6 lg:px-0 px-4"> <div className="mx-auto max-w-4xl mt-6 lg:px-0 px-4">
<P className="text-center" color="dark"> <P className="text-center" color="dark">
Your private agent coordinates a team of specialists that spin up on demand, collaborate across your world, and deliver end-to-end results. The Agent layer is the coordination layer that sits on top of the Mycelium Stack, combining memory, execution, and secure communication into a single intelligence plane.
Many agents, one intelligenceyours.
</P> </P>
</div> </div>
</FadeIn> </FadeIn>

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

@@ -0,0 +1,55 @@
"use client";
import { Container } from "@/components/Container";
import { Button } from "@/components/Button";
export function CallToAction() {
return (
<section className="relative overflow-hidden bg-gray-900">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-[#090909] mx-auto py-6 border border-t-0 border-b-0 border-gray-700"></div>
<div className="w-full border-t border-l border-r border-gray-700" />
{/* ✅ Main boxed area */}
<div
id="get-started"
className="relative py-18 max-w-7xl mx-auto bg-[#090909] border border-t-0 border-b-0 border-gray-700"
>
<Container className="relative">
<div className="mx-auto max-w-3xl text-center">
<h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
Choose How You Want to Start
</h2>
<p className="mt-6 text-lg text-gray-300">
Host your own node to contribute capacity or deploy workloads using the Mycelium Cloud.
You dont need to host before deploying, and you dont need to deploy before hosting.
</p>
{/* ✅ Two cards, stacked center with spacing */}
<div className="mt-10 flex flex-wrap justify-center gap-x-10 gap-y-8">
<div className="flex flex-col items-center text-center max-w-xs">
<Button to="/host" variant="solid" color="cyan" className="mt-4">
Host a Node
</Button>
</div>
<div className="flex flex-col items-center text-center max-w-xs">
<Button to="/cloud" variant="outline" color="white" className="mt-4">
Start Deploying
</Button>
</div>
</div>
</div>
</Container>
</div>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-700" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-700 bg-transparent" />
</section>
);
}

View File

@@ -1,92 +1,90 @@
import { Container } from '../../components/Container' 'use client';
import { Eyebrow, H3, P } from '../../components/Texts'
const architectureSections = [ import { Container } from '@/components/Container'
import { Eyebrow, H3, P } from '@/components/Texts'
import { Button } from '@/components/Button'
import { MeshNetworkIcon } from './animations/MeshNetworkIcon'
import { SovereignComputer } from './animations/SovereignComputer'
import { DeterministicOrchestration } from './animations/DeterministicOrchestration'
const architecture = [
{ {
title: 'Decentralized Infrastructure', title: 'Mesh Networking Layer',
description: description:
'Clusters launch across the ThreeFold Grid with direct node access and encrypted connectivity.', 'Every node receives a cryptographic network identity and secure routing path.',
bullets: [ icon: <MeshNetworkIcon className="mb-4" />, // ✅ stored as const JSX
'Unique Mycelium IP addresses assigned to every node.',
'Peer-to-peer mesh networking links services across nodes.',
'End-to-end encryption keeps traffic sealed inside the fabric.',
'No public IP exposure—everything is addressable via Mycelium IPs.',
],
}, },
{ {
title: 'Network Flow', title: 'Sovereign Compute Layer',
description: description:
'Traffic moves through the Mycelium mesh, maintaining sovereignty without sacrificing reach.', 'Workloads run on hardware you authorize, no shared control, no exposed surfaces.',
bullets: [ icon: <SovereignComputer className="mb-4" />,
'User requests enter through the encrypted Mycelium network.',
'Traffic routes directly to cluster nodes without intermediate hops.',
'Services answer over the same mesh—no ingress controller required.',
'Operational visibility without exposing public attack surface.',
],
}, },
{ {
title: 'Kubernetes Management', title: 'Deterministic Orchestration',
description: description:
'Lightweight K3s orchestration delivers HA clusters with automated lifecycle management.', 'K3s clusters deploy predictably, verifiably, and remain drift-free.',
bullets: [ icon: <DeterministicOrchestration className="mb-4" />,
'Full K3s deployment and lifecycle management built-in.',
'IPv6-native networking ensures deterministic service discovery.',
'Multi-master topologies with automatic failover for resilience.',
'Drift-free upgrades orchestrated through smart contracts.',
],
}, },
] ]
export function CloudArchitecture() { export function CloudArchitecture() {
return ( return (
<section className="bg-white py-24 lg:py-32"> <section className="bg-[#121212] w-full max-w-8xl mx-auto">
{/* ✅ Top horizontal spacer like HomeHosting */}
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800 bg-transparent" />
<div className="w-full border-t border-l border-r border-gray-800" />
{/* ✅ Boxed container with matching spacing */}
<div className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-800 bg-[#111111] py-12">
<Container> <Container>
<div className="mx-auto max-w-5xl text-center"> <div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow> <Eyebrow className="text-cyan-400">ARCHITECTURE</Eyebrow>
Technical Architecture
</Eyebrow> <H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-white">
<H3 className="mt-6 text-gray-900"> How Mycelium Cloud Works
Built on a Sovereign, Encrypted Delivery Mesh.
</H3> </H3>
<P className="mt-6 text-gray-600">
Mycelium Cloud rides on the ThreeFold Grid, pairing encrypted mesh <P className="mt-6 text-lg text-gray-300">
networking with deterministic K3s orchestration. Every layer is Mycelium Cloud runs Kubernetes on a global encrypted mesh, with
designed to keep workloads sovereign, observable, and effortless to identity, routing, and state verified at the protocol level.
operate.
</P> </P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-3">
{architectureSections.map((section) => ( {/* ✅ Card layout spacing & grid match HomeHosting */}
<div <ul
key={section.title} role="list"
className="flex h-full flex-col rounded-3xl border border-slate-200 bg-gray-50/25 p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg " className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-6 text-sm
sm:grid-cols-2 lg:max-w-none lg:grid-cols-3 md:gap-y-10 "
> >
<div className="flex items-center gap-3"> {architecture.map((layer) => (
<span className="inline-flex size-10 items-center justify-center rounded-full bg-cyan-500/10 text-base font-semibold uppercase tracking-[0.3em] text-cyan-600">
</span>
<h3 className="text-xl font-semibold text-gray-900">
{section.title}
</h3>
</div>
<p className="mt-4 text-sm leading-relaxed text-gray-600">
{section.description}
</p>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{section.bullets.map((bullet) => (
<li <li
key={bullet} key={layer.title}
className="flex items-start gap-3 rounded-2xl border border-cyan-100 bg-cyan-50/60 p-3 leading-relaxed" className="rounded-xl border border-gray-800 bg-[#111]/60 p-6 hover:transform-[scale(1.05)]"
> >
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" /> {layer.icon} {/* ✅ this now works */}
<span>{bullet}</span> <h3 className="text-lg font-semibold text-white">{layer.title}</h3>
<p className="mt-2 text-gray-400 leading-snug">{layer.description}</p>
</li> </li>
))} ))}
</ul> </ul>
</div>
))} {/* ✅ Matching button spacing and layout */}
<div className="mx-auto mt-12 flex justify-center gap-6">
<Button variant="solid" color="cyan" href="/start">
Get Started
</Button>
<Button variant="outline" color="gray" href="/docs">
Explore Docs
</Button>
</div> </div>
</Container> </Container>
</div>
{/* ✅ bottom border + bottom spacer to match */}
<div className="w-full border-b border-gray-800" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-800 bg-transparent" />
</section> </section>
) )
} }

View File

@@ -0,0 +1,61 @@
"use client";
import { Container } from "@/components/Container";
import { H3, P, Eyebrow } from "@/components/Texts";
export function CloudBluePrint() {
const logos = [
{ src: '/images/logo/cryptpad.png', href: 'https://cryptpad.fr' },
{ src: '/images/logo/gitea.png', href: 'https://about.gitea.com' },
{ src: '/images/logo/lifekit.png', href: '#' }, // No link available
{ src: '/images/logo/matrix.png', href: 'https://matrix.org' },
{ src: '/images/logo/nextcloud.png', href: 'https://nextcloud.com' },
{ src: '/images/logo/stalwart.png', href: 'https://stalw.art' },
];
return (
<section className="w-full max-w-8xl mx-auto bg-transparent">
{/* ✅ Boxed container */}
<div className="max-w-7xl bg-white mx-auto pb-12 border border-t-0 border-b-0 border-gray-200">
<Container>
<div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow className="text-cyan-500">Featured Blueprint</Eyebrow>
<H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-gray-900 mt-2">
Your Personal Sovereign Cloud Workspace
</H3>
<P className="mt-6 text-lg text-gray-600">
Digital Me is an example environment built to demonstrate whats possible on top of the Mycelium Stack a full personal cloud you can deploy, customize, or extend. Your files, communication, apps, and optional AI agent, all running privately on infrastructure you choose.
</P>
</div>
{/* ✅ 3x2 logo grid */}
<div className="mt-12 grid grid-cols-3 gap-x-8 gap-y-12">
{logos.map((logo, i) => (
<div key={i} className="flex justify-center">
<a
href={logo.href}
target="_blank"
rel="noopener noreferrer"
className="transition-transform duration-300 hover:scale-105"
>
<img
src={logo.src}
alt={`Logo ${i + 1}`}
className="max-h-12 w-auto object-contain"
/>
</a>
</div>
))}
</div>
</Container>
</div>
{/* ✅ Bottom line + bottom spacer */}
<div className="w-full border-b border-gray-200" />
<div className="max-w-7xl mx-auto py-6 border border-t-0 border-b-0 border-gray-200 bg-transparent" />
</section>
);
}

View File

@@ -354,7 +354,7 @@ function CloudFeaturesMobile() {
> >
<div <div
className={clsx( className={clsx(
'relative transform overflow-hidden rounded-2xl bg-gray-800 px-5 py-6 outline-2 transition-colors', 'relative transform overflow-hidden rounded-2xl bg-gray-800 px-5 py-4 outline-2 transition-colors',
activeIndex === featureIndex activeIndex === featureIndex
? 'outline-transparent' // Remove outline for active mobile slide ? 'outline-transparent' // Remove outline for active mobile slide
: 'outline-transparent hover:outline-cyan-500', : 'outline-transparent hover:outline-cyan-500',
@@ -415,7 +415,7 @@ export function CloudFeatures() {
A Decentralized Cloud that Operates Itself A Decentralized Cloud that Operates Itself
</SectionHeader> </SectionHeader>
<P color="light" className="mt-6"> <P color="light" className="mt-6">
Mycelium Cloud runs Kubernetes on a sovereign, self-healing network. Storage, networking, and compute are all integrated. Mycelium Cloud runs Kubernetes on a sovereign, self-healing network with compute, storage, and networking built in, so you dont need external cloud dependencies.
</P> </P>
</div> </div>
</Container> </Container>

View File

@@ -0,0 +1,283 @@
'use client'
import { Fragment, useEffect, useRef, useState } from 'react'
import { Tab, TabGroup, TabList, TabPanel, TabPanels } from '@headlessui/react'
import clsx from 'clsx'
import {
type MotionProps,
type Variant,
AnimatePresence,
motion,
} from 'framer-motion'
import { useDebouncedCallback } from 'use-debounce'
import {
Eyebrow,
FeatureDescription,
FeatureTitle,
MobileFeatureTitle,
P,
SectionHeader,
} from '@/components/Texts'
import { Container } from '@/components/Container'
import reservenodeimg from '/images/cloud/reserve.png'
import billingImg from '/images/cloud/billing.png'
import kubeconfigImg from '/images/cloud/kubeconfig.png'
/* Feature Data */
const features = [
{
name: 'Decentralized Kubernetes',
description:
"Reserve a node and deploy sovereign Kubernetes clusters on decentralized infrastructure.",
screen: () => (
<img
src={reservenodeimg}
className="rounded-xl shadow-xl ring-1 ring-gray-300"
/>
),
},
{
name: 'Manage Your Cluster',
description:
'Manage your cluster with ease, with a simple and intuitive interface.',
screen: () => (
<img
src={kubeconfigImg}
className="rounded-xl shadow-xl ring-1 ring-gray-300"
/>
),
},
{
name: 'Personalised Billings & Accounts',
description:
'Easily manage your cluster billing and accounts with personalised configurations.',
screen: () => (
<img
src={billingImg}
className="rounded-xl shadow-xl ring-1 ring-gray-300"
/>
),
},
]
interface CustomAnimationProps {
isForwards: boolean
changeCount: number
}
const maxZIndex = 2147483647
const bodyVariantBackwards: Variant = {
opacity: 0.4,
scale: 0.8,
zIndex: 0,
filter: 'blur(4px)',
transition: { duration: 0.4 },
}
const bodyAnimation: MotionProps = {
initial: 'initial',
animate: 'animate',
exit: 'exit',
variants: {
initial: (custom: CustomAnimationProps) =>
custom.isForwards
? {
y: '100%',
zIndex: maxZIndex - custom.changeCount,
transition: { duration: 0.4 },
}
: bodyVariantBackwards,
animate: (custom: CustomAnimationProps) => ({
y: '0%',
opacity: 1,
scale: 1,
zIndex: maxZIndex / 2 - custom.changeCount,
filter: 'blur(0px)',
transition: { duration: 0.4 },
}),
exit: (custom: CustomAnimationProps) =>
custom.isForwards
? bodyVariantBackwards
: {
y: '100%',
zIndex: maxZIndex - custom.changeCount,
transition: { duration: 0.4 },
},
},
}
function usePrevious<T>(value: T) {
const ref = useRef<T>()
useEffect(() => {
ref.current = value
}, [value])
return ref.current
}
/* Desktop Component */
function CloudFeaturesDesktop() {
let [changeCount, setChangeCount] = useState(0)
let [selectedIndex, setSelectedIndex] = useState(0)
let prevIndex = usePrevious(selectedIndex)
let isForwards = prevIndex === undefined ? true : selectedIndex > prevIndex
let onChange = useDebouncedCallback(
(selectedIndex: number) => {
setSelectedIndex(selectedIndex)
setChangeCount((changeCount) => changeCount + 1)
},
100,
{ leading: true },
)
return (
<TabGroup
vertical
className="grid grid-cols-12 items-center gap-10"
selectedIndex={selectedIndex}
onChange={onChange}
>
<TabList className="col-span-6 space-y-6 pl-4 lg:pl-6">
{features.map((feature, featureIndex) => (
<div
key={feature.name}
className={clsx(
'relative rounded-2xl outline-2 transition-all duration-300 ease-in-out hover:scale-105 hover:bg-gray-100',
selectedIndex === featureIndex
? 'outline-cyan-500'
: 'outline-transparent hover:outline-cyan-500',
)}
>
{featureIndex === selectedIndex && (
<motion.div
layoutId="activeBackground"
className="absolute inset-0 bg-white shadow"
initial={{ borderRadius: 16 }}
/>
)}
<div className="relative z-10 p-8">
<FeatureTitle as="h3" className="text-gray-900">
<Tab className="text-left data-selected:not-data-focus:outline-hidden">
<span className="absolute inset-0 rounded-2xl" />
{feature.name}
</Tab>
</FeatureTitle>
<FeatureDescription className="mt-2 text-gray-600">
{feature.description}
</FeatureDescription>
</div>
</div>
))}
</TabList>
<div className="relative col-span-6">
<TabPanels as={Fragment}>
<AnimatePresence
initial={false}
custom={{ isForwards, changeCount }}
>
{features.map((feature, featureIndex) =>
selectedIndex === featureIndex ? (
<TabPanel
static
key={feature.name + changeCount}
className="col-start-1 row-start-1 flex focus:outline-offset-32 data-selected:not-data-focus:outline-hidden"
>
<motion.div
{...bodyAnimation}
custom={{ isForwards, changeCount }}
className="w-full flex justify-center"
>
<feature.screen />
</motion.div>
</TabPanel>
) : null,
)}
</AnimatePresence>
</TabPanels>
</div>
</TabGroup>
)
}
/* Mobile Version */
function CloudFeaturesMobile() {
return (
<>
<div className="flex snap-x overflow-x-auto space-x-4 pb-4 scrollbar-hide">
{features.map((feature, i) => (
<div key={i} className="w-full flex-none snap-center px-4">
<div className="rounded-2xl bg-white shadow ring-1 ring-gray-200 p-6">
<div className="w-full max-w-[366px] mx-auto">
<feature.screen />
</div>
<div className="mt-6">
<MobileFeatureTitle className="text-gray-900">
{feature.name}
</MobileFeatureTitle>
<FeatureDescription className="mt-2 text-gray-600">
{feature.description}
</FeatureDescription>
</div>
</div>
</div>
))}
</div>
</>
)
}
/* ✅ FINAL LIGHT MODE EXPORT — BOXED CONTAINER + BORDERS MATCHING CloudHeroNew */
export function CloudFeaturesLight() {
return (
<div className="">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
<div className="w-full border-t border-l border-r border-gray-200" />
{/* ✅ Boxed container (border-x only) */}
<div className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-200 bg-white">
<section className="px-6 py-16 lg:py-16">
<Container>
<div className="max-w-4xl mx-auto items-center text-center">
<Eyebrow color="accent">Platform Overview</Eyebrow>
<SectionHeader className="mt-2 text-gray-900">
A Decentralized Cloud that Operates Itself
</SectionHeader>
<P className="mt-6 text-gray-600">
Mycelium Cloud runs Kubernetes on a sovereign, self-healing network
with compute, storage, and networking built in so you dont need
external cloud dependencies.
</P>
</div>
</Container>
<div className="hidden md:block mt-12">
<CloudFeaturesDesktop />
</div>
<div className="md:hidden mt-12">
<CloudFeaturesMobile />
</div>
</section>
</div>
{/* ✅ Bottom horizontal line */}
<div className="w-full border-b border-gray-200" />
{/* ✅ Bottom spacer matching hero */}
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
</div>
)
}

View File

@@ -1,45 +1,51 @@
import { H3, H5, Eyebrow } from "../../components/Texts" import { H3, Eyebrow } from "@/components/Texts"
import { Button } from "../../components/Button" import { Button } from "@/components/Button"
export function CloudHeroNew({ onGetStartedClick = () => {} }: { onGetStartedClick?: () => void }) {
export function CloudHeroNew() {
return ( return (
<div className="">
{/* Boxed container */}
<div <div
className="relative bg-cover lg:bg-contain bg-right bg-no-repeat" className="relative mx-auto max-w-7xl border border-t-0 border-b-0 border-gray-200 bg-white overflow-hidden bg-contain bg-right bg-no-repeat"
style={{ backgroundImage: "url('/images/cloudhero4.webp')" }} style={{ backgroundImage: "url('/images/cloudhero4.webp')", backgroundSize: "contain" }}
> >
<div className="mx-auto max-w-7xl lg:px-8"> {/* Inner padding */}
<div className="px-6 pt-12 pb-24 sm:pb-32 lg:col-span-5 lg:px-0 lg:pt-40 lg:pb-48 xl:col-span-5"> <div className="px-6 py-16 lg:py-16">
<div className="mx-auto max-w-2xl lg:mx-0"> <div className="max-w-2xl lg:pl-6">
<Eyebrow> <Eyebrow>
Mycelium Cloud Mycelium Cloud
</Eyebrow> </Eyebrow>
<H3 className="mt-4"> <H3 className="mt-4">
Run Kubernetes on the Sovereign Agentic Cloud Run Kubernetes on the Sovereign Agentic Cloud
</H3> </H3>
<H5 className="mt-8 text-lg text-gray-600"> <p className="mt-6 text-lg">
Mycelium Cloud turns the ThreeFold Grid into a programmable substrate for K3s.
</H5>
<H5 className="mt-4 text-lg text-gray-600">
Deploy K3s clusters on a global, self-healing mesh network. Deploy K3s clusters on a global, self-healing mesh network.
Your workloads run on sovereign, encrypted infrastructure, without centralized cloud control. Your workloads run on sovereign, encrypted infrastructure, without centralized cloud control.
</H5> </p>
<p className="mt-4 lg:text-base italic text-gray-600 text-sm">
Works Alone. Works Together.
Mycelium Cloud can run on any network fabric, or pair with Mycelium Network
for sovereign connectivity.
</p>
<div className="mt-10 flex items-center gap-x-6"> <div className="mt-10 flex items-center gap-x-6">
<Button <Button
to="#" onClick={onGetStartedClick}
variant="solid" variant="solid"
className=""
color="cyan" color="cyan"
> >
Get started Get started
</Button> </Button>
<Button to="#" variant="outline"> <Button to="#" variant="outline">
Explore Docs <span aria-hidden="true"> </span> Documentation <span aria-hidden="true"></span>
</Button> </Button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-200" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
</div> </div>
) )
} }

View File

@@ -4,28 +4,32 @@ import {
ServerIcon, ServerIcon,
ShieldCheckIcon, ShieldCheckIcon,
} from '@heroicons/react/24/outline' } from '@heroicons/react/24/outline'
import { CP, CT, Eyebrow, H3, P } from '../../components/Texts' import { CP, CT, Eyebrow, H3 } from '@/components/Texts'
const features = [ const features = [
{ {
Eyebrow: 'DevOps / Cloud teams',
name: 'Kubernetes Clusters', name: 'Kubernetes Clusters',
description: 'Deploy and scale containerized apps across your own hardware.', description: 'Deterministic K3s workloads across sovereign hardware.',
icon: ServerIcon, icon: ServerIcon,
}, },
{ {
name: 'AI Agents & LLM Runtimes', Eyebrow: 'Security & infrastructure',
description: 'Run open-source models locally, securely, and offline.', name: 'Encrypted Mesh Networking',
icon: ArrowPathIcon, description: 'No public ingress, no exposed attack surface, zero-trust routing.',
icon: ShieldCheckIcon,
}, },
{ {
Eyebrow: 'Data-driven teams',
name: 'S3-Compatible Storage', name: 'S3-Compatible Storage',
description: 'Your own personal over-the-network drive, encrypted end-to-end.', description: 'Distributed storage with erasure coding and residency control.',
icon: CloudArrowUpIcon, icon: CloudArrowUpIcon,
}, },
{ {
name: 'Mesh VPN & Zero-Trust Networking', Eyebrow: 'AI / ML workloads',
description: 'Securely connect all your devices and remote locations.', name: 'GPU-Ready',
icon: ShieldCheckIcon, description: 'Scale inference & training on demand.',
icon: ArrowPathIcon,
}, },
] ]
@@ -33,13 +37,8 @@ export function CloudHosting() {
return ( return (
<div className="relative bg-white py-24 lg:py-32"> <div className="relative bg-white py-24 lg:py-32">
<div className="mx-auto max-w-md px-6 text-center sm:max-w-3xl lg:max-w-7xl lg:px-8"> <div className="mx-auto max-w-md px-6 text-center sm:max-w-3xl lg:max-w-7xl lg:px-8">
<Eyebrow>DEPLOY</Eyebrow> <Eyebrow>CAPABILITIES</Eyebrow>
<H3 className="mt-2">What You Can Run on Mycelium Cloud</H3> <H3 className="mt-2">What You Can Run on Mycelium Cloud</H3>
<P className="mx-auto mt-5 max-w-prose">
Turn your own machines into real, production-grade infrastructure. Mycelium handles the networking,
orchestration, and security layers, so you can deploy services the same way you would on public cloud without
giving your data or control to anyone.
</P>
<div className="mt-16"> <div className="mt-16">
<div className="grid grid-cols-1 gap-12 lg:grid-cols-4"> <div className="grid grid-cols-1 gap-12 lg:grid-cols-4">
{features.map((feature) => ( {features.map((feature) => (
@@ -48,6 +47,7 @@ export function CloudHosting() {
<span className="absolute -top-6 left-1/2 -translate-x-1/2 transform rounded-xl bg-cyan-500 hover:bg-cyan-400 p-3 shadow-lg"> <span className="absolute -top-6 left-1/2 -translate-x-1/2 transform rounded-xl bg-cyan-500 hover:bg-cyan-400 p-3 shadow-lg">
<feature.icon aria-hidden="true" className="size-8 text-white" /> <feature.icon aria-hidden="true" className="size-8 text-white" />
</span> </span>
<Eyebrow>{feature.Eyebrow}</Eyebrow>
<CT as="h3" className="mt-4"> <CT as="h3" className="mt-4">
{feature.name} {feature.name}
</CT> </CT>

View File

@@ -0,0 +1,103 @@
'use client'
import {
Disclosure,
DisclosureButton,
DisclosurePanel,
} from '@headlessui/react'
import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline'
import { Eyebrow, H3 } from "@/components/Texts"
const product = {
subtitle: 'capabilities',
name: 'What You Can Run on Mycelium Cloud',
description: '<p>Host nodes, deploy workloads, or build private AI systems, all on infrastructure you own and control.</p>',
details: [
{
name: 'Kubernetes Clusters',
description: 'Deterministic K3s workloads across sovereign hardware.',
},
{
name: 'Encrypted Mesh Networking',
description: 'No public ingress, no exposed attack surface, zero-trust routing.',
},
{
name: 'S3-Compatible Storage',
description: 'Distributed storage with erasure coding and residency control.',
},
{
name: 'GPU-Ready',
description: 'Scale inference & training on demand.',
},
],
}
// ✅ keep your product + relatedProducts data above here …
export function CloudHostingNew() {
return (
<div className="bg-[#121212] text-white">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-[#111111] mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
<div className="w-full border-t border-l border-r border-gray-600" />
{/* ✅ MAIN CONTENT */}
<main className="mx-auto max-w-7xl px-6 lg:px-12 py-12 border border-t-0 border-b-0 border-gray-600">
<div className="mx-auto max-w-2xl lg:max-w-none">
{/* ✅ Product Section */}
<div className="lg:grid lg:grid-cols-2 lg:items-start lg:gap-x-8">
{/* ✅ Image */}
<img alt="Mycelium Cloud" src="/images/cloudhosting.webp" className="aspect-square w-[600px] object-cover" />
{/* ✅ Product info */}
<div className="mt-10 px-4 sm:mt-16 sm:px-0 lg:mt-0">
<Eyebrow>{product.subtitle}</Eyebrow>
<h3 className="lg:text-4xl text-3xl text-white">{product.name}</h3>
<div className="mt-6 text-gray-300 text-xl"
dangerouslySetInnerHTML={{ __html: product.description }}
/>
{/* ✅ Details accordion */}
<section className="mt-8">
<div className="divide-y divide-gray-800 border-t border-cyan-500">
{product.details.map((detail) => (
<Disclosure key={detail.name} as="div">
<H3>
<DisclosureButton className="group flex w-full items-center justify-between py-6 text-left">
<span className="text-lg tracking-normal font-medium text-white">
{detail.name}
</span>
<span className="ml-6 flex items-center">
<PlusIcon className="block h-6 w-6 text-gray-500 group-open:hidden" />
<MinusIcon className="hidden h-6 w-6 text-indigo-400 group-open:block" />
</span>
</DisclosureButton>
</H3>
<DisclosurePanel className="pb-6">
<p className="text-gray-400 text-base tracking-normal">{detail.description}</p>
</DisclosurePanel>
</Disclosure>
))}
</div>
</section>
</div>
</div>
</div>
</main>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-600" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
</div>
)
}

View File

@@ -1,12 +1,12 @@
import { AnimatedSection } from '../../components/AnimatedSection' import { AnimatedSection } from '../../components/AnimatedSection'
import { CloudArchitecture } from './CloudArchitecture' import { CloudArchitecture } from './CloudArchitecture'
import { CloudFeatures } from './CloudFeatures'
import { CloudGettingStarted } from './CloudGettingStarted'
import { CloudUseCases } from './CloudUseCases' import { CloudUseCases } from './CloudUseCases'
import { SecurityPillars } from './SecurityPillars'
import { CloudCTA } from './CloudCTA'
import { CloudHeroNew } from './CloudHeroNew' import { CloudHeroNew } from './CloudHeroNew'
import { CloudHosting } from './CloudHosting' import { CloudBluePrint } from './CloudBluePrint'
import { CallToAction } from './CalltoAction'
import { CloudHostingNew } from './CloudHostingNew'
import { CloudFeaturesLight } from './CloudFeaturesLight'
export default function CloudPage() { export default function CloudPage() {
return ( return (
@@ -17,28 +17,27 @@ export default function CloudPage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudHosting /> <CloudHostingNew />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudFeatures /> <CloudFeaturesLight />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudArchitecture /> <CloudArchitecture />
</AnimatedSection> </AnimatedSection>
<AnimatedSection>
<CloudGettingStarted />
</AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudUseCases /> <CloudUseCases />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<SecurityPillars /> <CloudBluePrint />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CloudCTA /> <CallToAction />
</AnimatedSection> </AnimatedSection>
</> </>
) )

View File

@@ -1,75 +1,91 @@
import { Container } from '../../components/Container' "use client";
import { Eyebrow, SectionHeader, P, Small } from '../../components/Texts'
import { Container } from '@/components/Container'
import { Eyebrow, H3, P, Small } from '@/components/Texts'
const useCases = [ const useCases = [
{ {
title: 'AI / ML Training', title: 'Enterprise & Private Kubernetes',
description: description:
'Run GPU-accelerated workloads for deep learning, data science, and inference on demand.', 'Production-grade K3s clusters with full workload ownership and residency control. Deploy apps and internal services without vendor lock-in or exposed surfaces.',
bullets: ['GPU acceleration', 'Scalable compute', 'Cost optimization'],
},
{
title: 'Enterprise Kubernetes',
description:
'Operate production-grade clusters with complete control and no vendor lock-in.',
bullets: ['High availability', 'Security', 'Compliance'],
},
{
title: 'Edge & IoT',
description:
'Leverage global nodes for low-latency workloads and connected device deployments.',
bullets: ['Low latency', 'Global distribution', 'Real-time processing'],
},
{
title: 'DigitalMe Blueprint',
description:
'Launch a full digital workspace on Mycelium Cloud with pre-integrated services.',
bullets: [ bullets: [
'Cryptpad • Encrypted collaboration', 'High availability + failover',
'Elements • Matrix chat', 'Encrypted, mesh-native networking',
'Stallwart • Mail, calendar, contacts', 'Compliance-ready governance & policy control',
'Gitea • Git hosting', ],
'Nextcloud • File storage and sync', },
'LiveKit / Jitsi • Real-time video', {
'Single Sign-On backed by Gitea', title: 'Edge & Distributed Deployments',
description:
'Place compute close to where data is created. Run clusters globally across home labs, offices, data centers, or edge locations.',
bullets: [
'Low-latency execution',
'Mesh-routed connectivity',
'Autonomous healing across region',
],
},
{
title: 'AI / ML & Agent Workloads',
description:
'Run inference, training, and autonomous AI systems on sovereign compute. GPU orchestration, private vector storage, and model execution without handing data to hyperscalers.',
bullets: [
'Scales across nodes',
'Supports open-source & fine-tuned models',
'Built for agentic automation + RAG',
], ],
}, },
] ]
export function CloudUseCases() { export function CloudUseCases() {
return ( return (
<section className="bg-white py-24 sm:py-32"> <section className="w-full max-w-8xl mx-auto bg-transparent">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
<div className="w-full border-t border-l border-r border-gray-200" />
{/* ✅ Inner boxed container */}
<div className="max-w-7xl bg-white mx-auto py-12 border border-t-0 border-b-0 border-gray-200">
<Container> <Container>
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow> <Eyebrow className="text-cyan-500">USE CASES</Eyebrow>
Use Cases
</Eyebrow> <H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-gray-900">
<SectionHeader as="h2" className="mt-6 text-gray-900">
Built for intelligent workloads across every edge. Built for intelligent workloads across every edge.
</SectionHeader> </H3>
<P className="mt-6 text-gray-600">
<P className="mt-6 text-lg text-gray-600">
Mycelium Cloud unifies compute, storage, and networking so teams can Mycelium Cloud unifies compute, storage, and networking so teams can
launch anything from GPU inference farms to global collaboration launch anything from GPU inference farms to global collaboration suites
suites with deterministic outcomes. with deterministic outcomes.
</P> </P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
{/* ✅ 3 columns on desktop */}
<ul
role="list"
className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-6
sm:grid-cols-2 lg:max-w-none lg:grid-cols-3 md:gap-y-10"
>
{useCases.map((useCase) => ( {useCases.map((useCase) => (
<div <li
key={useCase.title} key={useCase.title}
className="flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg" className="rounded-md border border-gray-200 bg-white p-6 transition-all duration-300
hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 flex flex-col"
> >
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<h3 className="text-xl font-semibold text-gray-900"> <h3 className="font-semibold text-gray-900">
{useCase.title} {useCase.title}
</h3> </h3>
<Small className="text-xs uppercase tracking-[0.3em] text-cyan-500"> <Small className="uppercase tracking-[0.25em] text-cyan-500">
Scenario Scenario
</Small> </Small>
</div> </div>
<p className="mt-4 text-sm leading-relaxed text-gray-600">
<p className="mt-4 text-gray-700 leading-snug">
{useCase.description} {useCase.description}
</p> </p>
<ul className="mt-6 space-y-3 text-sm text-gray-600"> <ul className="mt-6 space-y-3 text-sm text-gray-600">
{useCase.bullets.map((bullet) => ( {useCase.bullets.map((bullet) => (
<li <li
@@ -81,10 +97,15 @@ export function CloudUseCases() {
</li> </li>
))} ))}
</ul> </ul>
</div> </li>
))} ))}
</div> </ul>
</Container> </Container>
</div>
{/* ✅ Bottom horizontal line + spacing */}
<div className="w-full border-b border-gray-200" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
</section> </section>
) )
} }

View File

@@ -0,0 +1,103 @@
"use client";
import { motion, useReducedMotion } from "framer-motion";
import clsx from "clsx";
export function DeterministicOrchestration({ className }: { className?: string }) {
const prefersReducedMotion = useReducedMotion();
// Hex coordinates (simple honeycomb layout)
const hexes = [
{ x: 60, y: 25 },
{ x: 100, y: 25 },
{ x: 140, y: 25 },
{ x: 40, y: 65 },
{ x: 80, y: 65 },
{ x: 120, y: 65 },
{ x: 160, y: 65 },
{ x: 60, y: 105 },
{ x: 100, y: 105 },
{ x: 140, y: 105 },
];
// simple hex path generator
const hexPath = (cx: number, cy: number, r = 14) => {
const p = (a: number) => ({
x: cx + r * Math.cos((Math.PI / 180) * a),
y: cy + r * Math.sin((Math.PI / 180) * a),
});
const pts = [30, 90, 150, 210, 270, 330].map((a) => p(a));
return `M ${pts[0].x} ${pts[0].y} L ${pts[1].x} ${pts[1].y} L ${pts[2].x} ${pts[2].y}
L ${pts[3].x} ${pts[3].y} L ${pts[4].x} ${pts[4].y} L ${pts[5].x} ${pts[5].y} Z`;
};
return (
<div
className={clsx(
"w-full h-24 flex items-center justify-center bg-[#0a0a0a]",
className
)}
aria-hidden="true"
role="img"
>
<svg viewBox="0 0 200 140" className="w-full h-full" fill="none">
{/* Hex outlines */}
{hexes.map((h, i) => (
<motion.path
key={i}
d={hexPath(h.x, h.y)}
stroke="#4B5563" // gray-600
strokeWidth={1.6}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.6, delay: 0.03 * i }}
/>
))}
{/* Deterministic sequence highlight — hexes fill in predictable order */}
{hexes.map((h, i) => (
<motion.path
key={`fill-${i}`}
d={hexPath(h.x, h.y)}
fill="#00b8db"
initial={{ opacity: 0 }}
animate={{
opacity:
prefersReducedMotion
? 1
: [0, 1, 1, 0], // flash on, stay, fade
}}
transition={{
duration: 1.2,
delay: i * 0.12,
repeat: prefersReducedMotion ? 0 : Infinity,
repeatDelay: 0.6,
ease: "easeInOut",
}}
/>
))}
{/* Optional center stability indicator */}
<motion.circle
cx={100}
cy={65}
r={5}
fill="#00b8db"
initial={{ scale: 0.8, opacity: 0 }}
animate={{
opacity: 1,
scale: prefersReducedMotion ? 1 : [1, 1.15, 1],
}}
transition={{
duration: 1.6,
repeat: prefersReducedMotion ? 0 : Infinity,
repeatType: "mirror",
ease: [0.22, 1, 0.36, 1],
}}
/>
</svg>
</div>
);
}

View File

@@ -0,0 +1,112 @@
"use client";
import { motion, useReducedMotion } from "framer-motion";
import clsx from "clsx";
export function MeshNetworkIcon({ className }: { className?: string }) {
const prefersReducedMotion = useReducedMotion();
const nodes = [
{ x: 50, y: 25 },
{ x: 120, y: 25 },
{ x: 150, y: 65 },
{ x: 120, y: 100 },
{ x: 60, y: 100 },
{ x: 30, y: 65 },
{ x: 90, y: 55 }, // center-ish node
];
// Lines between nodes (pairs of indices)
const links: [number, number][] = [
[0, 6], [6, 1],
[1, 2], [2, 3],
[3, 6], [6, 4],
[4, 5], [5, 0],
];
return (
<div
className={clsx(
"w-full h-24 flex items-center justify-center bg-[#0a0a0a]",
className
)}
aria-hidden="true"
role="img"
>
<svg
viewBox="0 0 180 120"
className="w-full h-full"
fill="none"
>
{/* Lines */}
{links.map(([a, b], i) => (
<motion.line
key={i}
x1={nodes[a].x}
y1={nodes[a].y}
x2={nodes[b].x}
y2={nodes[b].y}
stroke="#4B5563" /* gray-600 */
strokeWidth={1.5}
initial={{ pathLength: 0, opacity: 0 }}
animate={{ pathLength: 1, opacity: 1 }}
transition={{
delay: 0.1 * i,
duration: 0.5,
ease: [0.22, 1, 0.36, 1],
}}
/>
))}
{/* Nodes */}
{nodes.map((n, i) => (
<motion.circle
key={i}
cx={n.x}
cy={n.y}
r={6}
fill="#00b8db" // cyan nodes
initial={{ scale: 0.8, opacity: 0 }}
animate={{
opacity: 1,
scale:
!prefersReducedMotion && i !== 6 // central node pulses more
? [1, 1.12, 1]
: 1,
}}
transition={{
duration: 1.4,
repeat: i !== 6 && !prefersReducedMotion ? Infinity : 0,
repeatType: "mirror",
ease: [0.22, 1, 0.36, 1],
delay: 0.05 * i,
}}
/>
))}
{/* Center node extra pulse */}
<motion.circle
cx={nodes[6].x}
cy={nodes[6].y}
r={10}
stroke="#00b8db"
strokeWidth={1}
fill="none"
initial={{ scale: 0 }}
animate={{
scale:
prefersReducedMotion
? 0
: [0.6, 1.3, 0.6],
opacity: [0.3, 0.8, 0.3],
}}
transition={{
duration: 1.8,
repeat: prefersReducedMotion ? 0 : Infinity,
repeatType: "mirror",
}}
/>
</svg>
</div>
);
}

View File

@@ -0,0 +1,113 @@
"use client";
import { motion, useReducedMotion } from "framer-motion";
import clsx from "clsx";
export function SovereignComputer({ className }: { className?: string }) {
const prefersReducedMotion = useReducedMotion();
return (
<div
className={clsx(
"w-full h-24 flex items-center justify-center bg-[#0a0a0a]",
className
)}
aria-hidden="true"
role="img"
>
<svg viewBox="0 0 180 120" className="w-full h-full" fill="none">
{/* Outer secure boundary (shield / isolation) */}
<motion.rect
x={40}
y={20}
width={100}
height={80}
rx={14}
stroke="#4B5563"
strokeWidth={2}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.6 }}
/>
{/* Inner compute chip */}
<motion.rect
x={70}
y={45}
width={40}
height={30}
rx={4}
fill="#00b8db"
initial={{ scale: 0.8, opacity: 0 }}
animate={{
opacity: 1,
scale:
!prefersReducedMotion
? [1, 1.12, 1]
: 1,
}}
transition={{
duration: 1.6,
repeat: prefersReducedMotion ? 0 : Infinity,
repeatType: "mirror",
ease: [0.22, 1, 0.36, 1],
}}
/>
{/* Compute lines out → show isolation of data paths */}
{[
[90, 45, 90, 20],
[90, 75, 90, 100],
[70, 60, 40, 60],
[110, 60, 140, 60],
].map(([x1, y1, x2, y2], i) => (
<motion.line
key={i}
x1={x1}
y1={y1}
x2={x2}
y2={y2}
stroke="#4B5563"
strokeWidth={2}
initial={{ pathLength: 0, opacity: 0 }}
animate={{ pathLength: 1, opacity: 1 }}
transition={{
delay: 0.1 * i,
duration: 0.6,
ease: [0.22, 1, 0.36, 1],
}}
/>
))}
{/* Cyan data pulses traveling outward */}
{[
[90, 45, 90, 20],
[90, 75, 90, 100],
[70, 60, 40, 60],
[110, 60, 140, 60],
].map(([x1, y1, x2, y2], i) => (
<motion.circle
key={`pulse-${i}`}
cx={x1}
cy={y1}
r={3}
fill="#00b8db"
initial={{ opacity: 0 }}
animate={{
opacity: [0, 1, 0],
cx: [x1, x2],
cy: [y1, y2],
}}
transition={{
delay: 0.15 * i,
duration: 1.4,
repeat: prefersReducedMotion ? 0 : Infinity,
repeatType: "loop",
ease: "linear",
}}
/>
))}
</svg>
</div>
);
}

View File

@@ -1,5 +1,5 @@
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
export function CloudCTA() { export function CloudCTA() {
return ( return (

View File

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'
type Step = { type Step = {
number: string number: string

View File

@@ -1,8 +1,8 @@
import { useId } from 'react' import { useId } from 'react'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Eyebrow, H2, P, H5 } from '../../components/Texts' import { Eyebrow, H2, P, H5 } from '@/components/Texts'
function BackgroundIllustration(props: React.ComponentPropsWithoutRef<'div'>) { function BackgroundIllustration(props: React.ComponentPropsWithoutRef<'div'>) {
const id = useId() const id = useId()

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
export function CloudHeroAlt() { export function CloudHeroAlt() {
return ( return (

View File

@@ -1,6 +1,6 @@
import { CircleBackground } from '../../components/CircleBackground' import { CircleBackground } from '@/components/CircleBackground'
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 focusAreas = [ const focusAreas = [
{ {

View File

@@ -1,4 +1,4 @@
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
const computeFeatures = [ const computeFeatures = [
{ {

View File

@@ -1,6 +1,6 @@
import { CircleBackground } from '../../components/CircleBackground' import { CircleBackground } from '@/components/CircleBackground'
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 differentiators = [ const differentiators = [
{ {

View File

@@ -1,6 +1,6 @@
import { CircleBackground } from '../../components/CircleBackground' import { CircleBackground } from '../../components/CircleBackground'
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
export function CallToAction() { export function CallToAction() {
return ( return (
@@ -14,14 +14,16 @@ export function CallToAction() {
<Container className="relative"> <Container className="relative">
<div className="mx-auto max-w-2xl text-center"> <div className="mx-auto max-w-2xl text-center">
<h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl"> <h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
Get Started Today Choose How You Want to Start
</h2> </h2>
<p className="mt-6 text-lg text-gray-300"> <p className="mt-6 text-lg text-gray-300">
Download the Mycelium app and step into the future of secure, peer-to-peer networking; fast, private, and decentralized. Run workloads using Mycelium Cloud, or host your own compute node.
Both use the same deterministic execution fabric.
</p> </p>
<div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4"> <div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4">
<Button to="/download" variant="solid" color="white"> <Button to="/download" variant="solid" color="white">
Get Mycelium Connector Deploy Workloads
</Button> </Button>
<Button <Button
to="https://threefold.info/mycelium_network/docs/" to="https://threefold.info/mycelium_network/docs/"
@@ -30,7 +32,7 @@ export function CallToAction() {
variant="outline" variant="outline"
color="white" color="white"
> >
Read Docs Host A Node
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -1,92 +1,53 @@
import { Container } from '../../components/Container' import {
import { Eyebrow, SectionHeader, P } from '../../components/Texts' LockClosedIcon,
CpuChipIcon,
AdjustmentsHorizontalIcon,
} from '@heroicons/react/24/solid'
import { Container } from '@/components/Container'
import { Eyebrow, H3, CT, CP } from '@/components/Texts'
const architectureSections = [ const architecture = [
{ {
title: 'Deterministic Computing', name: 'Mesh Networking',
description: description: 'Secure connectivity across all nodes.',
'Every computational step is predictable and provable before it ever executes.', icon: LockClosedIcon,
bullets: [
'Cryptographic verification precedes every operation.',
'State determinism ensures identical results from identical inputs.',
'Tamper resistance surfaces any modification instantly.',
'Comprehensive audit trails verify the full execution history.',
],
}, },
{ {
title: 'Stateless Infrastructure', name: 'Sovereign Compute',
description: description: 'Execution only on hardware you control.',
'A global substrate that scales and recovers without hardware-bound state.', icon: CpuChipIcon,
bullets: [
'No persistent state coupled to specific hardware or regions.',
'Global distribution makes compute available wherever it is needed.',
'Auto-scaling allocates the right resources at the right time.',
'Fault-tolerant orchestration provides automatic failover.',
],
}, },
{ {
title: 'Zero-Image System', name: 'Deterministic Orchestration',
description: description: 'Workloads deploy and update predictably.',
'Metadata-first delivery keeps deployments lightweight and instantly repeatable.', icon: AdjustmentsHorizontalIcon,
bullets: [
'Images represented as metadata instead of heavyweight artifacts.',
'Instant deployment for rapid workload startup.',
'Efficient storage with minimal footprint for artifacts.',
'Bandwidth-optimized transfers shrink delivery times.',
],
}, },
] ]
export function ComputeArchitecture() { export function ComputeArchitecture() {
return ( return (
<section className="bg-gray-50 py-24 sm:py-32"> <section className="bg-white py-24 sm:py-32">
<Container> <Container>
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-3xl text-center">
<Eyebrow className="tracking-[0.28em] uppercase text-cyan-500"> <Eyebrow>ARCHITECTURE</Eyebrow>
Technical Architecture <H3 className="mt-4 text-gray-900">HOW IT WORKS</H3>
</Eyebrow>
<SectionHeader as="h2" className="mt-6 text-gray-900">
Infrastructure engineered for provable outcomes.
</SectionHeader>
<P className="mt-6 text-gray-600">
Deterministic computing, stateless orchestration, and metadata-first
delivery combine to create a compute fabric you can trust with your
most sensitive workloads.
</P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-3">
{architectureSections.map((section) => ( <div className="mx-auto mt-16 max-w-5xl">
<div <dl className="grid grid-cols-1 gap-12 text-gray-600 sm:grid-cols-2 lg:grid-cols-3">
key={section.title} {architecture.map((item) => (
className="flex h-full flex-col rounded-3xl border border-cyan-100 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg" <div key={item.name} className="relative pl-12">
> <item.icon
<div className="flex items-center gap-3"> aria-hidden="true"
<span className="inline-flex size-10 items-center justify-center rounded-full bg-cyan-500/10 text-sm font-semibold uppercase tracking-[0.25em] text-cyan-600"> className="absolute left-0 top-1 size-6 text-cyan-600"
/>
</span> <CT className="font-semibold text-gray-900">{item.name}</CT>
<h3 className="text-xl font-semibold text-gray-900"> <CP className="mt-1 text-gray-600">{item.description}</CP>
{section.title}
</h3>
</div>
<p className="mt-4 text-sm leading-relaxed text-gray-600">
{section.description}
</p>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{section.bullets.map((bullet) => (
<li
key={bullet}
className="flex items-start gap-3 rounded-2xl border border-slate-200 bg-slate-50 p-3 leading-relaxed"
>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" />
<span>{bullet}</span>
</li>
))}
</ul>
</div> </div>
))} ))}
</dl>
</div> </div>
</Container> </Container>
</section> </section>
) )
} }

View File

@@ -0,0 +1,58 @@
import {
CpuChipIcon,
CubeIcon,
ServerIcon,
} from '@heroicons/react/24/solid'
import { Eyebrow, H3, P, CT, CP } from '@/components/Texts'
import { Container } from '@/components/Container'
const capabilities = [
{
name: 'Containers',
description: 'Services, web apps, APIs. Fully compatible with Kubernetes.',
icon: CubeIcon,
},
{
name: 'Virtual Machines',
description:
'Legacy apps and specialized runtime stacks. Secure boot + attestation included.',
icon: ServerIcon,
},
{
name: 'Native Linux Workloads',
description:
'Agents, batch jobs, tooling. Runs statelessly anywhere.',
icon: CpuChipIcon,
},
]
export function ComputeCapabilities() {
return (
<section className="bg-white py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl text-center">
<Eyebrow>CAPABILITIES</Eyebrow>
<H3 className="mt-4 text-gray-900">What You Can Run</H3>
<P className="mt-6 text-gray-600">
Mycelium Compute supports multiple workload types on a single
execution fabric.
</P>
</div>
<div className="mx-auto mt-16 max-w-5xl">
<dl className="grid grid-cols-1 gap-12 sm:grid-cols-2 lg:grid-cols-3">
{capabilities.map((feature) => (
<div key={feature.name} className="flex flex-col text-center">
<div className="mx-auto flex size-12 items-center justify-center rounded-xl bg-cyan-50">
<feature.icon aria-hidden="true" className="size-6 text-cyan-600" />
</div>
<CT className="mt-6 text-gray-900">{feature.name}</CT>
<CP className="mt-2 text-gray-600">{feature.description}</CP>
</div>
))}
</dl>
</div>
</Container>
</section>
)
}

View File

@@ -0,0 +1,56 @@
import {
ShieldCheckIcon,
ArrowPathIcon,
RocketLaunchIcon,
} from '@heroicons/react/24/solid'
import { Container } from '@/components/Container'
import { Eyebrow, H3, P, CT, CP } from '@/components/Texts'
const features = [
{
name: 'Cryptographically verified deployments',
description: 'Every cluster state is signed and checksummed to guarantee truth.',
icon: ShieldCheckIcon,
},
{
name: 'Stateless execution that scales anywhere',
description: 'Run workloads on any node, region, or edge without manual orchestration.',
icon: RocketLaunchIcon,
},
{
name: 'Automatic healing and recovery',
description: 'Self-repairing processes ensure workloads stay available and consistent.',
icon: ArrowPathIcon,
},
]
export function ComputeDesign() {
return (
<section className="bg-white py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl sm:text-center">
<Eyebrow>CORE VALUE</Eyebrow>
<H3 className="mt-4 text-gray-900">Deterministic by Design</H3>
<P className="mt-6 text-gray-600">
Every workload runs exactly as declared: no drift, no hidden state, no surprises.
</P>
</div>
<div className="mx-auto mt-16 max-w-5xl">
<dl className="grid grid-cols-1 gap-12 text-gray-600 sm:grid-cols-2 lg:grid-cols-3">
{features.map((feature) => (
<div key={feature.name} className="relative pl-12">
<feature.icon
aria-hidden="true"
className="absolute left-0 top-1 size-6 text-cyan-600"
/>
<CT className="font-semibold text-gray-900">{feature.name}</CT>
<CP className="mt-1 text-gray-600">{feature.description}</CP>
</div>
))}
</dl>
</div>
</Container>
</section>
)
}

View File

@@ -1,54 +1,26 @@
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 featureGroups = [ const featureGroups = [
{ {
title: 'Deterministic Deployments', title: 'Self-Managing Infrastructure',
description: description:
'Cryptographic verification ensures every workload deploys exactly as specified—no tampering, no drift.', 'Scaling, healing, and failover happen automatically, no manual intervention.',
listTitle: 'Benefits',
bullets: [
'Cryptographic verification of every workload component',
'Zero configuration drift across environments',
'Immediate detection of unauthorized changes',
'Complete reproducibility for every deployment',
],
}, },
{ {
title: 'Self-Managing & Stateless Infrastructure', title: 'Secure, Stateless Execution',
description: description:
'Infrastructure that scales and heals autonomously across the ThreeFold Grid with no manual intervention.', 'Workloads remain isolated, reproducible, and portable, no environment drift or configuration decay.',
listTitle: 'Capabilities',
bullets: [
'Autonomous operations that self-orchestrate workloads',
'Global scaling sewn into the fabric of the platform',
'Stateless design removes hardware dependencies',
'Self-healing recovery from failures and anomalies',
],
}, },
{ {
title: 'Smart Contract-Based Deployment', title: 'Zero-Image Delivery',
description: description:
'Cryptographically signed contracts orchestrate every workload lifecycle with transparent, tamper-proof execution.', 'Deploy workloads using metadata instead of large container images for instant launches.',
listTitle: 'Benefits',
bullets: [
'Every deployment contract cryptographically signed',
'Fully auditable, transparent execution of operations',
'Tamper-proof orchestration that cannot be rewritten',
'Smart contracts automate the entire workload lifecycle',
],
}, },
{ {
title: 'Multi-Workload Compatibility with Secure Boot', title: 'Global Placement Control',
description: description:
'Run containers, VMs, and native Linux workloads anywhere with stateless secure boot and continuous verification.', 'Choose where workloads run, on your hardware or across the decentralized grid.',
listTitle: 'Capabilities',
bullets: [
'Full compatibility with Kubernetes and Docker workloads',
'Securely run virtual machines with attested boot paths',
'Native Linux applications verified end-to-end',
'Continuous verification maintains trusted execution',
],
}, },
] ]
@@ -69,6 +41,7 @@ export function ComputeFeatures() {
the grid. the grid.
</P> </P>
</div> </div>
<div className="mt-16 grid gap-8 md:grid-cols-2"> <div className="mt-16 grid gap-8 md:grid-cols-2">
{featureGroups.map((feature) => ( {featureGroups.map((feature) => (
<div <div
@@ -77,7 +50,7 @@ export function ComputeFeatures() {
> >
<div> <div>
<Small className="text-xs uppercase tracking-[0.3em] text-cyan-500"> <Small className="text-xs uppercase tracking-[0.3em] text-cyan-500">
{feature.listTitle} Feature
</Small> </Small>
<h3 className="mt-4 text-2xl font-semibold text-gray-900"> <h3 className="mt-4 text-2xl font-semibold text-gray-900">
{feature.title} {feature.title}
@@ -86,17 +59,6 @@ export function ComputeFeatures() {
{feature.description} {feature.description}
</p> </p>
</div> </div>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{feature.bullets.map((bullet) => (
<li
key={bullet}
className="flex items-start gap-3 rounded-2xl border border-cyan-100/40 bg-cyan-50/40 p-3 text-left leading-relaxed"
>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" />
<span>{bullet}</span>
</li>
))}
</ul>
</div> </div>
))} ))}
</div> </div>

View File

@@ -1,7 +1,7 @@
'use client' 'use client'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
import { Eyebrow, SectionHeader, P, H3 } from '../../components/Texts' import { Eyebrow, P, H3 } from '@/components/Texts'
export function ComputeHero() { export function ComputeHero() {
return ( return (
@@ -17,19 +17,16 @@ export function ComputeHero() {
<div className="relative mx-auto max-w-7xl py-12 lg:py-24 lg:px-8"> <div className="relative mx-auto max-w-7xl py-12 lg:py-24 lg:px-8">
<div className="max-w-2xl pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24"> <div className="max-w-2xl pr-6 pl-6 md:mr-auto md:w-2/3 md:pr-16 lg:w-1/2 lg:pl-0 lg:pr-24">
<Eyebrow className="text-base/7 font-semibold text-cyan-500">COMPUTE</Eyebrow> <Eyebrow className="text-base/7 font-semibold text-cyan-500">COMPUTE</Eyebrow>
<H3 className="mt-2 text-gray-900">The pulse of Intelligence Runs Here.</H3> <H3 className="mt-2 text-gray-900">Deterministic Compute You Control</H3>
<P className="mt-6 text-gray-600"> <P className="mt-6 text-gray-600">
Mycelium Compute brings predictable, sovereign performance free from lock-in, free from drift. Run workloads on sovereign, self-verifying infrastructure.
Deploy any workload, anywhere, with cryptographic precision and zero compromise. Mycelium Compute delivers predictable execution, zero drift, and automatic healing, whether youre running containers, VMs, agents, or full Kubernetes clusters.
</P>
<P className="mt-6 text-gray-600">
From micro-VMs to full clusters, every operation is deterministic, self-managing, and stateless by design.
Compute that verifies itself. Expands itself. Heals itself.
</P> </P>
<div className="mt-12"> <div className="mt-12">
<Button href="#" variant="solid" color="cyan"> <Button href="#" variant="solid" color="cyan">
Experience Deterministic Compute How it works
</Button> </Button>
<Button href="#" variant="outline" color="cyan">Explore Docs</Button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,6 +1,6 @@
import { CircleBackground } from '../../components/CircleBackground' import { CircleBackground } from '../../components/CircleBackground'
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 overviewCards = [ const overviewCards = [
{ {

View File

@@ -1,13 +1,13 @@
import { AnimatedSection } from '../../components/AnimatedSection' import { AnimatedSection } from '../../components/AnimatedSection'
import { ComputeHero } from './ComputeHero' import { ComputeHero } from './ComputeHero'
import { ComputeOverview } from './ComputeOverview'
import { ComputeFeatures } from './ComputeFeatures' import { ComputeFeatures } from './ComputeFeatures'
import { ComputeZeroImage } from './ComputeZeroImage'
import { ComputeArchitecture } from './ComputeArchitecture' import { ComputeArchitecture } from './ComputeArchitecture'
import { ComputeDeveloperExperience } from './ComputeDeveloperExperience'
import { ComputeUseCases } from './ComputeUseCases' import { ComputeUseCases } from './ComputeUseCases'
import { ComputeDifferentiators } from './ComputeDifferentiators'
import { CallToAction } from './CallToAction' import { CallToAction } from './CallToAction'
import { ComputeCapabilities } from './ComputeCapabilities'
import { ComputeDesign } from './ComputeDesign'
import { ComputeOverview } from './ComputeOverview'
export default function ComputePage() { export default function ComputePage() {
return ( return (
@@ -15,27 +15,31 @@ export default function ComputePage() {
<AnimatedSection> <AnimatedSection>
<ComputeHero /> <ComputeHero />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeOverview /> <ComputeCapabilities />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeFeatures /> <ComputeDesign />
</AnimatedSection>
<AnimatedSection>
<ComputeZeroImage />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeArchitecture /> <ComputeArchitecture />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeDeveloperExperience /> <ComputeFeatures />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeUseCases /> <ComputeUseCases />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<ComputeDifferentiators /> <ComputeOverview />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CallToAction /> <CallToAction />
</AnimatedSection> </AnimatedSection>

View File

@@ -1,72 +1,21 @@
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader } from '@/components/Texts'
const primaryUseCases = [ const useCases = [
{ {
title: 'AI / ML Training', title: 'AI / ML Training',
bullets: [ description:
'Deterministic training pipelines for reproducible experiments.', 'Reproducible pipelines, private model execution, scalable GPU orchestration.',
'Cryptographically verified model artifacts end-to-end.',
'Autonomous scaling for distributed training runs.',
'Zero-drift environments that remain consistent over time.',
],
}, },
{ {
title: 'Application Hosting', title: 'Application Hosting',
bullets: [ description:
'Transparent deployments with verifiable execution.', 'Private, reliable, self-healing services without cloud vendor lock-in.',
'Auto-scaling that allocates resources on demand.',
'Instant global distribution across the ThreeFold Grid.',
'Cryptographically secured runtime environments.',
],
}, },
{ {
title: 'Data Processing', title: 'Distributed & Edge Compute',
bullets: [ description:
'Deterministic pipelines that document every transformation.', 'Run workloads where data lives, in homes, offices, datacenters, or remote regions.',
'Secure computation with cryptographic verification.',
'Auto-scaling resources for fluctuating workloads.',
'Global processing placement to minimize latency.',
],
},
{
title: 'Scientific Computing',
bullets: [
'Reproducible research environments for shared experiments.',
'Secure workloads with verifiable execution paths.',
'Dynamic scaling for compute-intensive tasks.',
'Global collaboration with sovereign resource control.',
],
},
]
const computeSpecific = [
{
title: 'Deterministic Training Environments',
bullets: [
'Reproducible ML experiments with identical conditions every run.',
'Verifiable computational research for scientific collaboration.',
'Auditable financial modelling workflows with traceable outputs.',
'Consistent IoT edge processing with predictable performance.',
],
},
{
title: 'Multi-Platform Application Hosting',
bullets: [
'Kubernetes orchestration with deterministic deployment pipelines.',
'Virtual machines launched with hardware-attested secure boot.',
'Native Linux workloads with cryptographic assurance.',
'Hybrid topologies mixing containers, VMs, and bare metal.',
],
},
{
title: 'Auto-Scaling Workloads',
bullets: [
'Demand-based scaling that reacts instantly to load.',
'Global distribution across the ThreeFold Grid.',
'Automated failover that restores services without intervention.',
'Cost optimization through intelligent resource allocation.',
],
}, },
] ]
@@ -79,17 +28,12 @@ export function ComputeUseCases() {
Use Cases Use Cases
</Eyebrow> </Eyebrow>
<SectionHeader as="h2" color="light" className="mt-6"> <SectionHeader as="h2" color="light" className="mt-6">
Purpose-built for reproducibility, security, and scale. Built for Serious Workloads
</SectionHeader> </SectionHeader>
<P color="lightSecondary" className="mt-6">
From sovereign AI training loops to globally distributed
applications, Mycelium Compute keeps environments verifiable and
self-orchestrating so teams can focus on building.
</P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
<div className="space-y-6"> <div className="mx-auto mt-16 max-w-4xl space-y-6">
{primaryUseCases.map((useCase) => ( {useCases.map((useCase) => (
<div <div
key={useCase.title} key={useCase.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-200/40 hover:bg-white/10" className="rounded-3xl border border-white/10 bg-white/5 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-200/40 hover:bg-white/10"
@@ -97,38 +41,12 @@ export function ComputeUseCases() {
<h3 className="text-xl font-semibold text-white"> <h3 className="text-xl font-semibold text-white">
{useCase.title} {useCase.title}
</h3> </h3>
<ul className="mt-4 space-y-3 text-sm text-gray-200"> <p className="mt-3 text-sm leading-relaxed text-gray-200">
{useCase.bullets.map((bullet) => ( {useCase.description}
<li key={bullet} className="flex items-start gap-3 leading-relaxed"> </p>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-400" />
<span>{bullet}</span>
</li>
))}
</ul>
</div> </div>
))} ))}
</div> </div>
<div className="space-y-6">
{computeSpecific.map((useCase) => (
<div
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"
>
<h3 className="text-xl font-semibold text-white">
{useCase.title}
</h3>
<ul className="mt-4 space-y-3 text-sm text-cyan-100">
{useCase.bullets.map((bullet) => (
<li key={bullet} className="flex items-start gap-3 leading-relaxed">
<span className="mt-1 inline-block size-2 rounded-full bg-white/80" />
<span>{bullet}</span>
</li>
))}
</ul>
</div>
))}
</div>
</div>
</Container> </Container>
</section> </section>
) )

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

@@ -0,0 +1,135 @@
import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P } from '@/components/Texts'
const primaryUseCases = [
{
title: 'AI / ML Training',
bullets: [
'Deterministic training pipelines for reproducible experiments.',
'Cryptographically verified model artifacts end-to-end.',
'Autonomous scaling for distributed training runs.',
'Zero-drift environments that remain consistent over time.',
],
},
{
title: 'Application Hosting',
bullets: [
'Transparent deployments with verifiable execution.',
'Auto-scaling that allocates resources on demand.',
'Instant global distribution across the ThreeFold Grid.',
'Cryptographically secured runtime environments.',
],
},
{
title: 'Data Processing',
bullets: [
'Deterministic pipelines that document every transformation.',
'Secure computation with cryptographic verification.',
'Auto-scaling resources for fluctuating workloads.',
'Global processing placement to minimize latency.',
],
},
{
title: 'Scientific Computing',
bullets: [
'Reproducible research environments for shared experiments.',
'Secure workloads with verifiable execution paths.',
'Dynamic scaling for compute-intensive tasks.',
'Global collaboration with sovereign resource control.',
],
},
]
const computeSpecific = [
{
title: 'Deterministic Training Environments',
bullets: [
'Reproducible ML experiments with identical conditions every run.',
'Verifiable computational research for scientific collaboration.',
'Auditable financial modelling workflows with traceable outputs.',
'Consistent IoT edge processing with predictable performance.',
],
},
{
title: 'Multi-Platform Application Hosting',
bullets: [
'Kubernetes orchestration with deterministic deployment pipelines.',
'Virtual machines launched with hardware-attested secure boot.',
'Native Linux workloads with cryptographic assurance.',
'Hybrid topologies mixing containers, VMs, and bare metal.',
],
},
{
title: 'Auto-Scaling Workloads',
bullets: [
'Demand-based scaling that reacts instantly to load.',
'Global distribution across the ThreeFold Grid.',
'Automated failover that restores services without intervention.',
'Cost optimization through intelligent resource allocation.',
],
},
]
export function ComputeUseCases() {
return (
<section className="bg-gray-950 py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl text-center">
<Eyebrow color="accent" className="tracking-[0.32em] uppercase">
Use Cases
</Eyebrow>
<SectionHeader as="h2" color="light" className="mt-6">
Purpose-built for reproducibility, security, and scale.
</SectionHeader>
<P color="lightSecondary" className="mt-6">
From sovereign AI training loops to globally distributed
applications, Mycelium Compute keeps environments verifiable and
self-orchestrating so teams can focus on building.
</P>
</div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
<div className="space-y-6">
{primaryUseCases.map((useCase) => (
<div
key={useCase.title}
className="rounded-3xl border border-white/10 bg-white/5 p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-200/40 hover:bg-white/10"
>
<h3 className="text-xl font-semibold text-white">
{useCase.title}
</h3>
<ul className="mt-4 space-y-3 text-sm text-gray-200">
{useCase.bullets.map((bullet) => (
<li key={bullet} className="flex items-start gap-3 leading-relaxed">
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-400" />
<span>{bullet}</span>
</li>
))}
</ul>
</div>
))}
</div>
<div className="space-y-6">
{computeSpecific.map((useCase) => (
<div
key={useCase.title}
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">
{useCase.title}
</h3>
<ul className="mt-4 space-y-3 text-sm text-cyan-100">
{useCase.bullets.map((bullet) => (
<li key={bullet} className="flex items-start gap-3 leading-relaxed">
<span className="mt-1 inline-block size-2 rounded-full bg-white/80" />
<span>{bullet}</span>
</li>
))}
</ul>
</div>
))}
</div>
</div>
</Container>
</section>
)
}

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,6 +1,6 @@
import { CircleBackground } from '../../components/CircleBackground' import { CircleBackground } from '../../components/CircleBackground'
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
export function CallToAction() { export function CallToAction() {
return ( return (
@@ -14,11 +14,12 @@ export function CallToAction() {
<Container className="relative"> <Container className="relative">
<div className="mx-auto max-w-2xl text-center"> <div className="mx-auto max-w-2xl text-center">
<h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl"> <h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
Bring sovereign GPU acceleration to production. Choose How You Want to Start
</h2> </h2>
<p className="mt-6 text-lg text-gray-300"> <p className="mt-6 text-lg text-gray-300">
Work with the Mycelium team to deploy GPU workloads that remain Use GPUs through Mycelium Cloud,
verifiable, performant, and cost-transparent from edge to core. or contribute GPU nodes to the mesh and run your own workloads.
</p> </p>
<div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4"> <div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4">
<Button <Button
@@ -29,7 +30,7 @@ export function CallToAction() {
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
Talk to our team Deploy GPU Workloads
</Button> </Button>
<Button <Button
to="#gpu-architecture" to="#gpu-architecture"
@@ -37,7 +38,7 @@ export function CallToAction() {
variant="outline" variant="outline"
color="white" color="white"
> >
Review architecture Host A GPU Node
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -1,28 +1,18 @@
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader } from '@/components/Texts'
const architectureSections = [ const architecture = [
{ {
title: 'Distributed GPU Mesh', title: 'Sovereign Compute Nodes',
description: description: 'GPUs hosted on hardware you trust.',
'A peer-to-peer fabric connects GPU nodes across the ThreeFold Grid, exposing them through the Mycelium network.',
bullets: [
'GPU nodes distributed globally for on-demand acceleration.',
'Mycelium network provides encrypted peer-to-peer connectivity.',
'Smart contract orchestration allocates and governs resources.',
'Real-time monitoring tracks utilization and health.',
],
}, },
{ {
title: 'Performance Characteristics', title: 'Encrypted Mesh Networking',
description: description: 'Secure, private connectivity to workloads.',
'Consistency and transparency are built into the fabric so workloads behave predictably anywhere on the planet.', },
bullets: [ {
'Edge-to-core deployment flexibility for every workload profile.', title: 'Reservation & Verification Layer',
'Adaptive intelligence optimizes allocation automatically.', description: 'Guarantees GPU access and consistency.',
'Deterministic performance guarantees availability when booked.',
'Transparent cost tracking for every GPU cycle consumed.',
],
}, },
] ]
@@ -31,41 +21,24 @@ export function GpuArchitecture() {
<section id="gpu-architecture" className="bg-white py-24 sm:py-32"> <section id="gpu-architecture" className="bg-white py-24 sm:py-32">
<Container> <Container>
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-3xl text-center">
<Eyebrow> <Eyebrow>ARCHITECTURE</Eyebrow>
Technical Architecture
</Eyebrow>
<SectionHeader as="h2" className="mt-6 text-gray-900"> <SectionHeader as="h2" className="mt-6 text-gray-900">
A peer-to-peer mesh purpose-built for acceleration. HOW IT WORKS
</SectionHeader> </SectionHeader>
<P className="mt-6 text-gray-600">
Mycelium GPU treats every node as part of a sovereign mesh. Encrypted
networking, smart contract orchestration, and transparent monitoring
ensure your workloads receive precisely the power they request.
</P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
{architectureSections.map((section) => ( <div className="mx-auto mt-16 max-w-4xl space-y-6 lg:space-y-0 lg:grid lg:grid-cols-3 lg:gap-8">
{architecture.map((item) => (
<div <div
key={section.title} key={item.title}
className="flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg" className="rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg"
> >
<h3 className="text-xl font-semibold text-gray-900"> <h3 className="text-xl font-semibold text-gray-900">
{section.title} {item.title}
</h3> </h3>
<p className="mt-4 text-sm leading-relaxed text-gray-600"> <p className="mt-3 text-sm leading-relaxed text-gray-600">
{section.description} {item.description}
</p> </p>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{section.bullets.map((bullet) => (
<li
key={bullet}
className="flex items-start gap-3 rounded-2xl border border-cyan-100 bg-cyan-50/60 p-3 leading-relaxed"
>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" />
<span>{bullet}</span>
</li>
))}
</ul>
</div> </div>
))} ))}
</div> </div>

View File

@@ -0,0 +1,58 @@
import {
SparklesIcon,
Cog6ToothIcon,
CubeTransparentIcon,
CpuChipIcon,
} from '@heroicons/react/24/solid'
import { Eyebrow, H3, CT, CP } from '@/components/Texts'
import { Container } from '@/components/Container'
const capabilities = [
{
name: 'AI / ML Inference & Training',
description: 'LLMs, embeddings, transformers, fine-tuning',
icon: SparklesIcon,
},
{
name: 'Acceleration in Kubernetes Workloads',
description: 'GPU-backed deployments on Mycelium Cloud',
icon: Cog6ToothIcon,
},
{
name: 'Rendering & Simulation',
description: 'Scientific visualization, VFX, real-time 3D',
icon: CubeTransparentIcon,
},
{
name: 'Agent Compute & RAG Pipelines',
description: 'Vector memory + model execution on sovereign hardware',
icon: CpuChipIcon,
},
]
export function GpuCapabilities() {
return (
<section className="bg-white py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl text-center">
<Eyebrow>CAPABILITIES</Eyebrow>
<H3 className="mt-4 text-gray-900">What You Can Run on Mycelium Cloud</H3>
</div>
<div className="mx-auto mt-16 max-w-5xl">
<dl className="grid grid-cols-1 gap-12 sm:grid-cols-2 lg:grid-cols-4">
{capabilities.map((feature) => (
<div key={feature.name} className="flex flex-col text-center">
<div className="mx-auto flex size-12 items-center justify-center rounded-xl bg-cyan-50">
<feature.icon className="size-6 text-cyan-600" aria-hidden="true" />
</div>
<CT className="mt-6 text-gray-900">{feature.name}</CT>
<CP className="mt-2 text-gray-600">{feature.description}</CP>
</div>
))}
</dl>
</div>
</Container>
</section>
)
}

View File

@@ -0,0 +1,59 @@
import { Container } from '@/components/Container'
import { Eyebrow, H3, CT } from '@/components/Texts'
import {
BoltIcon,
BanknotesIcon,
GlobeAltIcon,
ShieldCheckIcon,
} from '@heroicons/react/24/solid'
const benefits = [
{
name: 'Consistent, reserved GPU performance (no noisy neighbor effects)',
icon: BoltIcon,
},
{
name: 'Transparent cost (no markup, no surprise billing)',
icon: BanknotesIcon,
},
{
name: 'Run anywhere cloud, on-prem, edge, home lab',
icon: GlobeAltIcon,
},
{
name: 'Your data never leaves your control',
icon: ShieldCheckIcon,
},
]
export function GpuDesign() {
return (
<section className="bg-white py-24 sm:py-32">
<Container>
{/* Header */}
<div className="mx-auto max-w-3xl sm:text-center">
<Eyebrow>CORE VALUE</Eyebrow>
<H3 className="mt-4 text-gray-900">GPU Power You Actually Control</H3>
</div>
{/* Key Benefits */}
<div className="mx-auto mt-16 max-w-5xl">
<dl className="grid grid-cols-1 gap-12 sm:grid-cols-2 lg:grid-cols-2">
{benefits.map((benefit) => (
<div key={benefit.name} className="relative pl-12">
<benefit.icon
className="absolute left-0 top-1 size-6 text-cyan-600"
aria-hidden="true"
/>
<CT className="font-semibold text-gray-900">
{benefit.name}
</CT>
</div>
))}
</dl>
</div>
</Container>
</section>
)
}

View File

@@ -1,7 +1,7 @@
'use client' 'use client'
import { Button } from '../../components/Button' import { Button } from '@/components/Button'
import { Eyebrow, SectionHeader, P } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '@/components/Texts'
export function GpuHero() { export function GpuHero() {
return ( return (
@@ -19,24 +19,20 @@ export function GpuHero() {
Mycelium GPU Mycelium GPU
</Eyebrow> </Eyebrow>
<SectionHeader as="h1" className="mt-4 text-gray-900"> <SectionHeader as="h1" className="mt-4 text-gray-900">
Unify distributed GPU power into a sovereign acceleration fabric. Sovereign GPU Acceleration for AI and High-Performance Compute
</SectionHeader> </SectionHeader>
<P className="mt-6 text-gray-600"> <P className="mt-6 text-gray-600">
Mycelium GPU transforms fragmented hardware across the ThreeFold Access GPUs across the Mycelium mesh without waitlists,
Grid into one adaptive intelligence layer. Run AI, ML, rendering, inflated pricing, or centralized control.
and high-performance workloads anywherefrom edge devices to Run inference, training, and compute workloads where they make sense:
planetary clusterswith deterministic performance and transparent cloud, edge, or on your own hardware.
cost.
</P>
<P className="mt-4 text-gray-500">
The energy behind intelligence, orchestrated entirely through code.
</P> </P>
<div className="mt-10 flex flex-wrap gap-4"> <div className="mt-10 flex flex-wrap gap-4">
<Button to="#gpu-getting-started" as="a" variant="solid" color="cyan"> <Button to="#gpu-getting-started" as="a" variant="solid" color="cyan">
Start with GPU Access How it works
</Button> </Button>
<Button to="#gpu-architecture" as="a" variant="outline" color="cyan"> <Button to="#gpu-architecture" as="a" variant="outline" color="cyan">
Explore the Mesh Explore Docs
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -1,48 +1,30 @@
import { import {
CodeBracketSquareIcon, AdjustmentsHorizontalIcon,
CubeTransparentIcon, GlobeAltIcon,
LockClosedIcon, BanknotesIcon,
Squares2X2Icon,
} from '@heroicons/react/24/outline' } from '@heroicons/react/24/outline'
import { Container } from '../../components/Container' import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P, Small } from '../../components/Texts' import { Eyebrow, SectionHeader, P } from '@/components/Texts'
const overviewCards = [ const coreFeatures = [
{ {
label: 'Overview', name: 'Deterministic GPU Allocation',
title: 'Unified GPU acceleration across the ThreeFold Grid',
description: description:
'Mycelium GPU aggregates distributed hardware into a single fabric, delivering sovereign acceleration for AI, ML, and rendering workloads.', 'Reserve the GPU type you need and get exactly that, every time.',
icon: AdjustmentsHorizontalIcon,
}, },
{ {
label: 'Core Concept', name: 'Multi-Topology Deployment',
title: 'Sovereign intelligence layer',
description: description:
'No silos, no intermediaries—just raw, verifiable GPU power orchestrated through smart contracts and APIs you control.', 'Run workloads in data centers, at the edge, or on self-hosted nodes.',
}, icon: GlobeAltIcon,
]
const principles = [
{
name: 'No Silos',
description: 'Every GPU resource is accessible through a single interface.',
icon: Squares2X2Icon,
}, },
{ {
name: 'No Intermediaries', name: 'Transparent Cost Structure',
description: 'Direct access to hardware without centralized brokers.', description:
icon: CubeTransparentIcon, 'No inflated pricing, no hidden fees, no marketplace brokerage.',
}, icon: BanknotesIcon,
{
name: 'Verifiable Power',
description: 'Every GPU cycle is attested and cryptographically verified.',
icon: LockClosedIcon,
},
{
name: 'Code-Orchestrated',
description: 'Smart contracts and APIs automate allocation and policy.',
icon: CodeBracketSquareIcon,
}, },
] ]
@@ -52,52 +34,31 @@ export function GpuOverview() {
<Container> <Container>
<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">
Platform Overview PLATFORM OVERVIEW
</Eyebrow> </Eyebrow>
<SectionHeader as="h2" color="light" className="mt-6 font-medium"> <SectionHeader as="h2" color="light" className="mt-6 font-medium">
The sovereign acceleration layer for intelligent workloads. Core Features
</SectionHeader> </SectionHeader>
<P color="lightSecondary" className="mt-6"> <P color="lightSecondary" className="mt-6">
Mycelium GPU makes distributed acceleration feel like one machine. The Mycelium GPU layer provides predictable, sovereign acceleration
Harness global GPUs with deterministic performance, transparent without arbitrary limits or hidden economics.
costs, and end-to-end verification.
</P> </P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
{overviewCards.map((card) => ( <div className="mx-auto mt-16 max-w-5xl grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
{coreFeatures.map((feature) => (
<div <div
key={card.title} key={feature.name}
className="group relative overflow-hidden 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/[0.04] p-8 text-left backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.08]"
>
<div className="absolute inset-0 bg-gradient-to-br from-cyan-500/0 via-white/[0.05] to-cyan-300/20 opacity-0 transition group-hover:opacity-100" />
<div className="relative">
<Small className="text-xs uppercase tracking-[0.35em] text-cyan-200">
{card.label}
</Small>
<h3 className="mt-4 text-lg font-semibold text-white">
{card.title}
</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-300">
{card.description}
</p>
</div>
</div>
))}
</div>
<div className="mt-16 grid gap-8 sm:grid-cols-2 lg:grid-cols-4">
{principles.map((principle) => (
<div
key={principle.name}
className="rounded-3xl border border-white/10 bg-white/[0.04] p-6 text-left transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.08]"
> >
<div className="mb-6 flex size-12 items-center justify-center rounded-full bg-cyan-500/15"> <div className="mb-6 flex size-12 items-center justify-center rounded-full bg-cyan-500/15">
<principle.icon aria-hidden="true" className="size-6 text-cyan-300" /> <feature.icon className="size-6 text-cyan-300" aria-hidden="true" />
</div> </div>
<h3 className="text-base font-semibold text-white"> <h3 className="text-lg font-semibold text-white">
{principle.name} {feature.name}
</h3> </h3>
<p className="mt-3 text-sm leading-relaxed text-gray-300"> <p className="mt-3 text-sm leading-relaxed text-gray-300">
{principle.description} {feature.description}
</p> </p>
</div> </div>
))} ))}

View File

@@ -2,11 +2,10 @@ import { AnimatedSection } from '../../components/AnimatedSection'
import { GpuHero } from './GpuHero' import { GpuHero } from './GpuHero'
import { GpuOverview } from './GpuOverview' import { GpuOverview } from './GpuOverview'
import { GpuArchitecture } from './GpuArchitecture' import { GpuArchitecture } from './GpuArchitecture'
import { GpuIntegration } from './GpuIntegration'
import { GpuUseCases } from './GpuUseCases' import { GpuUseCases } from './GpuUseCases'
import { GpuGettingStarted } from './GpuGettingStarted'
import { GpuDifferentiators } from './GpuDifferentiators'
import { CallToAction } from './CallToAction' import { CallToAction } from './CallToAction'
import { GpuCapabilities } from './GpuCapabilities'
import { GpuDesign } from './GpuDesign'
export default function GpuPage() { export default function GpuPage() {
return ( return (
@@ -14,24 +13,27 @@ export default function GpuPage() {
<AnimatedSection> <AnimatedSection>
<GpuHero /> <GpuHero />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<GpuOverview /> <GpuCapabilities />
</AnimatedSection> </AnimatedSection>
<AnimatedSection>
<GpuDesign />
</AnimatedSection>
<AnimatedSection> <AnimatedSection>
<GpuArchitecture /> <GpuArchitecture />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<GpuIntegration /> <GpuOverview />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<GpuUseCases /> <GpuUseCases />
</AnimatedSection> </AnimatedSection>
<AnimatedSection>
<GpuGettingStarted />
</AnimatedSection>
<AnimatedSection>
<GpuDifferentiators />
</AnimatedSection>
<AnimatedSection> <AnimatedSection>
<CallToAction /> <CallToAction />
</AnimatedSection> </AnimatedSection>

View File

@@ -1,34 +1,18 @@
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 useCases = [ const gpuUseCases = [
{ {
title: 'AI / ML Training', title: 'AI / ML Training & Inference',
description: description: 'Scale model execution across sovereign GPU nodes.',
'Scale training, fine-tuning, and inference workloads anywhere on the grid.',
bullets: ['GPU acceleration', 'Scalable compute', 'Cost optimization'],
}, },
{ {
title: 'Rendering & Visualization', title: 'Rendering & Visualization',
description: description: 'Run 3D, scientific, simulation, or generative rendering pipelines.',
'Drive high-performance graphics pipelines for media, science, and immersive experiences.',
bullets: [
'Distributed 3D rendering',
'Scientific visualization',
'Real-time VR / AR processing',
'Digital twin simulations',
],
}, },
{ {
title: 'General GPU Computing', title: 'Distributed & Edge Compute',
description: description: 'Place GPU power close to where data is generated.',
'Harness sovereign acceleration for simulations, finance, blockchain, and research.',
bullets: [
'Scientific simulations',
'Financial modeling',
'Blockchain processing',
'Protein folding and discovery',
],
}, },
] ]
@@ -37,41 +21,28 @@ export function GpuUseCases() {
<section className="bg-white py-24 sm:py-32"> <section className="bg-white py-24 sm:py-32">
<Container> <Container>
<div className="mx-auto max-w-3xl text-center"> <div className="mx-auto max-w-3xl text-center">
<Eyebrow> <Eyebrow>USE CASES</Eyebrow>
Use Cases
</Eyebrow>
<SectionHeader as="h2" className="mt-6 text-gray-900"> <SectionHeader as="h2" className="mt-6 text-gray-900">
Acceleration for every intelligent workload. Built for Intelligent Workloads
</SectionHeader> </SectionHeader>
<P className="mt-6 text-gray-600"> <P className="mt-6 text-gray-600">
From deep learning to immersive visualization, Mycelium GPU delivers From sovereign AI execution to real-time rendering and edge inference,
deterministic access to the power you need without the waitlists or Mycelium GPU ensures predictable acceleration with full ownership and no centralized control.
markups of centralized clouds.
</P> </P>
</div> </div>
<div className="mt-16 grid gap-8 lg:grid-cols-3">
{useCases.map((useCase) => ( <div className="mx-auto mt-16 max-w-4xl space-y-6 lg:space-y-0 lg:grid lg:grid-cols-3 lg:gap-8">
{gpuUseCases.map((useCase) => (
<div <div
key={useCase.title} key={useCase.title}
className="flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg" className="rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg"
> >
<h3 className="text-xl font-semibold text-gray-900"> <h3 className="text-xl font-semibold text-gray-900">
{useCase.title} {useCase.title}
</h3> </h3>
<p className="mt-4 text-sm leading-relaxed text-gray-600"> <p className="mt-3 text-sm leading-relaxed text-gray-600">
{useCase.description} {useCase.description}
</p> </p>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{useCase.bullets.map((bullet) => (
<li
key={bullet}
className="flex items-start gap-3 rounded-2xl border border-cyan-100 bg-cyan-50/60 p-3 leading-relaxed"
>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" />
<span>{bullet}</span>
</li>
))}
</ul>
</div> </div>
))} ))}
</div> </div>

View File

@@ -0,0 +1,75 @@
import { Container } from '@/components/Container'
import { Eyebrow, SectionHeader, P } from '@/components/Texts'
const architectureSections = [
{
title: 'Distributed GPU Mesh',
description:
'A peer-to-peer fabric connects GPU nodes across the ThreeFold Grid, exposing them through the Mycelium network.',
bullets: [
'GPU nodes distributed globally for on-demand acceleration.',
'Mycelium network provides encrypted peer-to-peer connectivity.',
'Smart contract orchestration allocates and governs resources.',
'Real-time monitoring tracks utilization and health.',
],
},
{
title: 'Performance Characteristics',
description:
'Consistency and transparency are built into the fabric so workloads behave predictably anywhere on the planet.',
bullets: [
'Edge-to-core deployment flexibility for every workload profile.',
'Adaptive intelligence optimizes allocation automatically.',
'Deterministic performance guarantees availability when booked.',
'Transparent cost tracking for every GPU cycle consumed.',
],
},
]
export function GpuArchitectureArchive() {
return (
<section id="gpu-architecture" className="bg-white py-24 sm:py-32">
<Container>
<div className="mx-auto max-w-3xl text-center">
<Eyebrow>
Technical Architecture
</Eyebrow>
<SectionHeader as="h2" className="mt-6 text-gray-900">
A peer-to-peer mesh purpose-built for acceleration.
</SectionHeader>
<P className="mt-6 text-gray-600">
Mycelium GPU treats every node as part of a sovereign mesh. Encrypted
networking, smart contract orchestration, and transparent monitoring
ensure your workloads receive precisely the power they request.
</P>
</div>
<div className="mt-16 grid gap-8 lg:grid-cols-2">
{architectureSections.map((section) => (
<div
key={section.title}
className="flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-8 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg"
>
<h3 className="text-xl font-semibold text-gray-900">
{section.title}
</h3>
<p className="mt-4 text-sm leading-relaxed text-gray-600">
{section.description}
</p>
<ul className="mt-6 space-y-3 text-sm text-gray-600">
{section.bullets.map((bullet) => (
<li
key={bullet}
className="flex items-start gap-3 rounded-2xl border border-cyan-100 bg-cyan-50/60 p-3 leading-relaxed"
>
<span className="mt-1 inline-block size-2 rounded-full bg-cyan-500" />
<span>{bullet}</span>
</li>
))}
</ul>
</div>
))}
</div>
</Container>
</section>
)
}

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

@@ -1,18 +1,18 @@
import { CircleBackground } from '../../components/CircleBackground' import { Container } from '@/components/Container'
import { Container } from '../../components/Container' import { Button } from '@/components/Button'
import { Button } from '../../components/Button'
export function CallToAction() { export function CallToAction() {
return ( return (
<section <section className='relative overflow-hidden bg-gray-900'>
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-[#111111] mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
{/* === Content === */}
<div className="w-full border-t border-l border-r border-gray-600 " />
<div
id="get-started" id="get-started"
className="relative overflow-hidden bg-gray-900 lg:py-32 py-24" className="py-18 max-w-7xl mx-auto border-t-0 border-b-0 border bg-[#111111] border-gray-600">
>
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<CircleBackground color="#06b6d4" className="animate-spin-slower" />
</div>
<Container className="relative"> <Container className="relative">
<div className="mx-auto max-w-xl text-center"> <div className="mx-auto max-w-2xl text-center ">
<h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl"> <h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
Use the Mycelium Stack Your Way Use the Mycelium Stack Your Way
</h2> </h2>
@@ -24,20 +24,25 @@ export function CallToAction() {
</p> </p>
<div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4"> <div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4">
<Button to="/cloud" variant="solid" color="cyan"> <Button to="/cloud" variant="solid" color="cyan">
Start Deployment Get Started
</Button> </Button>
<Button <Button
to="https://threefold.info/mycelium_network/docs/" to="https://threefold.info/mycelium_network/docs/"
as="a" as="a"
target="_blank" target="_blank"
variant="outline" variant="outline"
color="white" color="gray"
> >
Explore Docs Explore Docs
</Button> </Button>
</div> </div>
</div> </div>
</Container> </Container>
</div>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-600" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
</section> </section>
) )
} }

View File

@@ -1,16 +1,17 @@
import { H1, H5 } from "@/components/Texts" import { H1, H5 } from "@/components/Texts"
import { Button } from "@/components/Button" import { Button } from "@/components/Button"
export function HomeAurora({ onGetStartedClick }: { onGetStartedClick: () => void }) { export function HomeAurora({ onGetStartedClick }: { onGetStartedClick: () => void }) {
return ( return (
<div className="px-4">
{/* Boxed container */}
<div <div
className="relative bg-cover sm:bg-contain bg-right bg-no-repeat" className="relative mx-auto max-w-7xl border border-t-0 border-gray-200 bg-white overflow-hidden bg-contain bg-right bg-no-repeat"
style={{ backgroundImage: "url('/images/hero11.webp')" }} style={{ backgroundImage: "url('/images/hero11.webp')" }}
> >
<div className="mx-auto max-w-7xl lg:px-4"> {/* Inner padding */}
<div className="px-6 pt-12 pb-24 sm:pb-32 lg:col-span-5 lg:px-0 lg:pt-40 lg:pb-48 xl:col-span-5"> <div className="px-6 py-16 lg:py-32 ">
<div className="mx-auto max-w-2xl lg:mx-0"> <div className="max-w-2xl lg:pl-6">
<div className="hidden sm:flex"> <div className="hidden sm:flex">
<div className="relative rounded-full px-3 py-1 text-sm/6 text-gray-500 ring-1 ring-gray-900/10 hover:ring-gray-900/20"> <div className="relative rounded-full px-3 py-1 text-sm/6 text-gray-500 ring-1 ring-gray-900/10 hover:ring-gray-900/20">
Deploying at scale?{' '} Deploying at scale?{' '}
@@ -20,24 +21,26 @@ export function HomeAurora({ onGetStartedClick }: { onGetStartedClick: () => voi
</a> </a>
</div> </div>
</div> </div>
<H1 className="mt-8"> <H1 className="mt-8">
The Sovereign Agentic Cloud The Sovereign Agentic Cloud
</H1> </H1>
<H5 className="mt-8 text-lg text-gray-600"> <H5 className="mt-8 text-lg text-gray-600">
Host nodes, deploy workloads, or build private AI systems, Host nodes, deploy workloads, or build private AI systems,
all on infrastructure you own and control. all on infrastructure you own and control.
</H5> </H5>
<div className="mt-10 flex items-center gap-x-6"> <div className="mt-10 flex items-center gap-x-6">
<Button <Button
variant="solid" variant="solid"
className=""
color="cyan" color="cyan"
onClick={onGetStartedClick} onClick={onGetStartedClick}
> >
Start Hosting Start Hosting
</Button> </Button>
<Button to="#" variant="outline"> <Button to="#" variant="outline">
Deploy in Cloud <span aria-hidden="true"> </span> Deploy in Cloud
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -2,52 +2,49 @@ import createGlobe from "cobe";
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import { motion } from "motion/react"; import { motion } from "motion/react";
import { IconBrandYoutubeFilled } from "@tabler/icons-react"; import { IconBrandYoutubeFilled } from "@tabler/icons-react";
import { H2, P, CP, Eyebrow } from '@/components/Texts' import { H2, CP, Eyebrow } from '@/components/Texts'
export function HomeBenefits() { export function HomeBenefits() {
const features = [ const features = [
{
title: "Unbreakable by Design",
description:
"No central cloud to censor or fail. The network heals itself.",
image: "/images/benefits/energy.webp",
},
{ {
title: "Sovereign by Default", title: "Sovereign by Default",
description: description:
"Own your infrastructure and your data. Mycelium Cloud eliminates dependency on centralized providers, giving you full digital sovereignty.", "Identity, compute, and data belong to you cryptographically.",
image: "/images/benefits/sovereign.webp", image: "/images/benefits/sovereign.webp",
}, },
{ {
title: "Hackable & Open", title: "Hackable & Open",
description: description:
"Open source and hackable by design. Learn, build, and experiment without permission.", "Learn, build, and experiment without permission.",
image: "/images/benefits/autonomous.webp", image: "/images/benefits/autonomous.webp",
}, },
{
title: "Unbreakable by Design",
description:
"Distributed nodes make it resilient to attacks and failures. The network heals itself.",
image: "/images/benefits/energy.webp",
},
{ {
title: "Cost & Energy Efficient", title: "Cost & Energy Efficient",
description: description:
"Distributed hardware eliminates hyperscale overhead. Pure compute power at a fraction of traditional cloud costs.", "Distributed hardware eliminates hyperscale overhead.",
image: "/images/benefits/cost.webp", image: "/images/benefits/cost.webp",
}, },
]; ];
return ( return (
<div className="relative z-20 py-10 lg:py-24 max-w-7xl mx-auto"> <div className="relative z-20 bg-blackpy-6 lg:py-24 max-w-7xl mx-auto border border-t-0 border-gray-200">
<div className="px-12"> <div className="px-12">
<Eyebrow className="text-center text-cyan-500"> <Eyebrow className="text-center text-cyan-500">
Benefits Benefits
</Eyebrow> </Eyebrow>
<H2 className="text-3xl lg:text-5xl lg:leading-tight max-w-5xl mx-auto text-center tracking-tight font-medium text-black dark:text-white"> <H2 className="text-3xl lg:text-5xl lg:leading-tight max-w-5xl mx-auto text-center tracking-tight font-medium text-black dark:text-white">
Why It Changes Everything Why It Matters
</H2> </H2>
<P className=" max-w-3xl my-4 mx-auto text-center text-gray-600">
Project Mycelium is a new foundation for digital independence. A self-governing, AI-powered infrastructure that gives you control, efficiency, and trust without compromise.
</P>
</div> </div>
<div className="mt-10 grid grid-cols-1 gap-4 sm:mt-16 lg:grid-cols-7 lg:grid-rows-2 lg:px-12 px-6"> <div className="mt-10 grid grid-cols-1 gap-4 lg:grid-cols-7 lg:grid-rows-2 lg:px-12 px-6">
<div className="flex p-px lg:col-span-4"> <div className="flex p-px lg:col-span-4">
<div className="w-full overflow-hidden rounded-lg bg-white/40 dark:bg-black/40 shadow-sm border border-transparent transition-all duration-300 hover:scale-105 hover:shadow-lg hover:shadow-cyan-500/50 hover:border-cyan-500 max-lg:rounded-t-4xl lg:rounded-tl-4xl"> <div className="w-full overflow-hidden rounded-lg bg-white/40 dark:bg-black/40 shadow-sm border border-transparent transition-all duration-300 hover:scale-105 hover:shadow-lg hover:shadow-cyan-500/50 hover:border-cyan-500 max-lg:rounded-t-4xl lg:rounded-tl-4xl">
<div className="flex items-center"> <div className="flex items-center">
@@ -132,7 +129,7 @@ export function HomeBenefits() {
export const SkeletonOne = () => { export const SkeletonOne = () => {
return ( return (
<div className="relative flex py-8 px-2 gap-10 h-full"> <div className="relative flex py-6 px-2 gap-10 h-full">
<div className="w-full p-5 mx-auto bg-white dark:bg-neutral-900 shadow-2xl group h-full"> <div className="w-full p-5 mx-auto bg-white dark:bg-neutral-900 shadow-2xl group h-full">
<div className="flex flex-1 w-full h-full flex-col space-y-2 "> <div className="flex flex-1 w-full h-full flex-col space-y-2 ">
{/* TODO */} {/* TODO */}
@@ -210,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

@@ -66,8 +66,8 @@ export function WorldMap() {
className="lg:absolute lg:top-12 lg:-left-12 w-80" className="lg:absolute lg:top-12 lg:-left-12 w-80"
> >
<DarkCard> <DarkCard>
<div><CT color="light" className="uppercase tracking-wide [text-shadow:0_0_12px_var(--color-cyan-500)]">CORES</CT></div> <div><CT color="light" className="uppercase tracking-wide ">CORES</CT></div>
<div><CountUpNumber end={54958} className="mt-2 text-3xl font-bold text-white [text-shadow:0_0_12px_var(--color-cyan-500)]" /></div> <div><CountUpNumber end={54958} className="mt-2 text-3xl font-bold text-white" /></div>
<CP color="light" className="mt-2 text-sm"> <CP color="light" className="mt-2 text-sm">
Total Central Processing Unit Cores available on the grid. Total Central Processing Unit Cores available on the grid.
</CP> </CP>
@@ -82,8 +82,8 @@ export function WorldMap() {
className="lg:absolute lg:-top-10 lg:right-0 w-80" className="lg:absolute lg:-top-10 lg:right-0 w-80"
> >
<DarkCard> <DarkCard>
<div><CT color="light" className="uppercase tracking-wide [text-shadow:0_0_12px_var(--color-cyan-500)]">NODES</CT></div> <div><CT color="light" className="uppercase tracking-wide">NODES</CT></div>
<div><CountUpNumber end={1493} className="mt-4 text-3xl font-bold text-white [text-shadow:0_0_12px_var(--color-cyan-500)]" /></div> <div><CountUpNumber end={1493} className="mt-4 text-3xl font-bold text-white" /></div>
<CP color="light" className="mt-2 text-sm"> <CP color="light" className="mt-2 text-sm">
Total number of nodes on the grid. Total number of nodes on the grid.
</CP> </CP>
@@ -98,8 +98,8 @@ export function WorldMap() {
className="lg:absolute lg:bottom-28 lg:-left-12 w-80" className="lg:absolute lg:bottom-28 lg:-left-12 w-80"
> >
<DarkCard> <DarkCard>
<div><CT color="light" className="uppercase tracking-wide [text-shadow:0_0_12px_var(--color-cyan-500)]">SSD CAPACITY</CT></div> <div><CT color="light" className="uppercase tracking-wide">SSD CAPACITY</CT></div>
<div><CountUpNumber end={5388956} className="mt-2 text-3xl font-bold text-white [text-shadow:0_0_12px_var(--color-cyan-500)]" /></div> <div><CountUpNumber end={5388956} className="mt-2 text-3xl font-bold text-white" /></div>
<CP color="light" className="mt-2 text-sm"> <CP color="light" className="mt-2 text-sm">
Total GB amount of storage (SSD, HDD, & RAM) on the grid. Total GB amount of storage (SSD, HDD, & RAM) on the grid.
</CP> </CP>
@@ -114,8 +114,8 @@ export function WorldMap() {
className="lg:absolute lg:top-47 lg:right-0 w-80" className="lg:absolute lg:top-47 lg:right-0 w-80"
> >
<DarkCard> <DarkCard>
<div><CT color="light" className="uppercase tracking-wide [text-shadow:0_0_12px_var(--color-cyan-500)]">COUNTRIES</CT></div> <div><CT color="light" className="uppercase tracking-wide">COUNTRIES</CT></div>
<div><CountUpNumber end={44} className="mt-2 text-3xl font-bold text-white [text-shadow:0_0_12px_var(--color-cyan-500)]" /></div> <div><CountUpNumber end={44} className="mt-2 text-3xl font-bold text-white" /></div>
<CP color="light" className="mt-2 text-sm"> <CP color="light" className="mt-2 text-sm">
Total number of countries with active nodes. Total number of countries with active nodes.
</CP> </CP>

View File

@@ -1,65 +1,158 @@
import { "use client";
ArrowPathIcon,
CloudArrowUpIcon, import { Container } from '@/components/Container'
ServerIcon, import { Eyebrow, H3, P } from '@/components/Texts'
ShieldCheckIcon,
} from '@heroicons/react/24/outline' /* ✅ Custom Icons (unchanged) */
import { CP, CT, Eyebrow, H3, P } from '../../components/Texts'
function KubernetesIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 32 32" aria-hidden="true" {...props}>
<circle cx={16} cy={16} r={16} fill="#A3A3A3" fillOpacity={0.2} />
<path
d="M16 7
L23 11
L25 19
L19 25
L13 25
L7 19
L9 11
Z"
fill="#737373"
/>
<circle cx={16} cy={16} r={2} fill="#171717" />
<line x1="16" y1="9" x2="16" y2="14" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<line x1="22" y1="12" x2="17" y2="16" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<line x1="23" y1="19" x2="18" y2="17" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<line x1="16" y1="23" x2="16" y2="18" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<line x1="9" y1="19" x2="15" y2="17" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<line x1="10" y1="12" x2="15" y2="16" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
</svg>
)
}
function AIAgentsIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 32 32" aria-hidden="true" {...props}>
<circle cx={16} cy={16} r={16} fill="#A3A3A3" fillOpacity={0.2} />
<rect x={10} y={12} width={12} height={10} rx={3} fill="#737373" />
<line x1={16} y1={9} x2={16} y2={12} stroke="#171717" strokeWidth={2} strokeLinecap="round" />
<circle cx={16} cy={8} r={2} fill="#171717" />
<circle cx={13} cy={17} r={1.5} fill="#171717" />
<circle cx={19} cy={17} r={1.5} fill="#171717" />
<line x1={13} y1={21} x2={19} y2={21} stroke="#171717" strokeWidth={2} strokeLinecap="round" />
</svg>
)
}
function S3StorageIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 32 32" aria-hidden="true" {...props}>
<circle cx={16} cy={16} r={16} fill="#A3A3A3" fillOpacity={0.2} />
<path d="M10 12h12l-1 12H11L10 12z" fill="#737373" />
<rect x={10} y={10} width={12} height={3} rx={1} fill="#171717" />
<path d="M12 18c2 2 6 2 8 0" stroke="#171717" strokeWidth={2} strokeLinecap="round" />
</svg>
)
}
function VPNIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 32 32" aria-hidden="true" {...props}>
<circle cx={16} cy={16} r={16} fill="#A3A3A3" fillOpacity={0.2} />
<path
d="
M16 8
l8 4
v6
c0 4 -3 7 -8 9
c-5 -2 -8 -5 -8 -9
v-6
l8 -4
"
fill="#737373"
/>
<path
d="M13 18l2 2l4 -4"
stroke="#171717"
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
)
}
const features = [ const features = [
{ {
name: 'Kubernetes Clusters', name: 'Kubernetes Clusters',
description: 'Deploy and scale containerized apps across your own hardware.', description: 'Deploy and scale containerized apps across your own hardware.',
icon: ServerIcon, icon: KubernetesIcon,
}, },
{ {
name: 'AI Agents & LLM Runtimes', name: 'AI Agents & LLM Runtimes',
description: 'Run open-source models locally, securely, and offline.', description: 'Run open-source models locally, securely, and offline.',
icon: ArrowPathIcon, icon: AIAgentsIcon,
}, },
{ {
name: 'S3-Compatible Storage', name: 'S3-Compatible Storage',
description: 'Your own personal over-the-network drive, encrypted end-to-end.', description: 'Your own personal over-the-network drive, encrypted end-to-end.',
icon: CloudArrowUpIcon, icon: S3StorageIcon,
}, },
{ {
name: 'Mesh VPN & Zero-Trust Networking', name: 'Mesh VPN & Zero-Trust Networking',
description: 'Securely connect all your devices and remote locations.', description: 'Securely connect all your devices and remote locations.',
icon: ShieldCheckIcon, icon: VPNIcon,
}, },
] ]
export function HomeHosting() { export function HomeHosting() {
return ( return (
<div className="relative bg-white py-24 lg:py-32"> <section className="w-full max-w-8xl mx-auto bg-transparent">
<div className="mx-auto max-w-md px-6 text-center sm:max-w-3xl lg:max-w-7xl lg:px-8">
<Eyebrow>DEPLOY</Eyebrow> {/* ✅ Top horizontal line with spacing */}
<H3 className="mt-2">Run Real Infrastructure on Your Own Hardware</H3> <div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
<P className="mx-auto mt-5 max-w-prose"> <div className="w-full border-t border-l border-r border-gray-200" />
Turn your own machines into real, production-grade infrastructure. Mycelium handles the networking,
orchestration, and security layers, so you can deploy services the same way you would on public cloud without
giving your data or control to anyone. {/* ✅ Inner content container */}
<div className="max-w-7xl bg-white mx-auto py-12 border border-t-0 border-b-0 border-gray-200">
<Container>
<div className="mx-auto max-w-4xl sm:text-center">
<Eyebrow className="text-cyan-500">IN ACTIVE EVOLUTION</Eyebrow>
<H3 className="text-3xl lg:text-4xl font-medium tracking-tight text-gray-900">
Expanding the Network Layer
</H3>
<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. These enhancements deepen autonomy
and improve real-world usability.
</P> </P>
<div className="mt-16"> </div>
<div className="grid grid-cols-1 gap-12 lg:grid-cols-4">
<ul
role="list"
className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-6 text-sm
sm:grid-cols-2 lg:max-w-none lg:grid-cols-4 md:gap-y-10"
>
{features.map((feature) => ( {features.map((feature) => (
<div key={feature.name} className="relative"> <li
<div className="flex h-full flex-col rounded-3xl border border-slate-200 bg-gray-50/25 p-8 pt-16 shadow-sm transition hover:-translate-y-1 hover:border-cyan-300 hover:shadow-lg"> key={feature.name}
<span className="absolute -top-6 left-1/2 -translate-x-1/2 transform rounded-xl bg-indigo-500 p-3 shadow-lg"> className="rounded-md border border-gray-200 p-6 transition-all duration-300 ease-in-out
<feature.icon aria-hidden="true" className="size-8 text-white" /> hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 bg-white"
</span> >
<CT as="h3" className="mt-4"> <feature.icon className="h-14 w-14" />
{feature.name} <h3 className="mt-4 font-semibold text-gray-900">{feature.name}</h3>
</CT> <p className="mt-2 text-gray-700 leading-snug">{feature.description}</p>
<CP color="secondary" className="mt-4"> </li>
{feature.description}
</CP>
</div>
</div>
))} ))}
</ul>
</Container>
</div> </div>
</div> {/* ✅ Bottom horizontal line with spacing */}
</div> <div className="w-full border-b border-gray-200" />
</div> <div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-200"></div>
</section>
) )
} }

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 { HomeAurora } from './HomeAurora' import { StackSectionDark } from './StackSectionDark'
import { StackSectionLight } from './StackSection'
import { WorldMap } from './HomeGlobe' import { WorldMap } from './HomeGlobe'
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 { HomeComparisonTable } from './HomeComparisonTable' import { HomeTab } from './HomeTab'
export default function HomePage() { export default function HomePage() {
@@ -27,23 +27,15 @@ export default function HomePage() {
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<StackSectionLight /> <HomeHosting />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<HomeHostingDark /> <StackSectionDark />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>
<HomeBenefits /> <HomeTab />
</AnimatedSection>
<AnimatedSection ref={sliderRef}>
<HomeSlider />
</AnimatedSection>
<AnimatedSection>
<HomeComparisonTable />
</AnimatedSection> </AnimatedSection>
<AnimatedSection> <AnimatedSection>

View File

@@ -15,11 +15,11 @@ export function HomeSlider() {
Ecosystem Ecosystem
</Eyebrow> </Eyebrow>
<H3 className="text-left text-white"> <H3 className="text-left text-white">
Discover the Mycelium Products Mycelium Components
</H3> </H3>
<div className="mt-4 max-w-3xl"> <div className="mt-4 max-w-3xl">
<P className="text-left text-neutral-400"> <P className="text-left text-neutral-400">
From compute and networking to intelligent automation, these components can be used on its own or combined into a fully sovereign cloud. Each component can be used on its own or combined into a fully sovereign cloud.
</P> </P>
</div> </div>
</div> </div>

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

@@ -0,0 +1,127 @@
"use client";
import { Link } from "react-router-dom";
import { Eyebrow, H3, P } from "@/components/Texts";
const bentoCards = [
{
id: 'network',
title: 'Mycelium Network',
eyebrow: 'Network',
description: 'Encrypted peer-to-peer mesh networking across the globe.',
image: '/images/bento-network.png',
link: '/network',
colSpan: 'lg:col-span-3',
rowSpan: 'lg:row-span-1',
rounded: 'lg:rounded-tl-4xl max-lg:rounded-t-4xl',
innerRounded: 'lg:rounded-tl-[calc(2rem+1px)] max-lg:rounded-t-[calc(2rem+1px)]'
},
{
id: 'agents',
title: 'Mycelium Agents',
eyebrow: 'Agents',
description: 'Private, programmable AI systems that run on your hardware.',
image: '/images/bento-agent.jpg',
link: '/agents',
colSpan: 'lg:col-span-3',
rowSpan: 'lg:row-span-1',
rounded: 'lg:rounded-tr-4xl',
innerRounded: 'lg:rounded-tr-[calc(2rem+1px)]'
},
{
id: 'cloud',
title: 'Mycelium Cloud',
eyebrow: 'Cloud',
description: 'Deploy Kubernetes clusters on sovereign infrastructure.',
image: '/images/bento-cloud.jpg',
link: '/cloud',
colSpan: 'lg:col-span-6',
rowSpan: 'lg:row-span-1',
rounded: 'rounded-lg',
innerRounded: 'rounded-[calc(var(--radius-lg)+1px)]'
},
{
id: 'compute',
title: 'Mycelium Compute',
eyebrow: 'Compute',
description: 'The Compute resource layers powering the stack.',
image: '/images/bento-compute.png',
link: '/compute',
colSpan: 'lg:col-span-2',
rowSpan: 'lg:row-span-1',
rounded: 'lg:rounded-bl-4xl',
innerRounded: 'lg:rounded-bl-[calc(2rem+1px)]'
},
{
id: 'storage',
title: 'Mycelium Storage',
eyebrow: 'Storage',
description: 'The Storage resource layers powering the stack.',
image: '/images/bento-storage.png',
link: '/storage',
colSpan: 'lg:col-span-2',
rowSpan: 'lg:row-span-1',
rounded: 'rounded-lg',
innerRounded: 'rounded-[calc(var(--radius-lg)+1px)]'
},
{
id: 'gpu',
title: 'Mycelium GPU',
eyebrow: 'GPU',
description: 'The GPU resource layers powering the stack.',
image: '/images/bento-gpu.jpg',
link: '/gpu',
colSpan: 'lg:col-span-2',
rowSpan: 'lg:row-span-1',
rounded: 'lg:rounded-br-4xl max-lg:rounded-b-4xl',
innerRounded: 'lg:rounded-br-[calc(2rem+1px)] max-lg:rounded-b-[calc(2rem+1px)]'
},
];
export function HomeTab() {
return (
<section className="w-full max-w-8xl mx-auto bg-transparent">
{/* ✅ Top spacer + full-width line */}
<div className="max-w-7xl mx-auto py-6 border-x border-gray-200 bg-white border-t-0 border-b-0" />
<div className="w-full border-t border-l border-r border-gray-200" />
{/* ✅ Section with vertical borders */}
<div className="mx-auto bg-white max-w-2xl px-6 lg:max-w-7xl lg:px-10 border border-t-0 border-b-0 border-gray-200">
<Eyebrow className="pt-12 ">Deploy faster</Eyebrow>
<H3 className="mt-2">Mycelium Components</H3>
<P className="mt-6 max-w-lg">
Each component can be used on its own or combined into a fully sovereign cloud.
</P>
<div className="mt-8 grid grid-cols-1 gap-6 sm:mt-10 lg:grid-cols-6 lg:grid-rows-3 pb-12">
{bentoCards.map((card) => (
<Link to={card.link} key={card.id} className={`relative ${card.colSpan} ${card.rowSpan} transition-transform duration-300 hover:scale-102 cursor-pointer`}>
<div className={`absolute inset-0 rounded-md bg-white ${card.rounded}`} />
<div className={`relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)] ${card.innerRounded}`}>
<img
alt={card.title}
src={card.image}
className="h-50 object-cover object-center"
/>
<div className="px-8 pt-4 pb-6">
<h3 className="text-sm/4 font-semibold text-cyan-500">{card.eyebrow}</h3>
<p className="mt-2 text-lg font-medium lg:text-xl tracking-tight text-gray-950">{card.title}</p>
<p className="mt-1 max-w-lg text-sm/6 text-gray-600">
{card.description}
</p>
</div>
</div>
<div className={`pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 ${card.rounded}`} />
</Link>
))}
</div>
</div>
{/* ✅ Bottom full-width line + spacer */}
<div className="w-full border-b border-gray-200" />
<div className="max-w-7xl mx-auto py-6 border-x border-gray-200 border-t-0 border-b-0" />
</section>
);
}

View File

@@ -63,9 +63,7 @@ export function StackSectionLight() {
<FadeIn> <FadeIn>
<P color="dark" className="mt-6 text-gray-600"> <P color="dark" className="mt-6 text-gray-600">
Project Mycelium unifies compute, storage, networking, and AI into a resilient Mycelium unifies compute, storage, networking, and AI into a self-governing comprehensive decentralized infrastructure fabric.
ecosystem that preserves data sovereignty, powers seamless collaboration,
and keeps every layer of your infrastructure secure end to end on decentralized infrastructure.
</P> </P>
</FadeIn> </FadeIn>
</div> </div>

View File

@@ -0,0 +1,104 @@
"use client";
import { motion } from "framer-motion";
import { StackedCubes } from "@/components/ui/StackedCubes";
import { P, Eyebrow, H3 } from "@/components/Texts";
import { FadeIn } from "@/components/ui/FadeIn";
export function StackSectionDark() {
return (
<section className="relative w-full bg-[#171717] overflow-hidden">
{/* ✅ Top horizontal line with spacing */}
<div className="max-w-7xl bg-[#111111] mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
<div className="w-full border-t border-l border-r border-gray-600" />
{/* === Background Layer === */}
<div className="absolute inset-0 z-0 bg-transparent border-t-0 border-b-0 border-gray-600">
{/* Central main aura */}
<motion.div
className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-[1200px] h-[1200px] rounded-full pointer-events-none"
style={{
background:
"radial-gradient(circle, rgba(180,255,255,0.55) 0%, rgba(0,210,255,0.35) 5%, rgba(255,255,255,0) 10%)",
filter: "blur(140px)",
}}
animate={{
opacity: [0.5, 0.8, 0.5],
scale: [1, 1.05, 1],
}}
transition={{
duration: 9,
repeat: Infinity,
ease: "easeInOut",
}}
/>
{/* Faint cyan mist in the back for depth */}
<motion.div
className="absolute left-[70%] top-[30%] -translate-x-1/2 -translate-y-1/2 w-[1600px] h-[1600px] rounded-full pointer-events-none"
style={{
background:
"radial-gradient(circle, rgba(100,220,255,0.25) 0%, rgba(200,255,255,0.15) 20§§%, rgba(255,255,255,0) 30%)",
filter: "blur(200px)",
}}
animate={{
opacity: [0.2, 0.35, 0.2],
scale: [1, 1.1, 1],
}}
transition={{
duration: 12,
repeat: Infinity,
ease: "easeInOut",
delay: 3,
}}
/>
</div>
{/* === Content === */}
<div className="relative mx-auto max-w-7xl px-6 lg:px-12 border border-t-0 border-b-0 border-gray-600 grid grid-cols-1 lg:grid-cols-3 gap-16 items-center py-24 ">
{/* Left Column - Text */}
<div className="text-center lg:text-left z-10">
<FadeIn>
<Eyebrow color="accent">Technology Layers</Eyebrow>
<H3 color="white" className="">
Mycelium Stack
</H3>
</FadeIn>
<FadeIn>
<P color="dark" className="mt-6 text-gray-200">
Mycelium unifies compute, storage, networking, and AI into a self-governing comprehensive decentralized infrastructure fabric.
</P>
</FadeIn>
</div>
{/* Right Column - Animated Stack */}
<div className="lg:col-span-2 flex items-center justify-center lg:justify-start relative z-10 pt-10">
<motion.div
initial={{ y: 30, opacity: 0 }}
whileInView={{ y: 0, opacity: 1 }}
transition={{ duration: 1.2, ease: "easeOut" }}
viewport={{ once: true }}
>
<motion.div
animate={{
y: [0, -10, 0],
rotateZ: [0, 0.5, -0.5, 0],
}}
transition={{
duration: 6,
repeat: Infinity,
ease: "easeInOut",
}}
className="relative"
>
<StackedCubes />
</motion.div>
</motion.div>
</div>
</div>
{/* ✅ Bottom horizontal line with spacing */}
<div className="w-full border-b border-gray-600" />
<div className="max-w-7xl bg-transparent mx-auto py-6 border border-t-0 border-b-0 border-gray-600"></div>
</section>
);
}

Some files were not shown because too many files have changed in this diff Show More