From b5cccc8ac6e8a67150de9bf025747e7b20d83b3c Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Fri, 10 Apr 2026 01:07:46 +0800 Subject: [PATCH] feat(landing): add OpenClaw and OpenCode to landing page (#596) * feat(landing): add OpenClaw and OpenCode to landing page The landing page hero "Works with" section and i18n text only listed Claude Code and Codex. Updated to include all four supported runtimes: Claude Code, Codex, OpenClaw, and OpenCode. Co-Authored-By: Claude Opus 4.6 (1M context) * feat(landing): remove X (Twitter) button from header nav Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- .../landing/components/landing-header.tsx | 10 +-- .../landing/components/landing-hero.tsx | 10 +++ .../features/landing/components/shared.tsx | 75 +++++++++++++++++++ apps/web/features/landing/i18n/en.ts | 8 +- apps/web/features/landing/i18n/zh.ts | 8 +- 5 files changed, 94 insertions(+), 17 deletions(-) diff --git a/apps/web/features/landing/components/landing-header.tsx b/apps/web/features/landing/components/landing-header.tsx index 777b947ba..5536467a1 100644 --- a/apps/web/features/landing/components/landing-header.tsx +++ b/apps/web/features/landing/components/landing-header.tsx @@ -5,7 +5,7 @@ import { MulticaIcon } from "@/components/multica-icon"; import { cn } from "@multica/ui/lib/utils"; import { useAuthStore } from "@/features/auth"; import { useLocale } from "../i18n"; -import { GitHubMark, XMark, githubUrl, twitterUrl, headerButtonClassName } from "./shared"; +import { GitHubMark, githubUrl, headerButtonClassName } from "./shared"; export function LandingHeader({ variant = "dark", @@ -44,14 +44,6 @@ export function LandingHeader({
- - - Codex
+
+ + OpenClaw +
+
+ + OpenCode +
diff --git a/apps/web/features/landing/components/shared.tsx b/apps/web/features/landing/components/shared.tsx index 870d3cce0..2e0903b3d 100644 --- a/apps/web/features/landing/components/shared.tsx +++ b/apps/web/features/landing/components/shared.tsx @@ -75,6 +75,81 @@ export function CodexLogo({ className }: { className?: string }) { ); } +export function OpenClawLogo({ className }: { className?: string }) { + return ( + + ); +} + +export function OpenCodeLogo({ className }: { className?: string }) { + return ( + + ); +} + export function headerButtonClassName( tone: "ghost" | "solid", variant: "dark" | "light" = "dark", diff --git a/apps/web/features/landing/i18n/en.ts b/apps/web/features/landing/i18n/en.ts index b03c568c5..7f874f9bb 100644 --- a/apps/web/features/landing/i18n/en.ts +++ b/apps/web/features/landing/i18n/en.ts @@ -107,7 +107,7 @@ export const en: LandingDict = { { title: "Auto-detection & plug-and-play", description: - "Multica detects available CLIs like Claude Code and Codex automatically. Connect a machine, and it\u2019s ready to work.", + "Multica detects available CLIs like Claude Code, Codex, OpenClaw, and OpenCode automatically. Connect a machine, and it\u2019s ready to work.", }, ], }, @@ -126,7 +126,7 @@ export const en: LandingDict = { { title: "Install the CLI & connect your machine", description: - "Run multica login to authenticate, then multica daemon start. The daemon auto-detects Claude Code and Codex on your machine \u2014 plug in and go.", + "Run multica login to authenticate, then multica daemon start. The daemon auto-detects Claude Code, Codex, OpenClaw, and OpenCode on your machine \u2014 plug in and go.", }, { title: "Create your first agent", @@ -181,7 +181,7 @@ export const en: LandingDict = { { question: "What coding agents does Multica support?", answer: - "Multica currently supports Claude Code and OpenAI Codex out of the box. The daemon auto-detects whichever CLIs you have installed. More backends are on the roadmap \u2014 and since it\u2019s open source, you can add your own.", + "Multica currently supports Claude Code, Codex, OpenClaw, and OpenCode out of the box. The daemon auto-detects whichever CLIs you have installed. Since it\u2019s open source, you can also add your own backends.", }, { question: "Do I need to self-host, or is there a cloud version?", @@ -190,7 +190,7 @@ export const en: LandingDict = { }, { question: - "How is this different from just using Claude Code or Codex directly?", + "How is this different from just using coding agents directly?", answer: "Coding agents are great at executing. Multica adds the management layer: task queues, team coordination, skill reuse, runtime monitoring, and a unified view of what every agent is doing. Think of it as the project manager for your agents.", }, diff --git a/apps/web/features/landing/i18n/zh.ts b/apps/web/features/landing/i18n/zh.ts index 728ed7dae..9fe9ba657 100644 --- a/apps/web/features/landing/i18n/zh.ts +++ b/apps/web/features/landing/i18n/zh.ts @@ -107,7 +107,7 @@ export const zh: LandingDict = { { title: "\u81ea\u52a8\u68c0\u6d4b\u4e0e\u5373\u63d2\u5373\u7528", description: - "Multica \u81ea\u52a8\u68c0\u6d4b Claude Code \u548c Codex \u7b49\u53ef\u7528 CLI\u3002\u8fde\u63a5\u4e00\u53f0\u673a\u5668\uff0c\u5373\u53ef\u5f00\u59cb\u5de5\u4f5c\u3002", + "Multica \u81ea\u52a8\u68c0\u6d4b Claude Code\u3001Codex\u3001OpenClaw \u548c OpenCode \u7b49\u53ef\u7528 CLI\u3002\u8fde\u63a5\u4e00\u53f0\u673a\u5668\uff0c\u5373\u53ef\u5f00\u59cb\u5de5\u4f5c\u3002", }, ], }, @@ -126,7 +126,7 @@ export const zh: LandingDict = { { title: "\u5b89\u88c5 CLI \u5e76\u8fde\u63a5\u4f60\u7684\u673a\u5668", description: - "\u8fd0\u884c multica login \u8fdb\u884c\u8ba4\u8bc1\uff0c\u7136\u540e multica daemon start\u3002\u5b88\u62a4\u8fdb\u7a0b\u81ea\u52a8\u68c0\u6d4b\u4f60\u673a\u5668\u4e0a\u7684 Claude Code \u548c Codex\u2014\u2014\u63d2\u4e0a\u5c31\u7528\u3002", + "\u8fd0\u884c multica login \u8fdb\u884c\u8ba4\u8bc1\uff0c\u7136\u540e multica daemon start\u3002\u5b88\u62a4\u8fdb\u7a0b\u81ea\u52a8\u68c0\u6d4b\u4f60\u673a\u5668\u4e0a\u7684 Claude Code\u3001Codex\u3001OpenClaw \u548c OpenCode\u2014\u2014\u63d2\u4e0a\u5c31\u7528\u3002", }, { title: "\u521b\u5efa\u4f60\u7684\u7b2c\u4e00\u4e2a Agent", @@ -181,7 +181,7 @@ export const zh: LandingDict = { { question: "Multica \u652f\u6301\u54ea\u4e9b\u7f16\u7801 Agent\uff1f", answer: - "Multica \u76ee\u524d\u5f00\u7bb1\u5373\u7528\u652f\u6301 Claude Code \u548c OpenAI Codex\u3002\u5b88\u62a4\u8fdb\u7a0b\u81ea\u52a8\u68c0\u6d4b\u4f60\u5b89\u88c5\u7684 CLI\u3002\u66f4\u591a\u540e\u7aef\u5728\u8def\u7ebf\u56fe\u4e0a\u2014\u2014\u800c\u4e14\u56e0\u4e3a\u5f00\u6e90\uff0c\u4f60\u4e5f\u53ef\u4ee5\u81ea\u5df1\u6dfb\u52a0\u3002", + "Multica \u76ee\u524d\u5f00\u7bb1\u5373\u7528\u652f\u6301 Claude Code\u3001Codex\u3001OpenClaw \u548c OpenCode\u3002\u5b88\u62a4\u8fdb\u7a0b\u81ea\u52a8\u68c0\u6d4b\u4f60\u5b89\u88c5\u7684 CLI\u3002\u56e0\u4e3a\u5f00\u6e90\uff0c\u4f60\u4e5f\u53ef\u4ee5\u81ea\u5df1\u6dfb\u52a0\u540e\u7aef\u3002", }, { question: "\u9700\u8981\u81ea\u6258\u7ba1\u5417\uff0c\u8fd8\u662f\u6709\u4e91\u7248\u672c\uff1f", @@ -190,7 +190,7 @@ export const zh: LandingDict = { }, { question: - "\u8fd9\u548c\u76f4\u63a5\u7528 Claude Code \u6216 Codex \u6709\u4ec0\u4e48\u533a\u522b\uff1f", + "\u8fd9\u548c\u76f4\u63a5\u7528\u7f16\u7801 Agent \u6709\u4ec0\u4e48\u533a\u522b\uff1f", answer: "\u7f16\u7801 Agent \u64c5\u957f\u6267\u884c\u3002Multica \u6dfb\u52a0\u7684\u662f\u7ba1\u7406\u5c42\uff1a\u4efb\u52a1\u961f\u5217\u3001\u56e2\u961f\u534f\u4f5c\u3001\u6280\u80fd\u590d\u7528\u3001\u8fd0\u884c\u65f6\u76d1\u63a7\uff0c\u4ee5\u53ca\u6bcf\u4e2a Agent \u5728\u505a\u4ec0\u4e48\u7684\u7edf\u4e00\u89c6\u56fe\u3002\u628a\u5b83\u60f3\u8c61\u6210\u4f60\u7684 Agent \u7684\u9879\u76ee\u7ecf\u7406\u3002", },