OpenTBook

OpenTBook 产品需求文档 (PRD)

OpenTBook 项目的完整产品需求文档,包含技术架构、项目结构、工作流设计与扩展规划

版本:1.0.0 | 最后更新:2026-04-13 | 维护者:UUAILab/AITeaM

1. 项目概述

1.1 项目名称

OpenTBook — 开放团队知识手册(Open Team Book)

1.2 项目定位

基于 Git 仓库管理的团队知识库,使用 Docus v5 生成可预览的文档站点。团队成员通过任意编辑器撰写 Markdown 文档,通过 Git 工作流协作, 本地运行 npm run dev 即可实时预览。

1.3 核心理念

  • 胶水代码优先:不造轮子,用开源工具粘合工作流,零业务逻辑代码
  • Git 即真相:所有内容以 Git 仓库为单一事实来源(Single Source of Truth)
  • 编辑器无关:VS Code、Vim、Typora、任何 Markdown 编辑器均可
  • AI 辅助标准化:通过 Claude Code 技能(Skills)和规则(Rules)确保文档质量一致

1.4 项目目标

目标衡量标准
知识沉淀团队核心知识以结构化文档形式持久化
低门槛协作新成员 10 分钟内完成环境搭建并开始编辑
实时预览文件保存后 < 1s 热更新到浏览器
质量一致所有文档通过 markdownlint + frontmatter 校验
可追溯每次变更有清晰的 commit 记录和审核流程

2. 目标用户

2.1 用户画像

主要用户:UUAILab/AITeaM 团队成员

角色使用场景技术要求
研发工程师撰写技术文档、API 说明、架构决策记录熟悉 Git、Markdown
算法研究员记录实验笔记、论文阅读笔记、模型文档基本 Git 操作
项目管理维护项目规范、流程文档、会议纪要基本 Markdown
新成员查阅入职指南、学习团队规范能浏览网页即可

2.2 使用场景

  1. 日常写作:在本地编辑器中撰写/修改 Markdown 文件
  2. 实时预览:运行 npm run dev 在浏览器中查看渲染效果
  3. 提交审核:通过 Git 提交、发起合并请求、团队评审
  4. 知识检索:通过文档站点内置搜索快速定位内容

3. 技术架构

3.1 架构总览

┌─────────────────────────────────────────────────────────┐
│                    OpenTBook 项目                         │
├──────────┬──────────────┬──────────────┬────────────────┤
│  内容层   │    展示层     │   工具链层    │   AI 辅助层    │
│ content/ │  Docus v5    │  markdownlint│  Claude Code   │
│ Markdown │  Nuxt 4      │  commitlint  │  Skills/Rules  │
│ MDC 语法  │  HMR 预览    │  husky hooks │  文档生成/校验   │
└──────────┴──────────────┴──────────────┴────────────────┘
         │                                    │
         ▼                                    ▼
    Git 仓库(Alibaba Cloud Codeup)      本地开发环境

3.2 技术选型

组件选型版本用途
文档框架Docusv5.9.0文档站点生成与预览
运行时Nuxt^4.3.1Docus 底层框架
数据库better-sqlite3^12.6.2Nuxt Content 内容索引
包管理pnpm(推荐)或 npm^9.x / ^10.x依赖管理
Node.jsNode.js^20 LTS运行环境
Markdown 校验markdownlint-cli2latestMarkdown 格式规范
提交规范commitlintlatestGit commit message 校验
Git 钩子husky^9.xpre-commit / commit-msg 钩子
暂存区校验lint-stagedlatest仅校验暂存文件

3.3 胶水代码原则

本项目不编写业务逻辑代码,仅通过配置文件将开源工具粘合:

配置文件功能
nuxt.config.ts扩展 Docus 层,一行即可
app.config.ts主题配置(标题、logo、社交链接等)
.markdownlint.jsoncMarkdown 格式校验规则
commitlint.config.js提交信息格式规则
.husky/Git 钩子脚本(自动校验)
.claude/Claude Code 技能与规则

3.4 Docus 如何工作

Docus v5 是一个 Nuxt Layer,核心机制:

  1. content/ 目录下的 Markdown 文件通过 Nuxt Content v3 自动解析为页面
  2. 文件系统路由 — 文件路径即 URL 路径
  3. 数字前缀控制导航排序(如 1.guide//guide/,数字不出现在 URL)
  4. nuxt dev 启动开发服务器,Vite HMR 实现文件保存后浏览器即时刷新
  5. 内置搜索、暗色模式、目录导航、"编辑此页" 链接等功能开箱即用

4. 项目结构

OpenTBook/
├── .claude/                          # Claude Code 配置
│   ├── rules/                        # 自定义规则
│   │   ├── markdown-standards.md     # Markdown 写作标准
│   │   └── frontmatter-schema.md     # frontmatter 规范
│   └── skills/                       # 自定义技能
│       ├── new-doc.md                # 创建新文档
│       └── review-doc.md             # 审查文档质量
├── .husky/                           # Git 钩子
│   ├── pre-commit                    # lint-staged → markdownlint
│   └── commit-msg                    # commitlint
├── content/                          # 文档内容(核心目录)
│   ├── 0.index.md                    # 站点首页(Landing Page)
│   ├── 1.guide/                      # 入门指南
│   │   ├── _dir.yml                  # 分区元数据
│   │   ├── 1.introduction.md         # 项目介绍
│   │   ├── 2.quick-start.md          # 快速开始
│   │   └── 3.writing-guide.md        # 写作规范
│   ├── 2.engineering/                # 工程技术
│   │   ├── _dir.yml
│   │   ├── architecture/             # 架构设计
│   │   ├── development/              # 开发规范
│   │   └── devops/                   # 运维部署
│   ├── 3.research/                   # 研究笔记
│   │   ├── _dir.yml
│   │   ├── papers/                   # 论文阅读
│   │   ├── experiments/              # 实验记录
│   │   └── models/                   # 模型文档
│   ├── 4.projects/                   # 项目文档
│   │   └── _dir.yml
│   ├── 5.processes/                  # 流程规范
│   │   ├── _dir.yml
│   │   ├── code-review.md            # 代码审查流程
│   │   ├── release.md                # 发版流程
│   │   └── onboarding.md             # 入职指南
│   └── 6.resources/                  # 资源参考
│       ├── _dir.yml
│       ├── tools.md                  # 工具推荐
│       ├── links.md                  # 常用链接
│       └── glossary.md               # 术语表
├── public/                           # 静态资源
│   └── images/                       # 文档图片
├── templates/                        # 文档模板(不被 Docus 渲染)
│   ├── tech-doc.md                   # 技术文档模板
│   ├── paper-note.md                 # 论文笔记模板
│   ├── experiment-log.md             # 实验记录模板
│   ├── meeting-note.md               # 会议纪要模板
│   └── adr.md                        # 架构决策记录模板
├── .gitignore                        # Git 忽略规则
├── .markdownlint.jsonc               # markdownlint 规则
├── app.config.ts                     # Docus 主题配置
├── CLAUDE.md                         # Claude Code 项目指南
├── commitlint.config.js              # 提交信息规范
├── nuxt.config.ts                    # Nuxt/Docus 核心配置
├── package.json                      # 项目依赖与脚本
├── prd.md                            # 本文档
└── tsconfig.json                     # TypeScript 配置

4.1 内容分类设计

编号目录用途典型内容
1guide/入门指南项目介绍、快速开始、写作规范
2engineering/工程技术架构设计、开发规范、运维部署
3research/研究笔记论文阅读、实验记录、模型文档
4projects/项目文档各项目的需求/设计/复盘
5processes/流程规范代码审查、发版、入职流程
6resources/资源参考工具推荐、常用链接、术语表

4.2 文件命名规范

  • 目录名:数字前缀 + 英文短横线命名 → 2.engineering/
  • 文件名:数字前缀 + 英文短横线命名 → 1.introduction.md
  • 中文标题:通过 frontmatter 的 title 字段设置
  • 图片路径public/images/{section}/{filename}.png,Markdown 中引用 /images/{section}/{filename}.png

为什么用英文目录名?中文路径在 URL 中会被编码为 %E6%8C%87%E5%8D%97 等,不利于分享和 SEO。英文目录名 + frontmatter 中文标题是最佳实践。


5. 核心配置设计

5.1 package.json

{
  "name": "opentbook",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "nuxt dev",
    "build": "nuxt build",
    "preview": "nuxt preview",
    "generate": "nuxt generate",
    "lint:md": "markdownlint-cli2 \"content/**/*.md\"",
    "lint:md:fix": "markdownlint-cli2 --fix \"content/**/*.md\"",
    "prepare": "husky"
  },
  "devDependencies": {
    "nuxt": "^4.3.1",
    "docus": "^5.9.0",
    "better-sqlite3": "^12.6.2",
    "markdownlint-cli2": "^0.17.0",
    "lint-staged": "^15.0.0",
    "@commitlint/cli": "^19.0.0",
    "@commitlint/config-conventional": "^19.0.0",
    "husky": "^9.0.0"
  },
  "lint-staged": {
    "content/**/*.md": [
      "markdownlint-cli2"
    ]
  }
}

5.2 nuxt.config.ts

export default defineNuxtConfig({
  extends: ['docus'],
})

仅一行配置 — Docus 层会自动注册 Nuxt Content、Nuxt UI、Nuxt Image 等所有模块。

5.3 app.config.ts

export default defineAppConfig({
  docus: {
    locale: 'zh-CN',
  },
  ui: {
    colors: {
      primary: 'emerald',
      neutral: 'zinc',
    },
  },
  header: {
    title: 'OpenTBook',
  },
  toc: {
    title: '本页目录',
  },
  github: {
    url: 'https://codeup.aliyun.com/uueic/UUAILab/AITeaM/OpenTBook',
    branch: 'master',
  },
})

5.4 .markdownlint.jsonc

{
  "default": true,
  "MD013": {
    "line_length": 120,
    "heading_line_length": 80,
    "code_block_line_length": 120,
    "tables": false
  },
  "MD024": {
    "siblings_only": true
  },
  "MD033": {
    "allowed_elements": ["br", "details", "summary", "sup", "sub"]
  },
  "MD041": false
}

规则说明:

  • MD013 行长度放宽至 120:中文字符密度高,80 太短
  • MD024 允许不同层级同名标题
  • MD033 允许部分 HTML 元素(MDC 语法需要)
  • MD041 关闭"首行必须为标题":Docus 从 frontmatter title 生成 H1

5.5 commitlint.config.js

export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'docs',      // 文档内容变更(最常用)
        'feat',      // 新功能/新模板
        'fix',       // 修正错误内容
        'style',     // 格式调整
        'refactor',  // 重构文档结构
        'chore',     // 工具链/配置变更
        'ci',        // CI/CD 变更
      ],
    ],
    'subject-max-length': [2, 'always', 100],
    'subject-case': [0],   // 允许中文 subject
  },
}

5.6 Frontmatter 规范

每篇文档必须包含以下 frontmatter:

---
title: 页面中文标题                    # 必填
description: 简短描述(50-160 字符)    # 必填
authors:                               # 必填
  - name: 作者姓名
    date: 2026-04-13                   # ISO 日期格式
navigation:
  title: 侧边栏短标题                  # 可选
  icon: i-lucide-book-open             # 可选
---

6. Claude Code 技能与规则设计

6.1 规则(Rules)

规则文件放在 .claude/rules/ 目录下,Claude Code 自动加载。

规则 1:Markdown 写作标准(markdown-standards.md

规则说明
Frontmatter每个 .md 文件必须以 YAML frontmatter 开头,包含 title、description、authors
标题层级使用 ATX 风格(# 开头),正文从 H2 开始(H1 由 Docus 自动生成)
中英混排中文与英文/数字之间加空格(如"使用 Git 管理")
代码块必须指定语言标识(python、bash 等)
列表使用 - 而非 *
文件末尾保留一个空行
MDC 语法使用 ::note::tip::warning::caution 做提示框
文件命名数字前缀 + 英文短横线:1.getting-started.md
图片放在 public/images/{section}/,引用路径 /images/{section}/{filename}

规则 2:Frontmatter Schema(frontmatter-schema.md

必填字段:

title: string           # 页面标题(中文)
description: string     # 页面描述(50-160 字符)
authors: array          # 至少一个作者
  - name: string        # 作者姓名
    date: string        # YYYY-MM-DD

可选字段:

navigation.title: string   # 侧边栏短标题
navigation.icon: string    # 图标名称
toc: boolean               # 是否显示目录(默认 true)
draft: boolean             # 草稿(不出现在导航中)

6.2 技能(Skills)

技能 1:创建新文档(new-doc

当用户需要创建新文档时:

  1. 确定文档类型(如未指定则询问):
    • 技术文档 → templates/tech-doc.md
    • 论文笔记 → templates/paper-note.md
    • 实验记录 → templates/experiment-log.md
    • 会议纪要 → templates/meeting-note.md
    • 架构决策记录 → templates/adr.md
  2. 确定目标目录
    • 技术文档 → content/2.engineering/
    • 论文笔记 → content/3.research/papers/
    • 实验记录 → content/3.research/experiments/
    • 会议纪要 → content/5.processes/
    • 项目文档 → content/4.projects/{project-name}/
  3. 生成文件:自动填充 title、description、authors.name(从 git config)、authors.date(当天日期)
  4. 校验:运行 markdownlint 检查新文件

技能 2:审查文档质量(review-doc

检查维度:

  • Frontmatter 完整性(必填字段齐全)
  • 标题层级正确性(从 H2 开始,无跳级)
  • 中英文混排空格
  • 代码块语言标识
  • 内部链接格式正确
  • 图片引用路径正确
  • markdownlint 格式校验

输出审查报告,按严重程度分类。


7. 工作流设计

7.1 文档编写全流程

撰写 ──▶ 预览 ──▶ 提交 ──▶ 审核 ──▶ 合并
 │         │        │        │        │
 │         │        │        │        │
任意      npm     husky    Codeup   master
编辑器   run dev   钩子     MR 评审   分支
               自动校验

7.2 详细步骤

步骤 1:撰写文档

# 方式一:手动创建,参照 templates/ 中的模板
# 方式二:使用 Claude Code(推荐)
# 在终端中使用 /new-doc 技能从模板创建

步骤 2:本地预览

pnpm dev    # 或 npm run dev
# 浏览器访问 http://localhost:3000
# 文件保存后自动热更新(HMR),无需手动刷新

步骤 3:提交变更

git add content/2.engineering/1.new-feature.md
git commit -m "docs(engineering): 添加新功能技术方案"
  • pre-commit 钩子 → lint-staged → markdownlint 校验暂存的 .md 文件
  • commit-msg 钩子 → commitlint 校验提交信息格式
  • 校验不通过则提交被阻止

步骤 4:发起审核

git push origin docs/my-feature
# 在 Codeup 上创建合并请求(Merge Request)

步骤 5:合并发布

审核通过后合并到 master 分支。

7.3 Git 分支策略

分支用途示例
master主分支,保护分支
docs/{topic}文档编写分支docs/quick-start
chore/{task}工具链/配置变更chore/update-lint-rules

7.4 Commit Message 规范

格式:type(scope): subject

type用途示例
docs文档内容变更docs(guide): 添加快速开始指南
feat新模板/新功能feat(template): 添加实验记录模板
fix修正错误内容fix(research): 修正算法公式错误
style格式调整style: 统一标题层级格式
refactor重构文档结构refactor: 重新组织工程文档分类
chore工具链变更chore: 更新 markdownlint 规则

8. 快速开始指南

8.1 环境要求

  • Node.js >= 20 LTS
  • pnpm >= 9(推荐)或 npm >= 10
  • Git >= 2.30

8.2 初始化步骤

# 1. 克隆仓库
git clone https://codeup.aliyun.com/uueic/UUAILab/AITeaM/OpenTBook.git
cd OpenTBook

# 2. 安装依赖
pnpm install    # 或 npm install

# 3. 启动开发服务器
pnpm dev        # 或 npm run dev

# 4. 打开浏览器访问
# http://localhost:3000

8.3 编写第一篇文档

# 1. 创建分支
git checkout -b docs/my-first-doc

# 2. 在 content/ 对应目录下创建 .md 文件
# 参照 templates/ 中的模板,添加完整 frontmatter

# 3. 保存后浏览器自动刷新预览

# 4. 提交
git add content/1.guide/4.my-first-doc.md
git commit -m "docs(guide): 添加我的第一篇文档"
git push origin docs/my-first-doc

# 5. 在 Codeup 上发起合并请求

9. 文档模板

9.1 技术文档模板

---
title: 文档标题
description: 简短描述(50-160 字符)
authors:
  - name: 作者姓名
    date: YYYY-MM-DD
---

## 概述

简要说明本文档的目的和背景。

## 问题/需求

描述要解决的问题或需求。

## 方案设计

### 技术选型

### 架构设计

### 关键实现

## 影响评估

### 性能影响

### 兼容性

## 参考资料

- [链接名称](URL)

9.2 论文笔记模板

---
title: '论文标题'
description: 论文核心贡献的一句话总结
authors:
  - name: 笔记作者
    date: YYYY-MM-DD
---

## 论文信息

- **标题**:
- **作者**:
- **发表**:会议/期刊 + 年份
- **链接**:[arXiv](URL) | [PDF](URL)

## 核心贡献

## 方法概述

## 实验结果

## 个人思考

## 与团队工作的关联

9.3 实验记录模板

---
title: '实验名称'
description: 实验目标的一句话总结
authors:
  - name: 实验者
    date: YYYY-MM-DD
---

## 实验目标

## 实验设置

### 数据集

### 模型配置

### 超参数

## 实验结果

## 分析与结论

## 后续计划

9.4 会议纪要模板

---
title: 'YYYY-MM-DD 会议主题'
description: 会议核心议题总结
authors:
  - name: 记录人
    date: YYYY-MM-DD
---

## 会议信息

- **时间**:YYYY-MM-DD HH:MM
- **参与者**:
- **地点/链接**:

## 议题与讨论

### 议题 1

### 议题 2

## 决议事项

| 事项 | 负责人 | 截止日期 |
|------|-------|---------|

## 待办跟踪

9.5 架构决策记录(ADR)模板

---
title: 'ADR-NNN: 决策标题'
description: 决策的一句话总结
authors:
  - name: 提议者
    date: YYYY-MM-DD
---

## 状态

提议中 | 已采纳 | 已废弃 | 已替代

## 背景

什么情况下需要做这个决策?

## 决策

我们决定...

## 理由

为什么选择这个方案?考虑了哪些替代方案?

## 影响

这个决策带来什么后果?

10. 未来扩展规划

10.1 短期(v1.1)

功能说明优先级
静态部署nuxt generate 生成静态站点,部署至内部服务器P1
CI 流水线Codeup CI 配置:自动 lint + 构建 + 部署P1
全文搜索优化Docus 内置搜索已支持,可优化中文分词P2

10.2 中期(v1.2)

功能说明优先级
国际化 (i18n)Docus 原生支持多语言,按需启用P2
文档统计页面字数、更新频率、贡献者排行P3
评论系统集成 Giscus 或类似方案P3

10.3 长期(v2.0)

功能说明优先级
AI 语义搜索基于向量检索的智能问答P3
自动摘要AI 生成文档摘要与关联推荐P3
多仓库聚合聚合多个项目文档到统一知识库P3

附录 A:为什么选择 Docus?

对比维度Docus v5VitePressDocusaurus
底层框架Nuxt 4Vite + VueReact
组件扩展MDC 语法 + 全部 Nuxt UI 组件Vue 组件React 组件
样式系统Tailwind CSS v4(开箱即用)自定义 CSSCSS Modules
实时预览HMR,< 1sHMRHMR
中文支持
扩展为应用Nuxt 全栈能力仅静态站有限
AI 集成内置 AI 助手、llms.txt
学习曲线低(纯 Markdown 即可)

选择理由:Docus 基于 Nuxt 生态,未来可无缝扩展为完整 Web 应用。MDC 语法和 Nuxt UI 组件提供丰富的文档表现力。内置 AI 集成符合团队 AI 方向。

附录 B:MDC 语法速查

<!-- 提示框 -->
::note
这是一条信息提示。
::

::tip
这是一条建议。
::

::warning
这是一条警告。
::

::caution
这是一条危险提示。
::

<!-- 代码组 -->
::code-group

```bash [pnpm]
pnpm install
npm
npm install

::

标题

卡片内容描述。

## 附录 C:常见问题

**Q: 可以用 npm 代替 pnpm 吗?**

A: 可以。所有 `package.json` scripts 兼容 npm。运行 `npm install` + `npm run dev` 即可。

**Q: 图片应该放在哪里?**

A: 放在 `public/images/{section}/` 目录下,在 Markdown 中用 `/images/{section}/{filename}.png` 引用。

**Q: 如何添加新的内容分类?**

A: 在 `content/` 下创建新目录(如 `7.new-section/`),添加 `_dir.yml` 设置标题和图标,Docus 会自动识别。

**Q: 能否离线使用?**

A: 可以。安装依赖后所有功能均在本地运行,不依赖外部服务。
Copyright © 2026