From d0fbc64e7edea562626d6f78c26eb050aca772d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Guti=C3=A9rrez?= <35082514+alezmad@users.noreply.github.com> Date: Sun, 12 Apr 2026 21:17:38 +0100 Subject: [PATCH] feat(web): two-mode pricing (hosted + self-hosted) across landing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrites pricing section from single "public beta" card to side-by-side hosted vs self-hosted comparison reflecting the cleaner product architecture. Enterprise sell is now concrete: "Run our Docker image, point your CLI at it, done — your mesh never leaves your VPC." Updates hero subtitle, CTA, FAQ, and where-mesh-fits claim card to reinforce the two deployment modes consistently across the landing. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/web/src/modules/marketing/home/cta.tsx | 4 +- apps/web/src/modules/marketing/home/faq.tsx | 6 +- .../modules/marketing/home/hero-with-mesh.tsx | 4 +- .../src/modules/marketing/home/pricing.tsx | 273 ++++++++++-------- .../marketing/home/where-mesh-fits.tsx | 2 +- 5 files changed, 163 insertions(+), 126 deletions(-) diff --git a/apps/web/src/modules/marketing/home/cta.tsx b/apps/web/src/modules/marketing/home/cta.tsx index 097d927..40222c2 100644 --- a/apps/web/src/modules/marketing/home/cta.tsx +++ b/apps/web/src/modules/marketing/home/cta.tsx @@ -33,8 +33,8 @@ export const CallToAction = () => { style={{ fontFamily: "var(--cm-font-serif)" }} > Anthropic built Claude Code per developer. The next unlock is - between developers. 43 tools, five databases, E2E encryption — - open-source and ready now. + between developers. Hosted on claudemesh.com or self-hosted in + your VPC — same CLI, same features, same encryption.

diff --git a/apps/web/src/modules/marketing/home/faq.tsx b/apps/web/src/modules/marketing/home/faq.tsx index cca48fa..a8de226 100644 --- a/apps/web/src/modules/marketing/home/faq.tsx +++ b/apps/web/src/modules/marketing/home/faq.tsx @@ -17,7 +17,7 @@ const ITEMS = [ }, { q: "Do I need to run a server?", - a: "No — claudemesh.com hosts the broker for you. If you self-host: Bun runtime + Postgres 16 container, ~50 MB image, deployable via docker-compose (docs/SELF-HOST.md). Two long-lived processes: broker + Postgres. Self-hosting earns you data residency + mesh ownership; hosted gets you zero-ops.", + a: "Not for hosted mode — claudemesh.com runs the broker for you. For enterprise self-hosted mode: run our Docker image (docker compose up -d) with Postgres, Neo4j, Qdrant, and MinIO. Set CLAUDEMESH_BROKER_URL to your own URL and done — your mesh data never leaves your VPC. Same CLI, same features.", }, { q: "Does it work across offices / continents?", @@ -44,8 +44,8 @@ const ITEMS = [ a: "Every peer is gated by a signed ed25519 invite from the mesh owner — the broker rejects anyone whose enrollment signature fails. You pick who to send to (DMs by design, not ambient broadcast), so a malicious invitee can't siphon context unaddressed. The broker can't read payloads, but it does see routing metadata. Revoking keys rotates the mesh.", }, { - q: "Why a hosted broker instead of pure peer-to-peer?", - a: "Rendezvous + offline queueing. Most peers aren't directly addressable — phones roam, laptops NAT, bots live behind firewalls — so a broker is the simplest meet-point. It also holds ciphertext for offline peers until they reconnect. You can self-host (apps/broker, single Bun process + Postgres) and point the CLI at your own via CLAUDEMESH_BROKER_URL.", + q: "Why a broker instead of pure peer-to-peer?", + a: "Rendezvous + offline queueing. Most peers sit behind NAT or firewalls, so a broker is the simplest meet-point. It also holds ciphertext for offline peers until they reconnect. Two deployment modes: hosted on claudemesh.com (zero-ops) or self-hosted in your VPC (docker compose up, set CLAUDEMESH_BROKER_URL, done). Either way, the broker only routes ciphertext — it never reads your messages.", }, { q: "Do I need Claude Code to use claudemesh?", diff --git a/apps/web/src/modules/marketing/home/hero-with-mesh.tsx b/apps/web/src/modules/marketing/home/hero-with-mesh.tsx index 482c736..2fd1f29 100644 --- a/apps/web/src/modules/marketing/home/hero-with-mesh.tsx +++ b/apps/web/src/modules/marketing/home/hero-with-mesh.tsx @@ -68,8 +68,8 @@ export const HeroWithMesh = () => { }} > Share context, files, skills, and MCPs across every Claude Code - session — encrypted, with zero setup. The broker routes ciphertext. - It never reads your messages. + session — end-to-end encrypted. Hosted on claudemesh.com or + self-hosted in your VPC. Same CLI, same wire, your choice.

diff --git a/apps/web/src/modules/marketing/home/pricing.tsx b/apps/web/src/modules/marketing/home/pricing.tsx index 899d95b..1b04fa1 100644 --- a/apps/web/src/modules/marketing/home/pricing.tsx +++ b/apps/web/src/modules/marketing/home/pricing.tsx @@ -1,10 +1,10 @@ import Link from "next/link"; import { Reveal, SectionIcon } from "./_reveal"; -const SHIPPING = [ - "CLI + 43 MCP tools (Claude Code integration)", - "Hosted broker on claudemesh.com", - "E2E encrypted messaging + file sharing", +const HOSTED_INCLUDES = [ + "CLI + MCP server (same binary, every feature)", + "Hosted broker on wss://ic.claudemesh.com/ws", + "E2E encrypted messaging, files, skills, MCPs", "Priority routing (now / next / low)", "Shared state, memory, tasks, and streams", "Per-mesh SQL database, vector search, and graph DB", @@ -12,13 +12,15 @@ const SHIPPING = [ "Mesh invites + ed25519 identity", ]; -const ROADMAP = [ - "Mesh dashboard (browser UI)", - "Message history + retention controls", - "Audit log", - "Slack / WhatsApp / Telegram gateways", - "Self-host broker + SSO", - "Cross-broker federation", +const SELF_HOSTED_INCLUDES = [ + "claudemesh-broker Docker image — one command", + "docker-compose.yml for full stack (broker + Postgres + Neo4j + Qdrant + MinIO)", + "All mesh data stays in your VPC — messages, memories, files, vectors, graph, SQL", + "Same CLI binary — point at your URL via CLAUDEMESH_BROKER_URL", + "SSO / SAML integration", + "Env var reference, backup/restore guide, upgrade procedures", + "Security hardening documentation", + "Air-gapped deployment support", ]; export const Pricing = () => { @@ -33,139 +35,174 @@ export const Pricing = () => { className="text-center text-[clamp(2rem,4.5vw,3.25rem)] font-medium leading-[1.1] text-[var(--cm-fg)]" style={{ fontFamily: "var(--cm-font-serif)" }} > - Get started with claudemesh + Two modes, same CLI

- Free during public beta. The CLI is MIT-licensed. The hosted - broker stays free while the roadmap ships. No billing today. + One binary. Pick where the broker runs. Hosted on claudemesh.com + for zero-ops, or self-hosted behind your firewall for full data + residency.

- -
-
-

- Public beta -

-
-
- Free +
+ {/* Hosted tier */} + +
+
+
+
+ Default +
+

+ Hosted +

-
- no card required +
+
+ Free +
+
+ during public beta +
-
-
-
-
- Shipping today -
-
    - {SHIPPING.map((item) => ( -
  • - - {item} -
  • - ))} -
-
- -
-
- Roadmap · v0.2–v0.3 -
-
    - {ROADMAP.map((item) => ( -
  • - - {item} -
  • - ))} -
-
-
- -

- Paid tiers launch when the dashboard ships. Beta users keep - the free plan for life. + We run the broker. You run the CLI. Your messages are E2E + encrypted — the broker routes ciphertext and never reads + plaintext. 99% of teams start here.

- - Start free - - → - - -
-
-
- {/* Enterprise tier */} - -
-
-
-

- Enterprise -

+
    + {HOSTED_INCLUDES.map((item) => ( +
  • + + {item} +
  • + ))} +
+ +

- Self-hosted broker. SSO. Custom SAML. Dedicated support. - Air-gapped deployment. SLA. + Paid tiers launch when the dashboard ships. Beta users keep + the free plan for life.

+ + Start free → +
- + + + {/* Self-hosted / Enterprise tier */} + +
+
+
+
+ Enterprise +
+

+ Self-hosted +

+
+
+
+ Custom +
+
+ annual license +
+
+
+ +

- Contact sales - + Run the broker in your VPC. Your mesh data — messages, + memories, files, vectors, graph, SQL — never leaves your + infrastructure. Same CLI, same features, your URL. +

+ +
    + {SELF_HOSTED_INCLUDES.map((item) => ( +
  • + + {item} +
  • + ))} +
+ +
+
+ docker compose up -d +
+ export CLAUDEMESH_BROKER_URL=wss://mesh.your-company.com/ws +
+ claudemesh join +
+ + Contact sales + +
-
- + +
); diff --git a/apps/web/src/modules/marketing/home/where-mesh-fits.tsx b/apps/web/src/modules/marketing/home/where-mesh-fits.tsx index 0d3ccd3..e3dfa44 100644 --- a/apps/web/src/modules/marketing/home/where-mesh-fits.tsx +++ b/apps/web/src/modules/marketing/home/where-mesh-fits.tsx @@ -38,7 +38,7 @@ const CARDS: Card[] = [ title: "The wire between Claude Code sessions", theyDo: "Every Claude Code session today is an island. Context dies with the terminal. Skills and MCPs are per-developer. Teammates relay insights through Slack.", - weDo: "claudemesh is one thing: a peer network for Claude Code. Share context, files, skills, MCPs, and slash commands across sessions — end-to-end encrypted. The broker routes ciphertext. It never reads your messages.", + weDo: "claudemesh is one thing: a peer network for Claude Code. Share context, files, skills, MCPs, and slash commands across sessions — end-to-end encrypted. Host the broker on claudemesh.com or run it in your VPC. Same CLI either way.", tone: "claim", }, ];