11 Commits

Author SHA1 Message Date
fbe5026b15 feat: add home.png cloud image asset
- Added new home.png image to public/images/cloud/ directory for use in HomeTab component
2025-11-26 14:24:55 +01:00
786b7b9fee refactor: update HomeTab cloud image from reserve.png to home.png and adjust object positioning
- Changed image source from /images/cloud/reserve.png to /images/cloud/home.png
- Added object-top class to image for better positioning
2025-11-26 14:21:25 +01:00
d6a5f70bd6 refactor: update "Explore Docs" buttons across all pages to link to docs.projectmycelium.com
- Changed all "Explore Docs" buttons from internal links to external docs.projectmycelium.com links with target="_blank"
- Updated CloudArchitecture, CloudHeroNew, CloudIntro, GpuHero, NodeHero, StorageHero, and CallToAction components
- Added "Explore Docs" buttons to AgentHeroAlt and ComputeCapabilities components
- Updated HomeBlink, HomeSpotlight, and HomeCTA to use external docs link instead of onClick
2025-11-26 14:06:07 +01:00
1834ec9391 get changes from development 2025-11-25 16:34:40 +02:00
67fb2fd4ac refactor: remove arrow icons and clean up "Explore Docs" button text across multiple hero sections
- Removed arrow icon (→) from "Explore Docs" buttons in CloudHeroNew, GpuHero, and StorageHero components
- Removed ArrowRightIcon from HomeCTA "Explore Docs" button
- Fixed whitespace formatting in CloudArchitecture "Explore Docs" button
- Added comment block in Homepod for commented out "Explore Docs" button
2025-11-24 15:07:56 +01:00
3071e87a9d Merge branch 'development' 2025-11-24 14:56:34 +01:00
05974f5b0e Merge branch 'development' 2025-11-24 14:17:42 +01:00
a00c090162 Merge branch 'development' 2025-11-24 13:10:41 +01:00
3a217c2d66 updated search keyword 2025-11-24 10:17:16 +02:00
ea8c3546c9 addedd png logo for google search 2025-11-23 13:20:37 +02:00
c784783242 added sitemap 2025-11-23 12:35:59 +02:00
27 changed files with 170 additions and 50 deletions

View File

@@ -2,12 +2,13 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/favicon-32.png" sizes="32x32" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="google-site-verification" content="rRrZkMEhdC4yFe_BrENEzYmy2bRfD-VE6RTRiDJNLkg" />
<title>Project Mycelium - Built for Digital Sovereignty</title>
<meta name="description" content="Discover Project Mycelium. A sovereign peer-to-peer network for private communication, storage, and compute. Build and run your digital environment on infrastructure you control." />
<meta name="keywords" content="Project Mycelium, Mycelium, digital sovereignty, decentralized network, peer-to-peer infrastructure, private storage, secure compute, sovereign cloud, edge cloud" />
<meta name="keywords" content="Project Mycelium, ProjectMycelium, projectmycelium, Mycelium, decentralized network, peer-to-peer infrastructure, private storage, secure compute, sovereign cloud, edge cloud" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Mulish:wght@400;500;700&display=swap" rel="stylesheet" />

BIN
public/favicon-32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

BIN
public/images/cloudhome.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

BIN
public/images/reserve2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 KiB

6
public/robots.txt Normal file
View File

@@ -0,0 +1,6 @@
User-agent: *
Allow: /
Sitemap: https://www.projectmycelium.com/sitemap.xml

59
public/sitemap.xml Normal file
View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.projectmycelium.com/</loc>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/cloud</loc>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/network</loc>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/agents</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/download</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/compute</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/storage</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/gpu</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/pods</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/nodes</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.projectmycelium.com/mediakit</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
</urlset>

View File

@@ -30,6 +30,14 @@ export function Footer() {
<Link to="/nodes" className="text-sm text-gray-700 hover:text-cyan-500 transition-colors">
Nodes
</Link>
<a
href="https://docs.projectmycelium.com/"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-gray-700 hover:text-cyan-500 transition-colors"
>
Docs
</a>
<Link to="/mediakit" className="text-sm text-gray-700 hover:text-cyan-500 transition-colors">
Media Kit
</Link>

View File

@@ -1,6 +1,7 @@
'use client'
import { Eyebrow, H3, P } from '@/components/Texts'
import { Button } from '@/components/Button'
export function AgentHeroAlt() {
return (
@@ -33,6 +34,16 @@ Private, local, and autonomous by design, they give you everything you need to b
<div className="mt-10 flex items-center gap-x-6">
{/* TODO: Hero CTAs (Follow Development / Explore Docs) to be added when links are ready.
Previously two Buttons here with href="#". */}
<Button
variant="solid"
color="cyan"
as="a"
to="https://docs.projectmycelium.com/ai-agent-framework/"
target="_blank"
rel="noreferrer noopener"
>
Explore docs
</Button>
</div>
</div>
</div>

View File

@@ -67,14 +67,14 @@ export function CallToAction() {
<Button
as="a"
to="https://threefold.info/mycelium_network/docs/"
to="https://docs.projectmycelium.com/ai-agent-framework/"
variant="link"
color="white"
className="inline-flex items-center gap-1.5"
target="_blank"
rel="noopener noreferrer"
>
Follow Development
Explore Docs
<span aria-hidden="true"></span>
</Button>
</div>

View File

@@ -50,7 +50,7 @@ export function CallToAction() {
</p>
{/* ✅ Two cards, stacked center with spacing */}
<div className="mt-10 flex flex-wrap justify-center gap-x-10 gap-y-8">
<div className="mt-6 flex flex-wrap justify-center gap-x-6 gap-y-6">
<div className="flex flex-col items-center text-center max-w-xs">
<Button to="/nodes" variant="solid" color="cyan" className="mt-4">
Host a Node

View File

@@ -75,8 +75,8 @@ export function CloudArchitecture() {
<Button variant="solid" color="cyan" href="/start">
Get Started
</Button>
<Button variant="outline" color="white" href="/docs">
Explore Docs
<Button variant="outline" color="white" href="https://docs.projectmycelium.com/" target="_blank">
Explore Docs
</Button>
</div>
</Container>

View File

@@ -42,12 +42,12 @@ export function CloudHeroNew() {
</Button>
<Button
as="a"
to="https://myceliumcloud.tf/docs"
to="https://docs.projectmycelium.com/cloud/"
variant="outline"
target="_blank"
rel="noopener noreferrer"
>
Explore Docs <span aria-hidden="true"></span>
Explore Docs
</Button>
</div>
</div>

View File

@@ -59,20 +59,19 @@ const tabs = [
},
];
const tabButtons = {
const tabButtons: Record<string, { primary: string; secondary?: string }> = {
kubernetes: {
primary: "Deploy a Cluster",
secondary: "Learn More",
},
vdc: {
primary: "Follow Development",
secondary: "Learn More",
primary: "Learn More",
},
qsfs: {
primary: "View Docs",
secondary: "Explore Integration",
},
} as const;
};
export function CloudIntro() {
const [active, setActive] = useState("kubernetes");
@@ -81,13 +80,12 @@ export function CloudIntro() {
const primaryLinks: Record<string, string | undefined> = {
kubernetes: "https://myceliumcloud.tf",
vdc: undefined,
vdc: "https://docs.projectmycelium.com/vdc/",
qsfs: undefined,
};
const secondaryLinks: Record<string, string | undefined> = {
kubernetes: "https://myceliumcloud.tf/docs",
vdc: "https://threefold.info/mycelium_vdc/docs/",
kubernetes: "https://docs.projectmycelium.com/cloud/kubernetes-basics/",
qsfs: undefined,
};
@@ -123,9 +121,9 @@ export function CloudIntro() {
{/* Left: Code UI */}
<div className="w-full lg:w-1/2">
<img
src="/images/cloud/reserve.png"
src="/images/cloud/reserve3.png"
alt="Mycelium Cloud reserve"
className="w-full h-auto rounded-xl border border-white/10 object-cover"
className="w-full h-full object-contain"
/>
</div>
@@ -173,7 +171,7 @@ export function CloudIntro() {
</ul>
</div>
{currentButtons && (
{currentButtons && active !== "qsfs" && (
<div className="mt-8 flex flex-wrap gap-4">
<Button
as={primaryLinks[active] ? "a" : undefined}
@@ -187,17 +185,19 @@ export function CloudIntro() {
{currentButtons.primary}
</Button>
<Button
as={secondaryLinks[active] ? "a" : undefined}
to={secondaryLinks[active] ?? "#"}
variant="outline"
color="white"
{...(secondaryLinks[active]
? { target: "_blank", rel: "noopener noreferrer" }
: {})}
>
{currentButtons.secondary}
</Button>
{currentButtons.secondary && (
<Button
as={secondaryLinks[active] ? "a" : undefined}
to={secondaryLinks[active] ?? "#"}
variant="outline"
color="white"
{...(secondaryLinks[active]
? { target: "_blank", rel: "noopener noreferrer" }
: {})}
>
{currentButtons.secondary}
</Button>
)}
</div>
)}

View File

@@ -2,6 +2,7 @@
import { Container } from '@/components/Container'
import { Eyebrow, H3, P } from '@/components/Texts'
import { Button } from '@/components/Button'
const capabilities = [
{
@@ -77,6 +78,18 @@ export function ComputeCapabilities() {
{/* Button section */}
{/* TODO: CTA buttons (Get Started / Explore Docs) to be re-enabled when real links are available.
Previously rendered here as two Buttons with href="#". */}
<div className="mt-10 flex justify-center gap-x-6">
<Button
variant="outline"
color="white"
as="a"
to="https://docs.projectmycelium.com/"
target="_blank"
rel="noreferrer noopener"
>
Explore docs
</Button>
</div>
</Container>
</div>

View File

@@ -25,8 +25,8 @@ export function GpuHero() {
<Button to="/gpu#gpu-getting-started" variant="solid" color="cyan">
How it works
</Button>
<Button to="/gpu#gpu-architecture" variant="outline">
Explore Docs <span aria-hidden="true"></span>
<Button to="https://docs.projectmycelium.com/" as="a" variant="outline" target="_blank">
Explore Docs
</Button>
</div>
</div>

View File

@@ -49,7 +49,14 @@ export function HomeBlink({ onGetStartedClick }: { onGetStartedClick: () => void
<Button variant="solid" color="cyan" onClick={onGetStartedClick}>
Enter the Network
</Button>
<Button variant="outline" color="gray" onClick={onGetStartedClick}>
<Button
variant="outline"
color="gray"
as="a"
to="https://docs.projectmycelium.com/"
target="_blank"
rel="noreferrer noopener"
>
Explore Docs
</Button>
</div>

View File

@@ -44,7 +44,14 @@ export function HomeSpotlight({
<Button variant="solid" color="cyan" onClick={onGetStartedClick}>
Enter the Network
</Button>
<Button variant="outline" color="gray" onClick={onGetStartedClick}>
<Button
variant="outline"
color="gray"
as="a"
to="https://docs.projectmycelium.com/"
target="_blank"
rel="noreferrer noopener"
>
Explore Docs
</Button>
</div>

View File

@@ -119,8 +119,8 @@ export function HomeTab() {
<div className="absolute top-10 right-0 bottom-0 left-10 overflow-hidden
rounded-tl-xl bg-gray-900 shadow-2xl outline outline-white/10">
<img
src="/images/cloud/reserve.png"
className="size-full object-cover"
src="/images/cloud/home.png"
className="size-full object-cover object-top"
/>
</div>
</div>

View File

@@ -28,10 +28,14 @@ export function HomeCTA() {
</button>
{/* Button 2 */}
<button className="inline-flex items-center justify-between bg-white border border-gray-300 rounded-full px-6 py-3 text-sm font-semibold shadow-sm hover:border-cyan-500 transition">
<a
href="https://docs.projectmycelium.com/"
target="_blank"
rel="noreferrer noopener"
className="inline-flex items-center justify-between bg-white border border-gray-300 rounded-full px-6 py-3 text-sm font-semibold shadow-sm hover:border-cyan-500 transition"
>
Explore Docs
<ArrowRightIcon className="h-4 w-4 ml-2 text-gray-700" />
</button>
</a>
</div>
</div>

View File

@@ -103,7 +103,7 @@ export function Hero() {
</Button>
<Button
as="a"
to="https://threefold.info/mycelium_network/docs/"
to="https://docs.projectmycelium.com/network/"
variant="outline"
color="gray"
target="_blank"

View File

@@ -45,15 +45,15 @@ export function CallToAction() {
while expanding the sovereign digital grid.
</p>
<div className="mt-6 flex flex-wrap justify-center gap-x-10 gap-y-8">
<div className="mt-6 flex flex-wrap justify-center gap-x-6 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">
Join Mycelium
<Button to="https://docs.projectmycelium.com/hosters/buy-node/" variant="solid" color="cyan" className="mt-4" target="_blank">
Join Mycelium Grid
</Button>
</div>
<div className="flex flex-col items-center text-center max-w-xs">
<Button to="/docs" variant="outline" color="white" className="mt-4">
<Button to="https://docs.projectmycelium.com/hosters/" variant="outline" color="white" className="mt-4" target="_blank">
Explore Docs
</Button>
</div>

View File

@@ -36,7 +36,7 @@ export function NodeHero() {
>
How it works
</Button>
<Button to="https://threefold.info/mycelium_economics/docs/faq/hosting_faq" as="a" variant="outline" target="_blank">
<Button to="https://docs.projectmycelium.com/hosters/" as="a" variant="outline" target="_blank">
Explore Docs
</Button>
</div>

View File

@@ -96,11 +96,11 @@ export function CallToAction() {
</Button>
</div>
<div className="flex flex-col items-center text-center max-w-xs">
{/* <div className="flex flex-col items-center text-center max-w-xs">
<Button to="/pods#pods-learn-more" variant="outline" color="white" className="mt-4">
Learn More
</Button>
</div>
</div> */}
</div>
</div>
</Container>

View File

@@ -31,7 +31,7 @@ export default function Homepod() {
Mycelium Pods - Coming Soon
</Eyebrow>
<H3 className="mt-4">
Your Private Space in the New Internet
Your Private Space on the Network
</H3>
<P className="mt-6 text-gray-600">
Pods are personal digital spaces on the Mycelium Network. They are private, persistent, and fully under your control. Run conversations, files, and tools directly on the network instead of through central servers
@@ -45,9 +45,12 @@ export default function Homepod() {
>
Join the Waitlist
</Button>
<Button to="/pods#pods-learn-more" variant="outline">
{/* The updated onClick handler calls the function
<Button to="#" variant="outline">
Explore Docs
</Button>
*/}
</div>
</div>
</div>

View File

@@ -26,10 +26,11 @@ export function StorageHero() {
How It Works
</Button>
<Button
to="/storage#storage-developer-experience"
to="https://docs.projectmycelium.com/"
variant="outline"
target="_blank"
>
Explore Docs <span aria-hidden="true"></span>
Explore Docs
</Button>
</div>
</div>