diff --git a/components/china/ChinaLanding.tsx b/components/china/ChinaLanding.tsx new file mode 100644 index 000000000..c2c74ef3d --- /dev/null +++ b/components/china/ChinaLanding.tsx @@ -0,0 +1,405 @@ +"use client"; + +import { motion } from "framer-motion"; +import { Card, CardContent } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { ProductUpdateSignup } from "@/components/productUpdateSignup"; +import { Background } from "@/components/Background"; +import { getGitHubStars } from "@/lib/github-stars"; +import { DOCKER_PULLS, SDK_INSTALLS_PER_MONTH } from "@/components/home/Usage"; +import { + BookOpen, + CalendarDays, + CloudCog, + Globe, + Handshake, + Rocket, + Users, +} from "lucide-react"; + +const valueProps = [ + { + icon: BookOpen, + enTitle: "Open Source by Default", + zhTitle: "开源基因", + enDescription: + "Fully open source and transparent. Easy to inspect, extend, and integrate with your existing AI stack.", + zhDescription: + "Langfuse 走的是 OSS 路线,代码透明、可二开,接入现有 AI 技术栈成本低。", + }, + { + icon: CloudCog, + enTitle: "Self-Hosted Ready", + zhTitle: "私有化部署友好", + enDescription: + "Deploy on your own infrastructure for stronger data control, enterprise security, and local compliance.", + zhDescription: + "支持私有化/自托管部署,数据可控,安全与合规更容易落地。", + }, + { + icon: Users, + enTitle: "Strong China Momentum", + zhTitle: "国内落地规模持续增长", + enDescription: + "Already widely used by Chinese teams and enterprises running production AI applications.", + zhDescription: + "在国内,越来越多团队把 Langfuse 用在生产环境,覆盖评测、调试、观测等关键链路。", + }, + { + icon: Handshake, + enTitle: "ClickHouse Ecosystem", + zhTitle: "与 ClickHouse 深度协同", + enDescription: + "Langfuse is part of ClickHouse. ClickHouse has a local business in China, collaborates with Alibaba, and is increasing market investment.", + zhDescription: + "Langfuse 已纳入 ClickHouse 体系。ClickHouse 在中国有本地团队,并与阿里云生态合作,市场投入持续加码。", + }, +]; + +const stats = [ + { + getValue: () => (getGitHubStars() / 1000).toFixed(0) + "K+", + en: "GitHub Stars", + zh: "GitHub 星标", + }, + { + getValue: () => (SDK_INSTALLS_PER_MONTH / 1_000_000).toFixed(0) + "M+", + en: "SDK Installs / Month", + zh: "每月 SDK 安装量", + }, + { + getValue: () => (DOCKER_PULLS / 1_000_000).toFixed(0) + "M+", + en: "Docker Pulls", + zh: "Docker Pull", + }, +]; + +const marketItems = [ + { + icon: CalendarDays, + enTitle: "Upcoming China-Focused Events", + zhTitle: "中国市场活动与线下交流", + enDescription: + "Upcoming: May 17 Shanghai Meetup, June 9 joint workshop with MongoDB and AWS, June 17 AWS Summit Hong Kong, and June 23-24 AWS Shanghai Summit.", + zhDescription: + "近期我们会在多场活动中分享 Langfuse + ClickHouse 的 Agent Observability 实践:5 月 17 日上海 Meetup、6 月 9 日与 MongoDB/AWS 联合工作坊、6 月 17 日香港 AWS Summit、6 月 23-24 日上海 AWS Summit。", + }, + { + icon: Globe, + enTitle: "Localization & User Connection", + zhTitle: "本地化内容与开发者连接", + enDescription: + "We are investing in Chinese-language content, local channels, and direct feedback loops with users in China.", + zhDescription: + "我们会持续做中文内容、线上社群和线下交流,直接听一线开发者与企业用户的反馈。", + }, + { + icon: Rocket, + enTitle: "Future Offerings", + zhTitle: "后续产品与合作机会", + enDescription: + "Subscribers hear first about meetups, local partnerships, and potential future offerings in China.", + zhDescription: + "订阅邮件列表后,你会优先收到活动邀请、本地合作进展,以及面向中国市场的后续产品/商业化信息。", + }, +]; + +function SectionHeading({ + enTitle, + zhTitle, + enSubtitle, + zhSubtitle, +}: { + enTitle: string; + zhTitle: string; + enSubtitle: string; + zhSubtitle: string; +}) { + return ( +
+

+ {zhTitle} +

+

{enTitle}

+

+ {zhSubtitle} +

+

+ {enSubtitle} +

+
+ ); +} + +export function ChinaLanding() { + return ( + <> +
+
+ + 🇨🇳 + + + 🧧 + + + 🐉 + + + 🚀 + + +
+ + 开源可观测性在中国 / Langfuse in China + + + + Langfuse 在中国 + + + + Langfuse in China + + + + Langfuse 在中国已经有不少真实落地案例。我们正在持续加大本地投入,做更好的中文内容、活动和用户连接。 + + + Langfuse is already widely used in China. We are investing more in localization, local engagement, and market presence together with ClickHouse. + + + + + +
+
+ +
+ + + +
+ {valueProps.map((prop, index) => ( + + + + +

+ {prop.zhTitle} +

+

+ {prop.enTitle} +

+

+ {prop.zhDescription} +

+

+ {prop.enDescription} +

+
+
+
+ ))} +
+
+ +
+ +

+ 广泛采用,持续增长 +

+

+ 全球开源社区验证,国内采用持续增长 +

+
+
+ {stats.map((stat, index) => ( + +
+ {stat.getValue()} +
+
+ {stat.zh} +
+
{stat.en}
+
+ ))} +
+
+ +
+ + + +
+ {marketItems.map((item, index) => ( + + + + +

+ {item.zhTitle} +

+

+ {item.enTitle} +

+

+ {item.zhDescription} +

+

+ {item.enDescription} +

+
+
+
+ ))} +
+
+ +
+ + 📬 + + +

+ 订阅中国动态,第一时间了解 Langfuse 在中国 +

+

+ Be the first to hear updates in China +

+

+ 订阅后可获取活动信息、中文内容更新、用户案例,以及后续产品与合作进展。 +

+

+ Get notified about events, localization progress, user meetups, and potential future offerings from Langfuse + ClickHouse in China. +

+
+ +
+

+ 您可随时取消订阅。 / You can unsubscribe at any time. +

+
+
+
+ + + ); +} diff --git a/components/china/index.tsx b/components/china/index.tsx new file mode 100644 index 000000000..877371cdd --- /dev/null +++ b/components/china/index.tsx @@ -0,0 +1 @@ +export { ChinaLanding } from "./ChinaLanding"; diff --git a/content/marketing/china.mdx b/content/marketing/china.mdx new file mode 100644 index 000000000..a21b54fa5 --- /dev/null +++ b/content/marketing/china.mdx @@ -0,0 +1,7 @@ +--- +title: "Langfuse 在中国 - Langfuse in China" +--- + +import { ChinaLanding } from "@/components/china"; + + diff --git a/content/marketing/meta.json b/content/marketing/meta.json index 5c06bac96..24c2fa441 100644 --- a/content/marketing/meta.json +++ b/content/marketing/meta.json @@ -4,6 +4,7 @@ "about", "brand", "careers", + "china", "cn", "community", "cookie-policy", diff --git a/lib/source.ts b/lib/source.ts index 53a4360c4..c497b0abe 100644 --- a/lib/source.ts +++ b/lib/source.ts @@ -14,29 +14,20 @@ import { handbook, marketing, } from "../.source/server"; -import { CONTENT_DIR_TO_URL_PREFIX } from "./content-dir-map.js"; - -function baseUrl(contentDir: string): string { - const prefix = CONTENT_DIR_TO_URL_PREFIX[contentDir]; - if (typeof prefix !== "string") { - throw new Error(`Missing content-dir-map entry for "${contentDir}"`); - } - return prefix === "" ? "" : `/${prefix}`; -} export const source = loader({ - baseUrl: baseUrl("docs"), + baseUrl: "/docs", source: docs.toFumadocsSource(), pageTree: { idPrefix: "docs" }, }); export const selfHostingSource = loader({ - baseUrl: baseUrl("self-hosting"), + baseUrl: "/self-hosting", source: selfHosting.toFumadocsSource(), pageTree: { idPrefix: "self-hosting" }, }); -const SELF_HOSTING_BASE = baseUrl("self-hosting"); +const SELF_HOSTING_BASE = "/self-hosting"; /** Display names for self-hosting sidebar links to main docs (avoid duplicate "Overview"). */ const SELF_HOSTING_DOC_LINK_NAMES: Record = { @@ -78,33 +69,33 @@ export function getSelfHostingPageTree(): ReturnType