|
1 | | -一个基于 [Tiptap](https://tiptap.dev/) 和 [Next.js](https://nextjs.org/) 构建的现代化协同文档编辑器,集成了丰富的编辑能力与多人实时协作功能,支持插件扩展、主题切换与持久化存储。适合团队写作、教育笔记、在线文档平台等场景。 |
| 1 | +## 📖 简介 |
2 | 2 |
|
3 | | -## 🚀 功能特性 |
| 3 | +**DocFlow** 是一款面向团队协作的块级文档编辑器。它融合了 Notion 的灵活性与飞书的协作能力,通过块级内容架构、实时协同编辑和 AI 辅助功能,帮助团队高效完成文档创作与知识管理。 |
4 | 4 |
|
5 | | -- 📄 富文本编辑:标题、列表、表格、代码块、数学公式、图片、拖拽等 |
| 5 | +我们希望通过技术手段减少协作摩擦,让文档编辑更接近团队的真实工作流。无论是产品规划文档、技术方案设计,还是会议记录整理,DocFlow 都能提供流畅的创作体验。 |
6 | 6 |
|
7 | | -- 👥 实时协作:使用 Yjs + @hocuspocus/provider 实现高效协同 |
| 7 | +### ✨ 核心特性 |
8 | 8 |
|
9 | | -- 🧩 插件丰富:基于 Tiptap Pro 多种增强功能(如表情、详情组件等) |
| 9 | +DocFlow 参考了 Notion 与飞书的设计理念,将内容以块为单位进行组织。每个块都是独立的编辑单元,可以灵活组合与调整,同时支持实时协作与 AI 辅助。 |
10 | 10 |
|
11 | | -- 🧰 完善工具链:支持 Prettier、ESLint、Husky、Vitest 等开发工具 |
| 11 | +- 🧱 块级编辑器:支持文本、标题、列表、代码块、表格、图片、视频等 20+ 种内容类型,通过拖拽即可调整块级元素的顺序与层级关系。 |
12 | 12 |
|
13 | | -## 📦 技术栈 |
| 13 | +- ⚡ 实时协作:基于 Yjs CRDT 算法实现多人同步编辑,自动处理编辑冲突。支持实时光标跟踪、成员在线状态与历史版本回溯。 |
14 | 14 |
|
15 | | -### 前端技术栈 |
| 15 | +- 🤖 AI 功能:内置 AI 助手,支持头脑风暴、内容润色、文档续写与智能问答。可根据上下文生成结构化内容建议。 |
16 | 16 |
|
17 | | -| 技术 | 说明 | |
18 | | -| --------------------- | -------------------------------- | |
19 | | -| **Next.js** | 构建基础框架,支持 SSR / SSG | |
20 | | -| **Tiptap** | 富文本编辑器,基于 ProseMirror | |
21 | | -| **Yjs** | 协同编辑核心,CRDT 数据结构 | |
22 | | -| **@hocuspocus** | Yjs 的服务端与客户端 Provider | |
23 | | -| **React 19** | UI 框架,支持 Suspense 等新特性 | |
24 | | -| **Tailwind CSS** | 原子化 CSS,集成动画、表单样式等 | |
25 | | -| **Socket.io** | 协同通信通道 | |
26 | | -| **Prettier/ESLint** | 代码风格统一 | |
27 | | -| **Vitest/Playwright** | 单元测试与端到端测试支持 | |
| 17 | +## 技术选型 |
28 | 18 |
|
29 | | - |
| 19 | +DocFlow 采用全栈 TypeScript 架构,前端基于 Next.js 构建,后端使用 NestJS 框架。通过统一的类型系统和现代化的工程实践,保证了代码质量与开发效率。 |
30 | 20 |
|
31 | | -### 后端技术栈 |
| 21 | +### 🎨 前端架构 (Client-side) |
32 | 22 |
|
33 | | -| 分类 | 技术 / 工具 | 说明 | |
34 | | -| ---------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------- | |
35 | | -| **应用框架** | [NestJS](https://nestjs.com/) | 现代化 Node.js 框架,支持模块化、依赖注入、装饰器和类型安全等特性 | |
36 | | -| **HTTP 服务** | [Fastify](https://www.fastify.io/) | 高性能 Web 服务引擎,替代 Express,默认集成于 NestJS 中 | |
37 | | -| **协同编辑服务** | `@hocuspocus/server`, `yjs` | 提供文档协同编辑的 WebSocket 服务与 CRDT 算法实现 | |
38 | | -| **数据库 ORM** | [Prisma](https://www.prisma.io/) | 类型安全的数据库访问工具,自动生成 Schema、支持迁移与种子数据 | |
39 | | -| **数据验证** | `class-validator`, `class-transformer` | 请求数据验证与自动转换,配合 DTO 使用 | |
40 | | -| **用户鉴权** | `@nestjs/passport`, `passport`, `JWT`, `GitHub` | 支持本地登录、JWT 认证与 GitHub OAuth 登录 | |
41 | | -| **缓存与状态** | `ioredis` | 用于缓存数据、实现限流、协同会话管理或 Pub/Sub 消息推送 | |
42 | | -| **对象存储** | `minio` | 私有化部署的 S3 兼容存储服务,支持图片与附件上传 | |
43 | | -| **图像处理** | `sharp` | 图像压缩、格式转换、缩略图等操作 | |
44 | | -| **日志系统** | `winston`, `winston-daily-rotate-file` | 支持多种格式、日志分级、自动归档的日志方案 | |
45 | | -| **服务监控** | `@nestjs/terminus`, `prom-client` | 提供 `/health` 健康检查和 `/metrics` Prometheus 指标暴露接口 | |
46 | | -| **监控平台** | [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com/) | 采集与可视化服务运行指标(已内置 Docker 部署配置) | |
47 | | -| **接口文档** | `@nestjs/swagger` | 基于代码注解自动生成 Swagger UI 文档 | |
48 | | -| **安全中间件** | `@fastify/helmet`, `@fastify/rate-limit` | 添加 HTTP 安全头部、限制请求频率、防止暴力攻击等安全保护 | |
49 | | -| **文件上传** | `@fastify/multipart`, `@webundsoehne/nest-fastify-file-upload` | 支持文件流式上传,集成 Fastify 与 NestJS 的多文件上传处理 | |
| 23 | +#### **Next.js** |
50 | 24 |
|
51 | | - |
| 25 | +项目基于 Next.js App Router 架构,利用 React Server Components 优化首屏渲染性能。通过 Server Actions 实现前后端通信,确保类型安全的同时简化了数据流转。 |
52 | 26 |
|
53 | | -## 🚀 快速开始 |
| 27 | +#### **Tiptap** |
54 | 28 |
|
55 | | -### 1. 克隆仓库 |
| 29 | +编辑器核心采用 Tiptap 框架,基于 ProseMirror 构建。通过扩展机制实现了丰富的块级编辑能力,支持自定义节点与快捷命令,为用户提供接近 Notion 的编辑体验。 |
56 | 30 |
|
57 | | -```bash |
58 | | -git clone https://github.com/xun082/DocFlow.git |
59 | | -cd DocFlow |
60 | | -``` |
| 31 | +#### **Yjs** |
61 | 32 |
|
62 | | -### 安装依赖 |
| 33 | +协作功能基于 Yjs CRDT 算法实现,能够自动处理多人编辑时的冲突,保证数据最终一致性。配合 Awareness 模块,实现了实时光标追踪与在线状态同步。 |
63 | 34 |
|
64 | | -建议使用 pnpm: |
| 35 | +### ⚙️ 后端架构 (Server-side) |
65 | 36 |
|
66 | | -```bash |
67 | | -pnpm install |
68 | | -``` |
| 37 | +#### **NestJS & Prisma** |
69 | 38 |
|
70 | | -### 启动本地开发环境 |
| 39 | +后端使用 NestJS 模块化框架,通过依赖注入实现业务逻辑解耦。Prisma ORM 提供类型安全的数据访问层,支持高效的数据库查询与迁移管理。 |
71 | 40 |
|
72 | | -```bash |
73 | | -pnpm dev |
74 | | -``` |
| 41 | +#### **Hocuspocus** |
75 | 42 |
|
76 | | -### 如何部署 |
| 43 | +Hocuspocus 作为 Yjs 的 WebSocket 服务端,负责协调文档协作会话,处理客户端连接与数据同步。通过拦截器机制实现权限控制与数据持久化。 |
77 | 44 |
|
78 | | -确保已安装以下环境: |
| 45 | +#### **Prometheus & Grafana** |
79 | 46 |
|
80 | | -- Docker |
| 47 | +集成 Prometheus 进行指标采集,通过 Grafana 可视化展示系统运行状态。监控包括 API 响应时间、数据库查询性能、WebSocket 连接数等核心指标。 |
81 | 48 |
|
82 | | -- 推荐:Linux/macOS 或启用 WSL 的 Windows 环境 |
| 49 | + |
83 | 50 |
|
84 | | -1️⃣ 构建镜像 |
| 51 | +Grafana 监控面板实时展示系统各项性能指标,包括请求量、响应时间、错误率等关键数据,帮助快速定位性能瓶颈。 |
85 | 52 |
|
86 | | -```bash |
87 | | -docker build -t doc-flow . |
88 | | -``` |
| 53 | +#### **ELK Stack (Elasticsearch & Kibana)** |
89 | 54 |
|
90 | | -2️⃣ 启动容器 |
| 55 | +使用 Elasticsearch 存储和检索日志数据,Kibana 提供日志分析与可视化能力。支持全文搜索、日志聚合与异常检测,便于问题排查与系统审计。 |
91 | 56 |
|
92 | | -```bash |
93 | | -docker run -p 6001:6001 doc-flow |
94 | | -``` |
| 57 | + |
95 | 58 |
|
96 | | -启动完成之后访问地址: |
| 59 | +Kibana 日志分析界面,支持按时间、日志级别、服务模块等维度查询和过滤日志,提供结构化的问题排查路径。 |
97 | 60 |
|
98 | | -```bash |
99 | | -http://localhost:6001 |
100 | | -``` |
| 61 | +#### **MinIO & RabbitMQ** |
| 62 | + |
| 63 | +MinIO 提供对象存储服务,用于存储用户上传的图片、视频等文件。RabbitMQ 作为消息队列,处理异步任务如图片压缩、邮件发送等,避免阻塞主业务流程。 |
| 64 | + |
| 65 | +## 功能介绍 |
| 66 | + |
| 67 | +DocFlow 将 AI 能力集成到编辑器中,通过理解文档上下文来辅助内容创作。AI 不是简单的文本生成工具,而是能够理解语义、提供决策建议的智能助手。 |
| 68 | + |
| 69 | +### AI 头脑风暴 |
| 70 | + |
| 71 | +当你有一个初步想法但不知如何展开时,AI 头脑风暴可以帮助拓展思路。输入核心概念后,AI 会从不同角度生成 3-6 个结构化方案,每个方案都包含具体的实施思路。 |
| 72 | + |
| 73 | + |
| 74 | + |
| 75 | +在编辑器中输入头脑风暴主题,AI 会基于输入内容理解你的需求场景。 |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | +AI 生成的多个方案以卡片形式展示,每个方案都有清晰的标题和详细说明。你可以选择任意方案插入到文档中,或者继续优化调整。 |
| 80 | + |
| 81 | +这不只是简单的内容生成,AI 会根据上下文理解你的意图。无论是产品功能设计、内容分类规划,还是业务流程优化,AI 都能提供可行的思路参考,帮助快速决策。 |
| 82 | + |
| 83 | +### AI 文本润色 |
| 84 | + |
| 85 | + |
| 86 | + |
| 87 | +选中需要优化的文本段落,AI 会分析文本结构与表达方式,提供更清晰、更专业的改写建议。支持调整语气风格,如正式、简洁、友好等。 |
| 88 | + |
| 89 | +### AI 续写 |
| 90 | + |
| 91 | +AI 续写功能会根据前文内容自然延续写作。当前文内容较长时,系统通过 RAG (检索增强生成) 技术,从文档中检索相关段落,确保续写内容与上下文保持逻辑一致,避免偏离主题。 |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | +AI 续写时会参考前文的写作风格、用词习惯和逻辑结构,生成连贯自然的后续内容。你可以继续编辑生成的文本,或者重新生成。 |
| 96 | + |
| 97 | +### AI 聊天 |
| 98 | + |
| 99 | +目前 AI 聊天功能作为独立页面存在,后续会集成到编辑器侧边栏,与文档内容深度关联。未来计划实现 Agent 模式,类似 Cursor 那样能够自动编辑文档内容。 |
| 100 | + |
| 101 | + |
101 | 102 |
|
102 | | -## 🔧 常用脚本 |
| 103 | +### 协同编辑 |
103 | 104 |
|
104 | | -| 脚本命令 | 作用说明 | |
105 | | -| ----------------- | ----------------------------- | |
106 | | -| `pnpm dev` | 启动开发服务器 | |
107 | | -| `pnpm build` | 构建生产环境代码 | |
108 | | -| `pnpm start` | 启动生产环境服务(端口 6001) | |
109 | | -| `pnpm lint` | 自动修复所有 ESLint 报错 | |
110 | | -| `pnpm format` | 使用 Prettier 格式化代码 | |
111 | | -| `pnpm type-check` | 运行 TypeScript 类型检查 | |
112 | | -| `pnpm test` | 启动测试(如配置) | |
| 105 | + |
113 | 106 |
|
114 | | -## 🧰 开发规范 |
| 107 | +多人同时编辑时,每个用户都有独立的光标颜色标识。文档修改实时同步,冲突自动合并。右侧显示当前在线成员列表与他们的编辑位置。 |
115 | 108 |
|
116 | | -- 使用 Prettier 和 ESLint 保证代码风格统一 |
| 109 | +## 未来计划 |
117 | 110 |
|
118 | | -- 配置了 Husky + lint-staged 进行 Git 提交前检查 |
| 111 | +DocFlow 将持续优化协作体验与 AI 能力,同时加强工程化建设,提升系统可扩展性。 |
119 | 112 |
|
120 | | -- 使用 Commitizen + cz-git 管理提交信息格式(支持语义化发布) |
| 113 | +### 🏗️ 工程化体系深度重构 |
121 | 114 |
|
122 | | -初始化 Git 提交规范: |
| 115 | +- **迈向 Monorepo 架构**:计划基于 pnpm workspaces 和 Turborepo 将项目重构为 Monorepo。前后端代码分离,共享类型定义与工具函数,提升代码复用率与构建效率。 |
| 116 | + |
| 117 | +- **组件库与插件生态开放**:将 Tiptap 自定义扩展(如代码沙箱、交互式图表等)提取为独立 npm 包,开放给社区使用。同时建立插件开发规范,支持第三方开发者扩展编辑器能力。 |
| 118 | + |
| 119 | +### 🎙️ 多维协同体验升级 |
| 120 | + |
| 121 | +- **集成 LiveKit 实时音视频**:在文档协作场景中引入实时音视频通话。团队成员可以边看文档边讨论,提升复杂决策场景下的沟通效率。 |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +- **实时群聊系统**:在文档侧边栏集成实时聊天功能,支持针对文档内容发起讨论。消息可以关联到具体的文档块,形成完整的协作反馈闭环。 |
| 126 | + |
| 127 | +### 🤖 智能内核的跨越式进化 |
| 128 | + |
| 129 | +- **基于 RAG 的私有知识库**:引入 RAG (Retrieval-Augmented Generation) 技术,让 AI 能够检索用户的历史文档。AI 回答问题时会参考团队沉淀的知识资产,提供更精准的决策支持。 |
| 130 | + |
| 131 | +- **从 Copilot 迈向 Agent**:探索 AI Agent 在文档场景的应用。未来 AI 将能够自主执行任务,例如从会议纪要中提取待办事项,自动同步到第三方工具,实现从辅助创作到自动化办公的升级。 |
| 132 | + |
| 133 | +## 🚀 快速开始 |
| 134 | + |
| 135 | +### 环境要求 |
| 136 | + |
| 137 | +- **Node.js** >= 24 |
| 138 | +- **pnpm** >= 10.28.2 |
| 139 | + |
| 140 | +### 本地开发 |
| 141 | + |
| 142 | +1. **克隆仓库** |
123 | 143 |
|
124 | 144 | ```bash |
125 | | -pnpm commit |
| 145 | +git clone https://github.com/xun082/DocFlow.git |
| 146 | +cd DocFlow |
126 | 147 | ``` |
127 | 148 |
|
128 | | -## 📌 未来规划(Roadmap) |
| 149 | +2. **安装依赖** |
129 | 150 |
|
130 | | -项目目前已具备基础协作编辑能力,未来将持续完善并拓展更多功能,进一步提升产品的实用性与专业性: |
| 151 | +```bash |
| 152 | +pnpm install |
| 153 | +``` |
131 | 154 |
|
132 | | -### ✅ 近期目标 |
| 155 | +3. **启动开发服务器** |
133 | 156 |
|
134 | | -- [ ] **完善现有功能体验** |
| 157 | +```bash |
| 158 | +pnpm dev |
| 159 | +``` |
135 | 160 |
|
136 | | - - 优化协同冲突解决策略 |
137 | | - - 更细粒度的权限管理(只读 / 可评论 / 可编辑) |
138 | | - - 增强拖拽体验与文档结构导航(大纲视图) |
| 161 | +4. **打开浏览器访问** |
139 | 162 |
|
140 | | -- [ ] **增强文档组件系统** |
| 163 | +``` |
| 164 | +http://localhost:3000 |
| 165 | +``` |
141 | 166 |
|
142 | | - - 重构基础组件体系:标题、表格、代码块等更智能、模块化 |
143 | | - - 增加工具栏、快捷键提示和 Markdown 快速输入支持 |
| 167 | +## 🐳 Docker 部署 |
144 | 168 |
|
145 | | -- [ ] **丰富文档类型与节点支持** |
| 169 | +### 方式一:使用 Docker Compose(推荐) |
146 | 170 |
|
147 | | - - 支持更多 **自定义 Tiptap 节点**,如: |
| 171 | +```bash |
| 172 | +# 使用预构建镜像 |
| 173 | +docker-compose up -d |
148 | 174 |
|
149 | | - - 引用评论块(Comment Block) |
150 | | - - 自定义警告框 / 提示框(Tip/Warning) |
151 | | - - UML/流程图嵌入(如支持 Mermaid) |
152 | | - - 数据展示组件(如 TableChart、Kanban) |
| 175 | +# 访问应用 |
| 176 | +http://localhost:3000 |
| 177 | +``` |
153 | 178 |
|
154 | | -### 🚀 中期目标 |
| 179 | +### 方式二:手动构建 |
155 | 180 |
|
156 | | -- [ ] **引入音视频实时会议能力** |
| 181 | +1. **构建镜像** |
157 | 182 |
|
158 | | - - 集成 [LiveKit](https://livekit.io/) 或 [Daily](https://www.daily.co/) 实现嵌入式音视频会议 |
159 | | - - 支持多人语音 / 视频通话,结合文档协同,提升远程会议效率 |
160 | | - - 集成会议内共享笔记区、AI 摘要、会议录制等功能 |
| 183 | +```bash |
| 184 | +docker build -t docflow:latest . |
| 185 | +``` |
161 | 186 |
|
162 | | -- [ ] **集成 AI 能力** |
| 187 | +2. **运行容器** |
163 | 188 |
|
164 | | - - 智能语法纠错、改写建议 |
165 | | - - 语义搜索与问答(支持上下文理解) |
166 | | - - AI 总结 / 摘要生成 |
| 189 | +```bash |
| 190 | +docker run -d \ |
| 191 | + --name docflow \ |
| 192 | + -p 3000:3000 \ |
| 193 | + -e NODE_ENV=production \ |
| 194 | + docflow:latest |
| 195 | +``` |
167 | 196 |
|
168 | | -- [ ] **多平台同步支持** |
| 197 | +3. **访问应用** |
169 | 198 |
|
170 | | - - PWA 支持,适配移动端和桌面离线编辑 |
171 | | - - 跨设备自动同步与版本恢复 |
| 199 | +``` |
| 200 | +http://localhost:3000 |
| 201 | +``` |
172 | 202 |
|
173 | | -### 🧠 长期方向 |
| 203 | +### 健康检查 |
174 | 204 |
|
175 | | -- [ ] **插件生态系统建设** |
| 205 | +容器内置健康检查端点: |
176 | 206 |
|
177 | | - - 引入用户可安装的第三方插件体系 |
178 | | - - 提供插件开发文档与市场入口 |
| 207 | +```bash |
| 208 | +curl http://localhost:3000/api/health |
| 209 | +``` |
179 | 210 |
|
180 | | -- [ ] **文档协作平台化** |
| 211 | +## 🤝 贡献指南 |
181 | 212 |
|
182 | | - - 支持文档团队空间、多人组织结构 |
183 | | - - 文档看板与团队活动看板集成 |
| 213 | +欢迎提交 Issue 和 Pull Request! |
184 | 214 |
|
185 | | -- [ ] **权限与审计系统** |
| 215 | +在提交代码前,请确保: |
186 | 216 |
|
187 | | - - 支持操作日志记录、文档编辑历史审查 |
188 | | - - 审批流、编辑建议、协同讨论区等功能 |
| 217 | +- 运行 `pnpm type-check` 通过类型检查 |
189 | 218 |
|
190 | | -## License |
| 219 | +- 运行 `pnpm lint` 通过代码检查 |
191 | 220 |
|
192 | | -本项目采用 MIT 开源协议发布,**但包含部分 Tiptap Pro 模板代码除外**。 |
| 221 | +- 运行 `pnpm format` 格式化代码 |
193 | 222 |
|
194 | | -Tiptap Pro 模板版权归 Tiptap GmbH 所有,并根据 Tiptap Pro 授权协议进行授权。 |
195 | | -详见:https://tiptap.dev/pro/license |
| 223 | +- 遵循项目的代码规范和提交规范 |
196 | 224 |
|
197 | | -如需使用本项目中涉及 Tiptap Pro 的部分,必须拥有有效的 Tiptap Pro 订阅授权。 |
| 225 | +详见 [CONTRIBUTING.md](https://github.com/xun082/DocFlow/blob/main/CONTRIBUTING.md) |
198 | 226 |
|
199 | 227 | ## 📬 联系方式 |
200 | 228 |
|
201 | | -有更多的问题或者想参与开源,可以添加我微信 `yunmz777` |
| 229 | +- **问题反馈**:[GitHub Issues](https://github.com/xun082/DocFlow/issues) |
| 230 | + |
| 231 | +- **功能建议**:[GitHub Discussions](https://github.com/xun082/DocFlow/discussions) |
| 232 | + |
| 233 | +- **微信交流**:`yunmz777` |
0 commit comments