feat: add official X (@multica_hq) links across repo and landing page (#577)

- README.md / README.zh-CN.md: add X link to top navigation
- layout.tsx: add twitter site/creator metadata (@multica_hq)
- Landing header: add X icon button next to GitHub
- Landing footer: add X and GitHub social icons
- Footer i18n: replace Community link with X (Twitter) in en/zh
- shared.tsx: add twitterUrl constant and XMark icon component

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jiayuan Zhang
2026-04-09 17:46:12 +08:00
committed by GitHub
parent c057741e22
commit 141d7fd0aa
8 changed files with 48 additions and 5 deletions

View File

@@ -21,7 +21,7 @@ Turn coding agents into real teammates — assign tasks, track progress, compoun
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![GitHub stars](https://img.shields.io/github/stars/multica-ai/multica?style=flat)](https://github.com/multica-ai/multica/stargazers)
[Website](https://multica.ai) · [Cloud](https://multica.ai/app) · [Self-Hosting](SELF_HOSTING.md) · [Contributing](CONTRIBUTING.md)
[Website](https://multica.ai) · [Cloud](https://multica.ai/app) · [X](https://x.com/multica_hq) · [Self-Hosting](SELF_HOSTING.md) · [Contributing](CONTRIBUTING.md)
**English | [简体中文](README.zh-CN.md)**

View File

@@ -21,7 +21,7 @@
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![GitHub stars](https://img.shields.io/github/stars/multica-ai/multica?style=flat)](https://github.com/multica-ai/multica/stargazers)
[官网](https://multica.ai) · [云服务](https://multica.ai/app) · [自部署指南](SELF_HOSTING.md) · [参与贡献](CONTRIBUTING.md)
[官网](https://multica.ai) · [云服务](https://multica.ai/app) · [X](https://x.com/multica_hq) · [自部署指南](SELF_HOSTING.md) · [参与贡献](CONTRIBUTING.md)
**[English](README.md) | 简体中文**

View File

@@ -41,6 +41,8 @@ export const metadata: Metadata = {
},
twitter: {
card: "summary_large_image",
site: "@multica_hq",
creator: "@multica_hq",
},
alternates: {
canonical: "/",

View File

@@ -4,6 +4,7 @@ import Link from "next/link";
import { MulticaIcon } from "@/components/multica-icon";
import { cn } from "@multica/ui/lib/utils";
import { useAuthStore } from "@/features/auth";
import { XMark, GitHubMark, githubUrl, twitterUrl } from "./shared";
import { useLocale, locales, localeLabels } from "../i18n";
export function LandingFooter() {
@@ -27,6 +28,24 @@ export function LandingFooter() {
<p className="mt-4 max-w-[300px] text-[14px] leading-[1.7] text-white/50 sm:text-[15px]">
{t.footer.tagline}
</p>
<div className="mt-4 flex items-center gap-3">
<Link
href={twitterUrl}
target="_blank"
rel="noreferrer"
className="text-white/40 transition-colors hover:text-white"
>
<XMark className="size-4" />
</Link>
<Link
href={githubUrl}
target="_blank"
rel="noreferrer"
className="text-white/40 transition-colors hover:text-white"
>
<GitHubMark className="size-4" />
</Link>
</div>
<div className="mt-6">
<Link
href={user ? "/issues" : "/login"}

View File

@@ -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, githubUrl, headerButtonClassName } from "./shared";
import { GitHubMark, XMark, githubUrl, twitterUrl, headerButtonClassName } from "./shared";
export function LandingHeader({
variant = "dark",
@@ -44,6 +44,14 @@ export function LandingHeader({
</Link>
<div className="flex items-center gap-2.5 sm:gap-3">
<Link
href={twitterUrl}
target="_blank"
rel="noreferrer"
className={headerButtonClassName("ghost", variant)}
>
<XMark className="size-3.5" />
</Link>
<Link
href={githubUrl}
target="_blank"

View File

@@ -1,6 +1,7 @@
import { cn } from "@multica/ui/lib/utils";
export const githubUrl = "https://github.com/multica-ai/multica";
export const twitterUrl = "https://x.com/multica_hq";
export function GitHubMark({ className }: { className?: string }) {
return (
@@ -15,6 +16,19 @@ export function GitHubMark({ className }: { className?: string }) {
);
}
export function XMark({ className }: { className?: string }) {
return (
<svg
viewBox="0 0 24 24"
aria-hidden="true"
className={className}
fill="currentColor"
>
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
</svg>
);
}
export function ImageIcon({ className }: { className?: string }) {
return (
<svg

View File

@@ -230,7 +230,7 @@ export const en: LandingDict = {
links: [
{ label: "Documentation", href: githubUrl },
{ label: "API", href: githubUrl },
{ label: "Community", href: githubUrl },
{ label: "X (Twitter)", href: "https://x.com/multica_hq" },
],
},
company: {

View File

@@ -230,7 +230,7 @@ export const zh: LandingDict = {
links: [
{ label: "\u6587\u6863", href: githubUrl },
{ label: "API", href: githubUrl },
{ label: "\u793e\u533a", href: githubUrl },
{ label: "X (Twitter)", href: "https://x.com/multica_hq" },
],
},
company: {