From dd79f41a699af613dc6e988db6fd0250d579d102 Mon Sep 17 00:00:00 2001 From: gongzhiyong Date: Mon, 18 May 2026 14:14:32 +0800 Subject: [PATCH] Restore website from xiaohei main --- website/app/globals.css | 79 +-- website/app/layout.tsx | 21 +- website/app/page.tsx | 29 +- website/app/swarm/page.tsx | 23 + website/components/cta.tsx | 45 +- website/components/features.tsx | 118 ++-- website/components/footer.tsx | 132 ++-- website/components/header.tsx | 106 +++- website/components/hero.tsx | 216 +++++-- website/components/paradigm.tsx | 212 ++++--- website/components/principles.tsx | 126 ++-- website/components/products.tsx | 139 ++++- website/components/roadmap.tsx | 97 ++- website/components/swarm-page.tsx | 570 ++++++++++++++++++ website/out/404.html | 2 +- website/out/__next.__PAGE__.txt | 39 +- website/out/__next._full.txt | 54 +- website/out/__next._head.txt | 2 +- website/out/__next._index.txt | 5 +- website/out/__next._tree.txt | 7 +- .../_buildManifest.js | 0 .../_clientMiddlewareManifest.js | 0 .../_ssgManifest.js | 0 .../out/_next/static/chunks/003f8q5nybrq~.js | 1 + .../out/_next/static/chunks/05e42yp.xktfx.css | 1 - .../out/_next/static/chunks/0atzr~h9bczw0.js | 3 + .../out/_next/static/chunks/0cwrd04y9yt-j.js | 3 - .../out/_next/static/chunks/0n-.w4gb62mxv.js | 3 + .../out/_next/static/chunks/0nvj2pj1-v78o.css | 1 + .../out/_next/static/chunks/0pk~8h57pui23.js | 1 + .../out/_next/static/chunks/0x.pxwmy6tt~x.css | 2 - .../{137ny062poqwo.js => 0xntnehdgbkhf.js} | 2 +- ...3d.o1_c4.js => turbopack-05dcov14q2920.js} | 2 +- .../4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 | Bin 12608 -> 0 bytes .../7178b3e590c64307-s.11.cyxs5p-0z~.woff2 | Bin 15292 -> 0 bytes .../797e433ab948586e-s.p.0.q-h669a_dqa.woff2 | Bin 31288 -> 0 bytes .../8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 | Bin 14676 -> 0 bytes .../bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 | Bin 13036 -> 0 bytes .../caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 | Bin 28388 -> 0 bytes website/out/_not-found.html | 2 +- website/out/_not-found.txt | 7 +- website/out/_not-found/__next._full.txt | 7 +- website/out/_not-found/__next._head.txt | 2 +- website/out/_not-found/__next._index.txt | 5 +- .../_not-found/__next._not-found.__PAGE__.txt | 2 +- website/out/_not-found/__next._not-found.txt | 2 +- website/out/_not-found/__next._tree.txt | 5 +- website/out/index.html | 2 +- website/out/index.txt | 54 +- website/out/swarm.html | 1 + website/out/swarm.txt | 21 + website/out/swarm/__next._full.txt | 21 + website/out/swarm/__next._head.txt | 6 + website/out/swarm/__next._index.txt | 6 + website/out/swarm/__next._tree.txt | 2 + website/out/swarm/__next.swarm.__PAGE__.txt | 9 + website/out/swarm/__next.swarm.txt | 5 + website/out/taiji-logo.png | Bin 0 -> 2112148 bytes website/public/taiji-logo.png | Bin 0 -> 2112148 bytes website/public/updater/latest.json | 1 - 60 files changed, 1629 insertions(+), 572 deletions(-) create mode 100644 website/app/swarm/page.tsx create mode 100644 website/components/swarm-page.tsx rename website/out/_next/static/{BUv3knTdB83UDDOz70cHX => Au7Dbx8xBm-5-l44b_aAr}/_buildManifest.js (100%) rename website/out/_next/static/{BUv3knTdB83UDDOz70cHX => Au7Dbx8xBm-5-l44b_aAr}/_clientMiddlewareManifest.js (100%) rename website/out/_next/static/{BUv3knTdB83UDDOz70cHX => Au7Dbx8xBm-5-l44b_aAr}/_ssgManifest.js (100%) create mode 100644 website/out/_next/static/chunks/003f8q5nybrq~.js delete mode 100644 website/out/_next/static/chunks/05e42yp.xktfx.css create mode 100644 website/out/_next/static/chunks/0atzr~h9bczw0.js delete mode 100644 website/out/_next/static/chunks/0cwrd04y9yt-j.js create mode 100644 website/out/_next/static/chunks/0n-.w4gb62mxv.js create mode 100644 website/out/_next/static/chunks/0nvj2pj1-v78o.css create mode 100644 website/out/_next/static/chunks/0pk~8h57pui23.js delete mode 100644 website/out/_next/static/chunks/0x.pxwmy6tt~x.css rename website/out/_next/static/chunks/{137ny062poqwo.js => 0xntnehdgbkhf.js} (97%) rename website/out/_next/static/chunks/{turbopack-0e..b3d.o1_c4.js => turbopack-05dcov14q2920.js} (86%) delete mode 100644 website/out/_next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 delete mode 100644 website/out/_next/static/media/7178b3e590c64307-s.11.cyxs5p-0z~.woff2 delete mode 100644 website/out/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 delete mode 100644 website/out/_next/static/media/8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 delete mode 100644 website/out/_next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 delete mode 100644 website/out/_next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 create mode 100644 website/out/swarm.html create mode 100644 website/out/swarm.txt create mode 100644 website/out/swarm/__next._full.txt create mode 100644 website/out/swarm/__next._head.txt create mode 100644 website/out/swarm/__next._index.txt create mode 100644 website/out/swarm/__next._tree.txt create mode 100644 website/out/swarm/__next.swarm.__PAGE__.txt create mode 100644 website/out/swarm/__next.swarm.txt create mode 100644 website/out/taiji-logo.png create mode 100644 website/public/taiji-logo.png delete mode 100644 website/public/updater/latest.json diff --git a/website/app/globals.css b/website/app/globals.css index 4e62a91..81e6d59 100644 --- a/website/app/globals.css +++ b/website/app/globals.css @@ -4,61 +4,61 @@ @custom-variant dark (&:is(.dark *)); :root { - --background: oklch(0.97 0.012 236); - --foreground: oklch(0.23 0.03 252); - --card: oklch(1 0 0); - --card-foreground: oklch(0.22 0.03 252); + --background: oklch(0.965 0.025 77); + --foreground: oklch(0.18 0.03 238); + --card: oklch(0.99 0.012 83); + --card-foreground: oklch(0.18 0.03 238); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.22 0.03 252); - --primary: oklch(0.59 0.24 286); - --primary-foreground: oklch(0.985 0.003 247); - --secondary: oklch(0.93 0.045 222); - --secondary-foreground: oklch(0.28 0.06 254); - --muted: oklch(0.95 0.02 240); - --muted-foreground: oklch(0.5 0.035 252); - --accent: oklch(0.9 0.08 174); - --accent-foreground: oklch(0.25 0.05 197); + --popover-foreground: oklch(0.18 0.03 238); + --primary: oklch(0.34 0.09 39); + --primary-foreground: oklch(0.985 0.012 83); + --secondary: oklch(0.91 0.045 78); + --secondary-foreground: oklch(0.24 0.055 43); + --muted: oklch(0.93 0.026 81); + --muted-foreground: oklch(0.48 0.035 238); + --accent: oklch(0.67 0.14 156); + --accent-foreground: oklch(0.16 0.04 169); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.577 0.245 27.325); - --border: oklch(0.88 0.035 254); - --input: oklch(0.88 0.035 254); - --ring: oklch(0.62 0.24 286); + --border: oklch(0.84 0.034 79); + --input: oklch(0.84 0.034 79); + --ring: oklch(0.54 0.12 43); --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); - --radius: 0.95rem; + --radius: 1.1rem; --sidebar: oklch(0.985 0.02 244); --sidebar-foreground: var(--foreground); --sidebar-primary: var(--primary); --sidebar-primary-foreground: var(--primary-foreground); - --sidebar-accent: oklch(0.94 0.05 286); - --sidebar-accent-foreground: oklch(0.3 0.06 286); - --sidebar-border: oklch(0.87 0.05 254); + --sidebar-accent: oklch(0.91 0.045 78); + --sidebar-accent-foreground: oklch(0.24 0.055 43); + --sidebar-border: oklch(0.84 0.034 79); --sidebar-ring: var(--ring); } .dark { - --background: oklch(0.16 0.03 282); + --background: oklch(0.15 0.025 235); --foreground: oklch(0.93 0.02 252); - --card: oklch(0.21 0.03 281); + --card: oklch(0.2 0.03 235); --card-foreground: oklch(0.93 0.02 252); --popover: oklch(0.225 0.03 281); --popover-foreground: oklch(0.93 0.02 252); - --primary: oklch(0.74 0.23 300); - --primary-foreground: oklch(0.18 0.03 282); - --secondary: oklch(0.29 0.05 238); + --primary: oklch(0.76 0.14 63); + --primary-foreground: oklch(0.16 0.025 235); + --secondary: oklch(0.28 0.04 222); --secondary-foreground: oklch(0.93 0.02 252); --muted: oklch(0.26 0.03 278); --muted-foreground: oklch(0.76 0.025 252); - --accent: oklch(0.35 0.08 176); - --accent-foreground: oklch(0.93 0.03 176); + --accent: oklch(0.71 0.13 156); + --accent-foreground: oklch(0.14 0.03 160); --destructive: oklch(0.396 0.141 25.723); --destructive-foreground: oklch(0.637 0.237 25.331); --border: oklch(0.35 0.06 286); --input: oklch(0.35 0.06 286); - --ring: oklch(0.74 0.23 300); + --ring: oklch(0.76 0.14 63); --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); @@ -75,7 +75,7 @@ } @theme inline { - --font-sans: 'Geist', 'Geist Fallback'; + --font-sans: 'Avenir Next', 'Gill Sans', 'Geist', 'Geist Fallback'; --font-mono: 'Geist Mono', 'Geist Mono Fallback'; --color-background: var(--background); --color-foreground: var(--foreground); @@ -123,19 +123,24 @@ @apply bg-background text-foreground; background-image: radial-gradient( - circle at 15% 10%, - color-mix(in oklch, var(--primary) 22%, transparent) 0, - transparent 32% + circle at 10% 0%, + color-mix(in oklch, var(--primary) 18%, transparent) 0, + transparent 34% ), radial-gradient( - circle at 85% 20%, - color-mix(in oklch, var(--accent) 18%, transparent) 0, - transparent 30% + circle at 92% 16%, + color-mix(in oklch, var(--accent) 16%, transparent) 0, + transparent 31% ), radial-gradient( circle at 50% 100%, - color-mix(in oklch, var(--primary) 12%, transparent) 0, - transparent 42% + color-mix(in oklch, var(--primary) 10%, transparent) 0, + transparent 44% + ), + linear-gradient( + 135deg, + color-mix(in oklch, var(--background) 92%, white), + color-mix(in oklch, var(--secondary) 45%, var(--background)) ); background-attachment: fixed; } diff --git a/website/app/layout.tsx b/website/app/layout.tsx index 19f5346..7205745 100644 --- a/website/app/layout.tsx +++ b/website/app/layout.tsx @@ -1,30 +1,27 @@ import type { Metadata } from 'next' -import { Geist, Geist_Mono } from 'next/font/google' import { Analytics } from '@vercel/analytics/next' import './globals.css' -const _geist = Geist({ subsets: ["latin"] }); -const _geistMono = Geist_Mono({ subsets: ["latin"] }); - export const metadata: Metadata = { - title: 'Heicode - 团队软件交付智能体平台', - description: '让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。', + title: 'Heicode - From one idea to production software', + description: + 'Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment.', icons: { icon: [ { - url: '/heicode-logo.svg', + url: '/taiji-logo.png', media: '(prefers-color-scheme: light)', }, { - url: '/heicode-logo.svg', + url: '/taiji-logo.png', media: '(prefers-color-scheme: dark)', }, { - url: '/heicode-logo.svg', - type: 'image/svg+xml', + url: '/taiji-logo.png', + type: 'image/png', }, ], - apple: '/heicode-logo.svg', + apple: '/taiji-logo.png', }, } @@ -34,7 +31,7 @@ export default function RootLayout({ children: React.ReactNode }>) { return ( - + {children} {process.env.NODE_ENV === 'production' && } diff --git a/website/app/page.tsx b/website/app/page.tsx index e3341a7..17251c7 100644 --- a/website/app/page.tsx +++ b/website/app/page.tsx @@ -1,3 +1,6 @@ +"use client"; + +import { useEffect, useState } from "react"; import { Header } from "@/components/header"; import { Hero } from "@/components/hero"; import { Products } from "@/components/products"; @@ -8,18 +11,26 @@ import { Roadmap } from "@/components/roadmap"; import { CTA } from "@/components/cta"; import { Footer } from "@/components/footer"; +export type Lang = "en" | "zh"; + export default function HomePage() { + const [lang, setLang] = useState("en"); + + useEffect(() => { + document.documentElement.lang = lang === "zh" ? "zh-CN" : "en"; + }, [lang]); + return (
-
- - - - - - - -
+
+ + + + + + + +
); } diff --git a/website/app/swarm/page.tsx b/website/app/swarm/page.tsx new file mode 100644 index 0000000..c3b1569 --- /dev/null +++ b/website/app/swarm/page.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { Header } from "@/components/header"; +import { Footer } from "@/components/footer"; +import { SwarmPage } from "@/components/swarm-page"; +import type { Lang } from "@/app/page"; + +export default function AgnetSwarmRoute() { + const [lang, setLang] = useState("zh"); + + useEffect(() => { + document.documentElement.lang = lang === "zh" ? "zh-CN" : "en"; + }, [lang]); + + return ( +
+
+ +
+
+ ); +} diff --git a/website/components/cta.tsx b/website/components/cta.tsx index 0c38c28..b9d0948 100644 --- a/website/components/cta.tsx +++ b/website/components/cta.tsx @@ -1,29 +1,54 @@ import { Button } from "@/components/ui/button"; import { ArrowRight } from "lucide-react"; +import type { Lang } from "@/app/page"; const MANAGER_URL = "https://code.xinghanlab.com/"; -export function CTA() { +const copy = { + en: { + title: "Move an idea into a real development flow", + description: + "Heicode does more than generate code. It organizes product intent, code, permissions, models, deployment, and maintenance into one auditable software lifecycle.", + primary: "Enter Heicode", + secondary: "Download client", + }, + zh: { + title: "让想法进入真实开发流程", + description: + "不是只生成代码,而是把产品、代码、权限、模型、部署和维护组织成一个可审计的软件生命周期。", + primary: "进入 Heicode", + secondary: "下载客户端", + }, +} satisfies Record; + +export function CTA({ lang }: { lang: Lang }) { + const t = copy[lang]; + return ( -
+
-

- 准备好强化团队 Code 交付能力了吗? +

+ {t.title}

-

- 从需求到代码到发布,让交付速度、质量门禁与回溯能力同时提升。 +

+ {t.description}

diff --git a/website/components/features.tsx b/website/components/features.tsx index f9b6d5e..975c1fe 100644 --- a/website/components/features.tsx +++ b/website/components/features.tsx @@ -1,56 +1,100 @@ -import { Shield, Users, Eye, Workflow } from "lucide-react"; +import { FileText, GitBranch, ShieldCheck, Workflow } from "lucide-react"; +import type { Lang } from "@/app/page"; -const features = [ - { - icon: Shield, - title: "身份与策略一元化", +const icons = [FileText, GitBranch, Workflow, ShieldCheck]; + +const copy = { + en: { + eyebrow: "Core abilities", + title: "Four loops Heicode must close", description: - "从个人到团队,谁能访问何种资源、何种环境、何种仓库——应有清晰归属与审计预期,而不是散落在若干控制台口径不一致。", + "From idea, resources, team, and permissions to execution, launch, and maintenance, Heicode turns software delivery into an auditable lifecycle.", + features: [ + { + title: "Ideas become development work", + description: + "Users do not need a complete PRD first. Heicode turns natural-language goals into requirement summaries, task drafts, prototype notes, role suggestions, and resource needs.", + }, + { + title: "Resource binding and permission assignment", + description: + "Git, SK, project docs, and cloud resources are modeled as Resource Bindings, then assigned to specific sub Agnet roles through Resource Grants.", + }, + { + title: "Sub Agnets execute continuously", + description: + "Work is not thrown over the wall once. Agnets keep moving through requirements, design, development, testing, fixes, and deployment.", + }, + { + title: "Usage, logs, security, and audit loop", + description: + "Model balance, call logs, resource access, risky approvals, and deployment records return to Heicode. Long-lived secrets never enter Git, Markdown, or logs.", + }, + ], }, - { - icon: Workflow, - title: "编排与角色范式", + zh: { + eyebrow: "Core abilities", + title: "Heicode 要闭环的四件事", description: - "既支持个人工作流也支持团队协作:个人可单人执行全流程,团队可按阶段或迭代组织分工。", + "从想法、资源、团队、权限到执行、上线、维护,形成一条可审计的软件生命周期。", + features: [ + { + title: "想法转开发任务", + description: + "用户不需要先写完整 PRD。Heicode 会把自然语言目标整理成需求摘要、任务草案、原型描述、角色建议和资源需求。", + }, + { + title: "资源绑定和权限分配", + description: + "Git、SK、项目文档和云资源被建模为 Resource Binding,再通过 Resource Grant 分配给具体子 Agnet 角色。", + }, + { + title: "子 Agnet 持续执行", + description: + "不是一次性把任务丢出去,而是在需求、设计、开发、测试、修复、部署的子环节中持续调用 Agnet 推进。", + }, + { + title: "用量、日志、安全和审计闭环", + description: + "模型余额、调用日志、资源访问、高危审批、部署记录统一回到 Heicode,长期密钥不进入 Git、Markdown 或日志。", + }, + ], }, - { - icon: Eye, - title: "全生命周期可信交付", - description: - "从构想到运营,关键产物应能对齐到分支、标签或发布单元:规格、实现、验证、发布、运维与复盘之间有可追溯链路。", - }, - { - icon: Users, - title: "平台化协作", - description: - "无论个人还是团队,客户端与 Manager 共同服务协作叙事——跨角色、跨会话、跨环境的一体化体验。", - }, -]; +} satisfies Record; +}>; + +export function Features({ lang }: { lang: Lang }) { + const t = copy[lang]; -export function Features() { return ( -
+
-

- 战略支柱 +

+ {t.eyebrow}

-

- 四大核心能力 +

+ {t.title}

- 个人开发者到多人团队,都能获得清晰的责任边界与可追溯的交付过程 + {t.description}

-
- {features.map((feature, index) => ( +
+ {t.features.map((feature, index) => { + const Icon = icons[index]; + return (
-
- +
+

{feature.title}

@@ -58,11 +102,11 @@ export function Features() { {feature.description}

- + {String(index + 1).padStart(2, "0")}
- ))} + )})}
diff --git a/website/components/footer.tsx b/website/components/footer.tsx index f84762e..a5060f2 100644 --- a/website/components/footer.tsx +++ b/website/components/footer.tsx @@ -1,32 +1,79 @@ import Link from "next/link"; import Image from "next/image"; +import type { Lang } from "@/app/page"; -const footerLinks = { - 产品: [ - { label: "Heicode Manager", href: "#" }, - { label: "Heicode 客户端", href: "#" }, - { label: "Agnet 控制面", href: "#" }, - ], - 资源: [ - { label: "文档", href: "#" }, - { label: "集成说明", href: "#" }, - { label: "更新日志", href: "#" }, - { label: "路线图", href: "#" }, - ], - 公司: [ - { label: "关于我们", href: "#" }, - { label: "博客", href: "#" }, - { label: "加入我们", href: "#" }, - { label: "联系方式", href: "#" }, - ], - 法律: [ - { label: "隐私政策", href: "#" }, - { label: "服务条款", href: "#" }, - { label: "安全", href: "#" }, - ], -}; +const DOCS_URL = "https://doc.xinghanlab.com/"; + +const copy = { + en: { + tagline: ["From one idea to production software", "Organize an AI development team with code and cloud resources"], + copyright: "All rights reserved.", + footerLinks: { + Product: [ + { label: "Heicode Client", href: "#" }, + { label: "Heicode Manager", href: "https://code.xinghanlab.com/" }, + { label: "Agnet Platform", href: "https://agnet.taijiaicloud.com/" }, + { label: "Agnet Swarm", href: "/swarm" }, + ], + Resources: [ + { label: "Documentation", href: DOCS_URL }, + { label: "Resource binding", href: "#" }, + { label: "Secret vault", href: "#" }, + { label: "CodeGW boundary", href: "#" }, + { label: "Product demo", href: "#" }, + ], + Company: [ + { label: "About us", href: "https://www.taijiaicloud.com/" }, + { label: "Blog", href: "#" }, + { label: "Careers", href: "#" }, + { label: "Contact", href: "mailto:november@taijiaicloud.com" }, + ], + Legal: [ + { label: "Privacy", href: "#" }, + { label: "Terms", href: "#" }, + { label: "Security", href: "#" }, + ], + }, + }, + zh: { + tagline: ["从一个想法,到可上线的软件产品", "组织 AI 开发团队,接入代码和云资源"], + copyright: "保留所有权利。", + footerLinks: { + 产品: [ + { label: "Heicode 客户端", href: "#" }, + { label: "Heicode Manager", href: "https://code.xinghanlab.com/" }, + { label: "Agnet 平台", href: "https://agnet.taijiaicloud.com/" }, + { label: "Agnet 蜂群", href: "/swarm" }, + ], + 资源: [ + { label: "文档", href: DOCS_URL }, + { label: "资源绑定", href: "#" }, + { label: "密钥保管器", href: "#" }, + { label: "CodeGW 边界", href: "#" }, + { label: "产品演示", href: "#" }, + ], + 公司: [ + { label: "关于我们", href: "https://www.taijiaicloud.com/" }, + { label: "博客", href: "#" }, + { label: "加入我们", href: "#" }, + { label: "联系方式", href: "mailto:november@taijiaicloud.com" }, + ], + 法律: [ + { label: "隐私政策", href: "#" }, + { label: "服务条款", href: "#" }, + { label: "安全", href: "#" }, + ], + }, + }, +} satisfies Record>; +}>; + +export function Footer({ lang }: { lang: Lang }) { + const t = copy[lang]; -export function Footer() { return (