feat(web): rewrite hero (pain-first) + streamline page + enterprise tier
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

Hero: 'Your Claude Code sessions work alone. claudemesh connects
them.' Three pain cards (context dies, teams relay by hand, setup
per developer). Solution paragraph focuses on shared wire with
E2E encryption.

Page: removed 5 redundant sections (Surfaces, LaptopToLaptop,
MeshVsMcp, MeetsYou, BeyondTerminal, DemoDashboard). Kept the
strongest: Hero, Features, WhatIsClaudemesh, Timeline, Pricing,
FAQ, CTA, MeshStats.

Pricing: added Enterprise tier with Contact sales → info@claudemesh.com.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-10 02:00:27 +01:00
parent 816c42feae
commit 5df2664bae
3 changed files with 99 additions and 72 deletions

View File

@@ -1,22 +1,13 @@
import { Hero } from "~/modules/marketing/home/hero";
import { Surfaces } from "~/modules/marketing/home/surfaces";
import { Pricing } from "~/modules/marketing/home/pricing";
import { LaptopToLaptop } from "~/modules/marketing/home/laptop-to-laptop";
import { Features } from "~/modules/marketing/home/features";
import { MeshVsMcp } from "~/modules/marketing/home/mesh-vs-mcp";
import { MeetsYou } from "~/modules/marketing/home/meets-you";
import { BeyondTerminal } from "~/modules/marketing/home/beyond-terminal";
import { DemoDashboard } from "~/modules/marketing/home/demo-dashboard";
import { WhatIsClaudemesh } from "~/modules/marketing/home/what-is-claudemesh";
import { Timeline } from "~/modules/marketing/home/timeline";
import { Pricing } from "~/modules/marketing/home/pricing";
import { FAQ } from "~/modules/marketing/home/faq";
import { CallToAction } from "~/modules/marketing/home/cta";
import { MeshStats } from "~/modules/marketing/home/mesh-stats";
import { LatestNewsToaster } from "~/modules/marketing/home/toaster";
// Revalidate the page every 60s so the mesh-stats counter stays fresh
// without hammering the DB. The /api/public/stats endpoint has its own
// 60s in-memory cache too.
export const revalidate = 60;
const HomePage = () => {
@@ -26,16 +17,10 @@ const HomePage = () => {
style={{ fontFamily: "var(--cm-font-sans)" }}
>
<Hero />
<Surfaces />
<Pricing />
<LaptopToLaptop />
<Features />
<MeshVsMcp />
<MeetsYou />
<WhatIsClaudemesh />
<DemoDashboard />
<BeyondTerminal />
<Timeline />
<Pricing />
<FAQ />
<CallToAction />
<MeshStats />

View File

@@ -1,15 +1,6 @@
import Link from "next/link";
import { Reveal, SectionIcon } from "./_reveal";
const LOGOS = [
"Claude Code",
"MCP",
"libsodium",
"Bun",
"TypeScript",
"MIT",
];
export const Hero = () => {
return (
<section className="relative overflow-hidden border-b border-[var(--cm-border)] bg-[var(--cm-bg)]">
@@ -26,43 +17,40 @@ export const Hero = () => {
<SectionIcon glyph="mesh" />
</Reveal>
<Reveal delay={1} className="mb-5">
<div
className="flex items-center gap-2 text-[11px] uppercase tracking-[0.22em] text-[var(--cm-clay)]"
style={{ fontFamily: "var(--cm-font-mono)" }}
>
<span className="inline-block h-1 w-1 rounded-full bg-[var(--cm-clay)]" />
meshing
</div>
</Reveal>
<Reveal delay={2}>
<Reveal delay={1}>
<h1
className="max-w-5xl text-center text-[clamp(2.75rem,7vw,5.75rem)] font-medium leading-[1.05] tracking-tight text-[var(--cm-fg)]"
className="max-w-4xl text-center text-[clamp(2.75rem,7vw,5.25rem)] font-medium leading-[1.08] tracking-tight text-[var(--cm-fg)]"
style={{ fontFamily: "var(--cm-font-serif)" }}
>
Built for{" "}
<span className="inline-flex items-baseline gap-2 text-[var(--cm-clay)]">
<span className="italic">{"<"}</span>
<span className="italic">swarms</span>
<span className="italic">{">"}</span>
Your Claude Code sessions{" "}
<span className="text-[var(--cm-clay)]">work alone.</span>
<br />
<span className="text-[var(--cm-fg-secondary)]">
claudemesh connects them.
</span>
</h1>
</Reveal>
<Reveal delay={3}>
<Reveal delay={2}>
<p
className="mx-auto mt-6 max-w-2xl text-center text-lg leading-[1.65] text-[var(--cm-fg-secondary)] md:text-xl"
className="mx-auto mt-8 max-w-2xl text-center text-lg leading-[1.65] text-[var(--cm-fg-secondary)] md:text-xl"
style={{ fontFamily: "var(--cm-font-serif)" }}
>
Your Claude Code sessions form a team. They message each other,
share files, query a shared database, build collective memory, and
self-organize through groups all end-to-end encrypted. 43 MCP
tools. Five persistence backends. One command to launch. The broker
routes ciphertext; it never reads your messages.
<span className="block pt-2 text-[var(--cm-clay)]">
Open-source CLI. Free during public beta.
</span>
Right now you relay AI insights through Slack threads. You re-explain
context every time you switch machines. Your team{"'"}s MCPs, skills,
and connections require manual setup per developer.
</p>
</Reveal>
<Reveal delay={3}>
<p
className="mx-auto mt-4 max-w-2xl text-center text-lg leading-[1.65] text-[var(--cm-fg)] md:text-xl"
style={{ fontFamily: "var(--cm-font-serif)" }}
>
claudemesh gives every Claude Code session a shared wire. Each Claude
keeps its own repo and perspective. The mesh carries messages, state,
memory, files, and tools between them end-to-end encrypted. The
broker routes ciphertext. It never reads your messages.
</p>
</Reveal>
@@ -83,39 +71,63 @@ export const Hero = () => {
style={{ fontFamily: "var(--cm-font-mono)" }}
>
<span className="text-[var(--cm-clay)]">$</span>
<span>npm i -g claudemesh-cli</span>
<span>curl -fsSL claudemesh.com/install | bash</span>
</div>
</div>
</Reveal>
{/* Pain points — three concrete scenarios */}
<Reveal delay={5}>
<div className="mx-auto mt-20 grid max-w-4xl gap-6 md:grid-cols-3">
{([
{
label: "Context dies",
body: "Close the terminal. Everything your Claude learned disappears. Open a new session — start from zero.",
},
{
label: "Teams relay by hand",
body: "Your backend Claude finds a bug. You copy the insight into Slack. The frontend dev pastes it into their Claude. Three tools for one thought.",
},
{
label: "Setup per developer",
body: "Every team member configures their own MCPs, skills, and connections. No shared standard. No shared context.",
},
] as const).map((pain) => (
<div
key={pain.label}
className="rounded-[var(--cm-radius-md)] border border-[var(--cm-border)] bg-[var(--cm-bg-elevated)] p-6"
>
<div
className="mb-2 text-[11px] uppercase tracking-[0.18em] text-[var(--cm-clay)]"
style={{ fontFamily: "var(--cm-font-mono)" }}
>
{pain.label}
</div>
<p
className="text-[14px] leading-[1.6] text-[var(--cm-fg-secondary)]"
style={{ fontFamily: "var(--cm-font-serif)" }}
>
{pain.body}
</p>
</div>
))}
</div>
</Reveal>
<Reveal delay={6}>
<p
className="mt-6 text-sm text-[var(--cm-fg-tertiary)]"
className="mt-12 text-center text-sm text-[var(--cm-fg-tertiary)]"
style={{ fontFamily: "var(--cm-font-sans)" }}
>
Or{" "}
Open-source CLI · Free during public beta ·{" "}
<Link
href="/getting-started"
href="https://github.com/alezmad/claudemesh-cli"
className="underline decoration-[var(--cm-fg-tertiary)] underline-offset-4 transition-colors hover:text-[var(--cm-fg)] hover:decoration-[var(--cm-clay)]"
>
read the getting started guide
View source
</Link>
</p>
</Reveal>
<Reveal delay={8}>
<div className="mt-20 flex flex-wrap items-center justify-center gap-x-12 gap-y-6 opacity-70">
{LOGOS.map((logo) => (
<div
key={logo}
className="text-xl font-medium tracking-tight text-[var(--cm-fg-secondary)]"
style={{ fontFamily: "var(--cm-font-sans)" }}
>
{logo}
</div>
))}
</div>
</Reveal>
</div>
</section>
);

View File

@@ -136,6 +136,36 @@ export const Pricing = () => {
</div>
</div>
</Reveal>
{/* Enterprise tier */}
<Reveal delay={4}>
<div className="mx-auto mt-6 max-w-[720px] rounded-[var(--cm-radius-md)] border border-dashed border-[var(--cm-border)] p-6 md:p-8">
<div className="flex flex-col items-start gap-4 sm:flex-row sm:items-center sm:justify-between">
<div>
<h3
className="text-[18px] font-medium text-[var(--cm-fg)]"
style={{ fontFamily: "var(--cm-font-serif)" }}
>
Enterprise
</h3>
<p
className="mt-1 text-[13px] leading-[1.5] text-[var(--cm-fg-secondary)]"
style={{ fontFamily: "var(--cm-font-sans)" }}
>
Self-hosted broker. SSO. Custom SAML. Dedicated support.
Air-gapped deployment. SLA.
</p>
</div>
<a
href="mailto:info@claudemesh.com"
className="inline-flex shrink-0 items-center gap-2 rounded-[var(--cm-radius-xs)] border border-[var(--cm-fg-tertiary)] px-5 py-2.5 text-sm font-medium text-[var(--cm-fg)] transition-colors hover:border-[var(--cm-fg)] hover:bg-[var(--cm-bg-elevated)]"
style={{ fontFamily: "var(--cm-font-sans)" }}
>
Contact sales
</a>
</div>
</div>
</Reveal>
</div>
</section>
);