愿景与产品理念
本页是
astro-content-hub的“为什么”。如果你在评估这个模板,或想弄清楚 如何定位你自己的 hub,请先读它。它刻意带有观点:模板做了一系列有意的 取舍,而这些取舍正是它长成这样的原因。
问题
拥有不止一个开源项目的组织,几乎都会落入同一种处境:
- 每个项目都有自己的 README、自己的
docs/,常常还有自己独立的 GitHub Pages 站点 —— 外观各异、URL 各异、维护成本各异。 - 访客必须先知道自己在找哪个项目,才能找到任何东西。组织没有 前门。
- 开源项目的“产品”不止是文档:它是一个落地页,讲清楚这是什么、为什么 要用、怎么安装、文档在哪。很少有项目维护这个页面,因为那又是另一件 要建、要维护的事。
结果是:代码很好,公开形象却散乱而不一致。
洞察
项目的文档和产品页,是同一份内容从两个角度看。项目作者本来就要写 文档 —— 他们不想再维护一个独立的营销页。他们需要的是一处能把自己现有 的文档免费变成好看产品页的地方。
而组织需要的也不只是一堆链接:它需要一个前门 —— 一个说明你是谁、 你做什么、每个产品在哪的组织页。
astro-content-hub 把两者合二为一:
- 组织层 —— 面向组织本身的落地页与品牌。
- 产品层 —— 每个已注册产品都得到一个落地页(是什么、特性、安装、
亮点),由
product-info内容生成。 - 文档层 —— 每个产品的文档聚合进同一个站点,于是“文档”和“产品页” 在同一屋檐下、同一 URL、同一搜索里。
一个仓库托管站点;每个项目通过拉取请求贡献文档(以及可选的
product-info 文件) —— 未经 review,什么都不会上线。
三层划分(以及为什么重要)
模板被划分为 Machinery / Your site / Extensions,详见 架构。这不是内部细节;它就是产品理念的代码化:
- Machinery 是(大体上)只有一个正确答案的部分:路由、i18n 回退、 内容集合、同步管线。采用者永远不需要改它。
- Your site 是有很多正确答案的部分:组织的文案、产品注册表、 外观。这是组织让 hub 成为自己的 的地方。
- Extensions 是可选钩子:某个产品的自定义落地页、按产品的主题、
丰富的
product-info落地页。产品可以不碰共享站点就拥有更好的页面。
分层的目的在于可升级性:Machinery 在上游演进,你的品牌原封不动,
npm run check:upstream(见升级)会告诉你某个发布
何时需要人工决策。
模板刻意不做的事
- 它不是 CMS。 内容活在 Git 里,review 发生在拉取请求中。没有管理 界面、没有数据库、没有编辑角色。这是特性:管线可审阅、可版本化、 且可以永远免费运行。
- 它不是单仓库的文档框架。 如果你只有一个项目、一个 docs 目录, 直接使用 Starlight、Docusaurus 或 VitePress。这个模板为 组织 + 多产品 的场景而存在。
- 它不在构建时拉取内容。 它通过同步 PR 聚合,而不是在构建时 clone 源仓库。构建保持离线、确定,并且每个变更在上线前都经过人工 review。 取舍(每个源仓库要配一个同步工作流)是有意为之。
- 它不是营销站生成器。 落地页与产品页由内容驱动、可配置,但模板的 优先级是干净、快速、内容优先的门面 —— 不是拖拽式页面构建器。
它适合谁
- 正在构建多个开源项目的组织(或个人),希望有一个品牌前门和 每个产品一个 URL,而不用每个项目各自维护站点。
- 项目作者,希望通过写文档和一份小小的
product-info文件,就为 自己的项目得到一个像样的公开页面 —— 无需另建、另托站点。 - 在乎 review 的维护者 —— 内容只通过拉取请求上线,所以没有任何 东西会在未经人眼确认的情况下公之于众。
模型一图流
flowchart LR
A["项目: my-posts<br/>posts + product-info"] -->|同步 PR| HUB
B["项目: my-lib<br/>docs + product-info"] -->|同步 PR| HUB
C["组织(本仓库)<br/>品牌、产品注册表、<br/>落地文案"] --> HUB
HUB["astro-content-hub<br/>静态 Astro 站点"] --> D["GitHub Pages"]
HUB --> E["Cloudflare Pages"]
承诺
把项目的文档(以及一点 product-info)交给 hub,hub 就还给你一个
组织:有前门、每个产品一个品牌落地页、本地化回退、搜索、免费部署 ——
全部通过可审阅的拉取请求维护,全部随模板演进而可升级。
本文档的其余部分讲“怎么做”。本页讲“为什么”。