forked from emre/www_projectmycelium_com
feat: update homepage layout and visual styling
- Reorganized homepage sections by adding HomeHostingDark and HomeComparisonTable components - Changed background color of slider section from #0b0b0b to #111111 for better contrast - Updated card styling in CloudArchitecture to use semi-transparent gray background (bg-gray-50/25) - Modified paragraph text styling to use leading-tight instead of leading-relaxed for better readability - Reordered HomeBenefits section placement in the page flow
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 6.1 MiB |
@@ -163,4 +163,4 @@ export const DownloadCardDescription = createTextComponent(
|
|||||||
)
|
)
|
||||||
|
|
||||||
export const CT = createTextComponent('span', 'text-lg lg:text-xl font-semibold')
|
export const CT = createTextComponent('span', 'text-lg lg:text-xl font-semibold')
|
||||||
export const CP = createTextComponent('p', 'text-sm lg:text-base tracking-wide leading-relaxed font-light')
|
export const CP = createTextComponent('p', 'text-sm lg:text-base tracking-wide leading-tight font-light')
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export function CloudArchitecture() {
|
|||||||
{architectureSections.map((section) => (
|
{architectureSections.map((section) => (
|
||||||
<div
|
<div
|
||||||
key={section.title}
|
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"
|
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 "
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<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 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">
|
||||||
|
|||||||
60
src/pages/home/HomeComparisonTable.tsx
Normal file
60
src/pages/home/HomeComparisonTable.tsx
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline'
|
||||||
|
import { Eyebrow, H3, P, CT } from '../../components/Texts'
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{ name: 'Infrastructure Ownership', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Data Stays Local & Encrypted', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Private AI & LLMs on Your Own Hardware', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Self-Healing, No Single Point of Failure', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Zero-Trust, Cryptographic Identity', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Censorship-Resistant', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Standard Tooling (Kube, S3, Agents)', cloud: <CheckIcon className="h-6 w-6 text-green-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
{ name: 'Vendor Lock-In', cloud: <CheckIcon className="h-6 w-6 text-red-500" />, mycelium: <XMarkIcon className="h-6 w-6 text-red-500" /> },
|
||||||
|
{ name: 'One-Time Hardware Cost (No Rent Forever)', cloud: <XMarkIcon className="h-6 w-6 text-red-500" />, mycelium: <CheckIcon className="h-6 w-6 text-green-500" /> },
|
||||||
|
]
|
||||||
|
|
||||||
|
export function HomeComparisonTable() {
|
||||||
|
return (
|
||||||
|
<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-6xl lg:px-8">
|
||||||
|
<Eyebrow>COMPARISON</Eyebrow>
|
||||||
|
<H3 className="mt-2">Why People Choose Mycelium</H3>
|
||||||
|
<P className="mx-auto mt-5 max-w-prose">
|
||||||
|
Mycelium brings cloud-grade automation to infrastructure you control — without surrendering data, identity,
|
||||||
|
or uptime to centralized platforms.
|
||||||
|
</P>
|
||||||
|
|
||||||
|
<div className="mt-16 overflow-x-auto">
|
||||||
|
<table className="mx-auto w-full max-w-5xl table-auto border-collapse text-left">
|
||||||
|
<thead className="bg-cyan-50/60">
|
||||||
|
<tr className="text-base font-semibold text-slate-700">
|
||||||
|
<th className="py-4 pl-3 text-left">Capability</th>
|
||||||
|
<th className="py-4 pl-3 text-left">Traditional Cloud</th>
|
||||||
|
<th className="py-4 pl-3 text-left">Mycelium</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody className="divide-y divide-slate-200">
|
||||||
|
{features.map((feature) => (
|
||||||
|
<tr key={feature.name}>
|
||||||
|
<td className="py-3 pl-3">
|
||||||
|
<CT>{feature.name}</CT>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td className="py-3 pl-3">
|
||||||
|
{feature.cloud}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td className="py-3 pl-3">
|
||||||
|
{feature.mycelium}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
))}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
65
src/pages/home/HomeHosting.tsx
Normal file
65
src/pages/home/HomeHosting.tsx
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import {
|
||||||
|
ArrowPathIcon,
|
||||||
|
CloudArrowUpIcon,
|
||||||
|
ServerIcon,
|
||||||
|
ShieldCheckIcon,
|
||||||
|
} from '@heroicons/react/24/outline'
|
||||||
|
import { CP, CT, Eyebrow, H3, P } from '../../components/Texts'
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
name: 'Kubernetes Clusters',
|
||||||
|
description: 'Deploy and scale containerized apps across your own hardware.',
|
||||||
|
icon: ServerIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'AI Agents & LLM Runtimes',
|
||||||
|
description: 'Run open-source models locally, securely, and offline.',
|
||||||
|
icon: ArrowPathIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'S3-Compatible Storage',
|
||||||
|
description: 'Your own personal over-the-network drive, encrypted end-to-end.',
|
||||||
|
icon: CloudArrowUpIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mesh VPN & Zero-Trust Networking',
|
||||||
|
description: 'Securely connect all your devices and remote locations.',
|
||||||
|
icon: ShieldCheckIcon,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export function HomeHosting() {
|
||||||
|
return (
|
||||||
|
<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">
|
||||||
|
<Eyebrow>DEPLOY</Eyebrow>
|
||||||
|
<H3 className="mt-2">Run Real Infrastructure on Your Own Hardware</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="grid grid-cols-1 gap-12 lg:grid-cols-4">
|
||||||
|
{features.map((feature) => (
|
||||||
|
<div key={feature.name} className="relative">
|
||||||
|
<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">
|
||||||
|
<span className="absolute -top-6 left-1/2 -translate-x-1/2 transform rounded-xl bg-indigo-500 p-3 shadow-lg">
|
||||||
|
<feature.icon aria-hidden="true" className="size-8 text-white" />
|
||||||
|
</span>
|
||||||
|
<CT as="h3" className="mt-4">
|
||||||
|
{feature.name}
|
||||||
|
</CT>
|
||||||
|
<CP color="secondary" className="mt-4">
|
||||||
|
{feature.description}
|
||||||
|
</CP>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
66
src/pages/home/HomeHostingDark.tsx
Normal file
66
src/pages/home/HomeHostingDark.tsx
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import {
|
||||||
|
CpuChipIcon,
|
||||||
|
CubeIcon,
|
||||||
|
CircleStackIcon,
|
||||||
|
LockClosedIcon,
|
||||||
|
} from '@heroicons/react/24/outline'
|
||||||
|
import { CP, CT, Eyebrow, H3, P } from '../../components/Texts'
|
||||||
|
import { DarkCard } from '../../components/ui/cards'
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
name: 'Kubernetes Clusters',
|
||||||
|
description: 'Deploy and scale containerized apps across your own hardware.',
|
||||||
|
icon: CubeIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'AI Agents & LLM Runtimes',
|
||||||
|
description: 'Run open-source models locally, securely, and offline.',
|
||||||
|
icon: CpuChipIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'S3-Compatible Storage',
|
||||||
|
description: 'Your own personal over-the-network drive, encrypted end-to-end.',
|
||||||
|
icon: CircleStackIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mesh VPN & Zero-Trust Networking',
|
||||||
|
description: 'Securely connect all your devices and remote locations.',
|
||||||
|
icon: LockClosedIcon,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export function HomeHostingDark() {
|
||||||
|
return (
|
||||||
|
<div className="relative py-24 bg-[#111111] 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">
|
||||||
|
<Eyebrow>DEPLOY</Eyebrow>
|
||||||
|
<H3 className="mt-2 text-gray-200">Run Real Infrastructure on Your Own Hardware</H3>
|
||||||
|
<P className="mx-auto mt-5 max-w-prose text-gray-400">
|
||||||
|
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="grid grid-cols-1 gap-12 lg:grid-cols-4">
|
||||||
|
{features.map((feature) => (
|
||||||
|
<div key={feature.name} className="relative">
|
||||||
|
<DarkCard className="flex h-full flex-col pt-16">
|
||||||
|
<span className="absolute -top-6 left-1/2 -translate-x-1/2 transform rounded-xl bg-cyan-600 hover:bg-cyan-500 p-3 shadow-lg">
|
||||||
|
<feature.icon aria-hidden="true" className="size-8 text-white" />
|
||||||
|
</span>
|
||||||
|
<CT as="h3" className="mt-4 text-gray-200">
|
||||||
|
{feature.name}
|
||||||
|
</CT>
|
||||||
|
<CP color="secondary" className="mt-4 text-gray-400">
|
||||||
|
{feature.description}
|
||||||
|
</CP>
|
||||||
|
</DarkCard>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -6,6 +6,8 @@ import { WorldMap } from './HomeGlobe'
|
|||||||
import { HomeBenefits } from './HomeBenefits'
|
import { HomeBenefits } from './HomeBenefits'
|
||||||
import { CallToAction } from './CallToAction'
|
import { CallToAction } from './CallToAction'
|
||||||
import { HomeSlider } from './HomeSlider'
|
import { HomeSlider } from './HomeSlider'
|
||||||
|
import { HomeHostingDark } from './HomeHostingDark'
|
||||||
|
import { HomeComparisonTable } from './HomeComparisonTable'
|
||||||
|
|
||||||
|
|
||||||
export default function HomePage() {
|
export default function HomePage() {
|
||||||
@@ -28,13 +30,20 @@ export default function HomePage() {
|
|||||||
<StackSectionLight />
|
<StackSectionLight />
|
||||||
</AnimatedSection>
|
</AnimatedSection>
|
||||||
|
|
||||||
|
<AnimatedSection>
|
||||||
|
<HomeHostingDark />
|
||||||
|
</AnimatedSection>
|
||||||
|
|
||||||
|
<AnimatedSection>
|
||||||
|
<HomeBenefits />
|
||||||
|
</AnimatedSection>
|
||||||
|
|
||||||
<AnimatedSection ref={sliderRef}>
|
<AnimatedSection ref={sliderRef}>
|
||||||
<HomeSlider />
|
<HomeSlider />
|
||||||
</AnimatedSection>
|
</AnimatedSection>
|
||||||
|
|
||||||
<AnimatedSection>
|
<AnimatedSection>
|
||||||
<HomeBenefits />
|
<HomeComparisonTable />
|
||||||
</AnimatedSection>
|
</AnimatedSection>
|
||||||
|
|
||||||
<AnimatedSection>
|
<AnimatedSection>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export function HomeSlider() {
|
|||||||
));
|
));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full h-full py-20 bg-[#0b0b0b]">
|
<div className="w-full h-full py-20 bg-[#111111]">
|
||||||
<div className="max-w-7xl mx-auto pl-4">
|
<div className="max-w-7xl mx-auto pl-4">
|
||||||
<Eyebrow className="text-left">
|
<Eyebrow className="text-left">
|
||||||
Ecosystem
|
Ecosystem
|
||||||
|
|||||||
Reference in New Issue
Block a user