Skip to Content
全部文章我的开源项目我烧了4亿token,创造了一个工作台

我烧了4亿token,创造了一个工作台

发布时间: 2026-05-11

Personal Sync

Personal Sync 是一个面向个人工作流的同步工作台,把待办、灵感、文件、文本和常用处理工具放到同一个工作区里,适合在 Web 和桌面端统一管理日常信息。

最初我创造它的目的是为了在个人使用的多台设备上快速共享文本、文件,基于 ws 协议,多端同步数据。后来花费了 4 亿 token 将其迭代成一个个人工作台软件。

源码地址: https://cnb.cool/sojs/personal-sync 暂时只传了cnb,因为我要构建客户端然后部署到国内服务器,cnb还是比github要方便一些。

产品定位

  • 一个账号下可管理多个工作区,按主题拆分个人内容。
  • 核心信息统一收敛在同一界面,减少在待办软件、笔记软件、文件夹和临时工具之间反复切换。
  • 支持密码登录、邀请码注册、Passkey 登录,以及桌面端常用的锁定、快捷键和客户端下载能力。

功能地图

功能简介详细说明
登录与账号登录、注册、Passkey、服务端地址配置、客户端下载查看详情
待办列表 / 四象限 / 已完成三种视图管理任务查看详情
灵感快速记录灵感,按时间流查看 AI 总结查看详情
文件文件夹管理、上传下载、搜索排序、批量选择、分享查看详情
文本富文本编辑、自动同步、AI 优化、关联文件查看详情
文本比对双栏实时差异比对,本地即时计算查看详情
Markdown独立 Markdown 编辑与阅读模式查看详情
JSON 处理标准化、格式化、压缩、校验、树形查看查看详情
其他功能工作区管理、传输任务、自动锁定、后台管理查看详情

客户端支持情况

当前仓库覆盖的使用形态包括:Windows 桌面端、macOS 桌面端、Linux CLI、PC 浏览器端、手机浏览器端。它们共用同一套后端协议,但在交互方式和增强能力上有所区别。

端类型当前支持情况适合场景与其他端的主要差异
Windows 桌面端支持完整主工作区能力日常主力使用、多窗口、多快捷键场景除核心工作区能力外,还支持桌面增强:本地加密存储、Passkey 桌面流程、系统级快捷键、快速新增待办/灵感窗口、剪贴板灵感、工作台显示/隐藏、桌面提醒
macOS 桌面端支持完整主工作区能力Mac 日常办公场景能力边界与 Windows 桌面端基本一致,都是 Electron 壳层 + 同一套 Web 业务界面
Linux CLI支持命令行能力服务器、终端党、轻量自动化场景不提供图形工作台;当前以登录、配置服务端、读取文本、写入文本、新建文本、上传文件、下载文件为主,不覆盖待办看板、灵感面板、Markdown/JSON 可视工具
PC 浏览器端支持完整主工作区能力免安装、跨设备访问与桌面端共享主业务界面,但不具备 Electron 专属增强能力,例如系统级快捷键、快速弹窗、桌面通知桥接、本地文件式存储
手机浏览器端支持精简能力,已有明确范围约束临时查看、轻量记录、移动补充内容当前明确承诺支持:登录、查看文件区、新建和编辑文本、单文件上传;不承诺完整支持文件夹拖拽,也不建议按桌面复杂交互预期使用

多端差异总结

  • 桌面端最完整:适合长期主力使用,尤其是依赖快捷键、弹窗录入、桌面提醒和本地持久化体验的用户。
  • PC 浏览器端最均衡:核心业务功能完整,适合无需安装客户端、但仍希望使用完整工作区的人。
  • 手机浏览器端最轻量:更偏向应急访问和轻输入,不等同于完整桌面体验。
  • Linux CLI 最偏工具化:适合终端读写文本和传文件,不是图形化工作台替代品。

Docker 部署

当前仓库的 Docker 部署是“一个容器同时提供前端静态资源和后端 API”。容器内服务默认监听 3000 端口,对外暴露哪个端口由宿主机映射决定;上传文件等持久化数据通过宿主机目录挂载到容器内 /workspace/apps/server/runtime-storage

部署前提

  • 服务器已安装 Docker。
  • 已准备可访问的 MySQL,并拿到连接串。
  • 服务器上有一个用于保存部署文件和持久化数据的目录,例如 ~/personal-sync/
  • 你已经能访问镜像仓库,或者准备自己构建并推送镜像。

1. 准备环境变量文件

部署时需要一个单独的 .env 文件,run-docker.sh 会通过 --env-file 把它注入容器。建议以仓库根目录的 .env.docker.example 为模板,在服务器部署目录中创建:

mkdir -p ~/personal-sync/files cp .env.docker.example ~/personal-sync/.env

需要重点填写或确认的字段:

  • APP_HOST=0.0.0.0
  • APP_PORT=3000
  • JWT_SECRET:必须改成你自己的随机密钥,不能保留默认值。
  • DATABASE_URL:改成你的 MySQL 连接串,并带上实际数据库名。
  • DB_AUTO_SYNC=true:服务启动时会自动创建数据库并执行内置补丁 SQL,适合首次部署和持续升级。

示例:

APP_HOST=0.0.0.0 APP_PORT=3000 JWT_SECRET=replace-with-your-secret DATABASE_URL=mysql://user:password@127.0.0.1:3306/personal_sync DB_AUTO_SYNC=true

2. 构建并推送镜像

先在项目根目录构建镜像:

docker build -t <你的镜像仓>/personal-sync:<版本> .

然后补一个 latest 标签:

docker tag <你的镜像仓>/personal-sync:<版本> <你的镜像仓>/personal-sync:latest

最后推送两个标签:

docker push <你的镜像仓>/personal-sync:<版本> docker push <你的镜像仓>/personal-sync:latest

版本号可以使用提交短 SHA、日期版本,或你自己的发布版本号。仓库现有流水线默认也是这个思路:正式环境同时维护“一个固定版本标签”和 latest,测试环境则使用单独的测试标签。

3. 把启动脚本放到服务器

仓库根目录的 run-docker.sh 用于完成以下动作:

  • 检查 .env 文件是否存在。
  • 创建宿主机持久化目录。
  • 拉取指定镜像。
  • 如果旧容器已存在,先停止并删除。
  • 使用新的镜像重新启动容器。

把这个脚本放到服务器部署目录,例如:

scp run-docker.sh <user>@<server>:~/personal-sync/run-docker.sh ssh <user>@<server> "chmod +x ~/personal-sync/run-docker.sh"

4. 在服务器启动容器

run-docker.sh 支持通过环境变量覆盖默认值,核心变量如下:

  • IMAGE_REPO:镜像仓库,默认是 docker.cnb.cool/sojs/personal-sync
  • IMAGE_TAG:镜像标签,默认是 latest
  • CONTAINER_NAME:容器名,默认是 personal-sync
  • HOST_PORT:宿主机暴露端口,默认是 6543
  • ENV_FILE:部署环境文件路径
  • HOST_STORAGE_DIR:宿主机文件存储目录

正式环境可以按下面的方式启动:

CONTAINER_NAME=personal-sync \ HOST_PORT=6543 \ ENV_FILE=~/personal-sync/.env \ HOST_STORAGE_DIR=~/personal-sync/files \ IMAGE_REPO=<你的镜像仓库>/personal-sync \ bash ~/personal-sync/run-docker.sh

如果你要部署某个指定版本,而不是 latest,再额外传入 IMAGE_TAG

CONTAINER_NAME=personal-sync \ HOST_PORT=6543 \ ENV_FILE=~/personal-sync/.env \ HOST_STORAGE_DIR=~/personal-sync/files \ IMAGE_REPO=<你的镜像仓库>/personal-sync \ IMAGE_TAG=<版本号> \ bash ~/personal-sync/run-docker.sh

这一步对应 .cnb.yml 里的远程部署逻辑,但这里保留的是可手动执行的步骤,不直接暴露可复用的流水线配置。

5. 验证部署

脚本执行完成后会输出容器名、镜像名、访问端口和挂载目录。你还可以手动检查:

docker ps docker logs personal-sync

默认情况下,如果你把宿主机 6543 端口映射到容器 3000,浏览器访问:

http://<你的服务器地址>:6543

首次启动时,服务会按 DATABASE_URL 自动创建数据库并执行 apps/server/db/patches/ 下的补丁脚本。上传文件会落到宿主机 HOST_STORAGE_DIR 指定的目录中,容器重建后不会丢失。

详细功能

1. 登录与账号

登录界面

登录页负责完成账号进入工作区前的全部基础动作,包括密码登录、邀请码注册、Passkey 登录、服务端地址配置,以及桌面客户端下载。

核心能力

  • 密码登录:输入用户名和密码后进入工作区。
  • 邀请码注册:普通用户通过邀请码注册账号,再使用新账号登录。
  • Passkey 登录:在支持环境下可直接使用 Passkey 完成身份验证。
  • 服务端地址配置:可切换后端地址,适合自部署或桌面端连接指定服务。
  • 客户端下载:登录页提供 Windows、macOS、Linux 的下载入口。

使用说明

  • 首次使用时,先配置服务端地址,再完成注册或登录。
  • 有较高账号安全要求时,登录后可在账户菜单中继续绑定 Passkey。
  • 需要桌面体验时,可直接从登录页下载安装客户端。

2. 待办

待办界面

待办模块用于维护当前工作区的执行清单,既支持普通列表,也支持按四象限管理优先级,还能单独查看已完成事项。

核心能力

  • 三种视图:列表、四象限、已完成。
  • 四象限分类:重要且紧急、紧急不重要、重要不紧急、不重要不紧急。
  • 待办字段:标题、说明、计划时间、象限。
  • 拖拽调整:四象限视图下可直接拖拽待办切换象限。
  • 完成流转:未完成事项可标记完成,已完成事项可撤销恢复。
  • 已完成分页:完成记录支持继续加载更多历史项。

使用价值

  • 列表模式适合快速扫清当天清单。
  • 四象限模式适合做优先级判断和任务分配。
  • 已完成模式适合回看执行结果,避免任务做完后直接消失。

3. 灵感

灵感界面

灵感模块适合快速收集碎片化想法,再通过 AI 或人工整理,把零散输入变成可复用内容。

核心能力

  • 快速记录:输入内容后回车即可加入 Inbox,Shift + Enter 换行。
  • Inbox 收集:未总结灵感集中存放,适合后续批量整理。
  • 重要标记:可把关键灵感单独标记为重要。
  • 删除管理:无效灵感可直接清理。
  • AI 总结:支持把当前 Inbox 内容整理成总结结果。
  • 时间流查看:总结结果按日期分组展示,并支持继续加载更多。
  • 转为文本:总结内容可继续转成文本,进入长期沉淀流程。

使用价值

  • 适合捕捉临时想法、会议闪念、阅读摘录和行动线索。
  • 先收集、后整理的流程能降低记录门槛。
  • 总结转文本的设计让灵感可以自然进入正式笔记体系。

4. 文件

文件界面

文件模块负责工作区内的层级化文件管理,支持上传、下载、目录浏览和后续分享预览等动作。

核心能力

  • 目录导航:支持从根目录逐层进入文件夹。
  • 上传文件:支持按钮上传,也支持直接拖拽到文件区域。
  • 新建文件夹:在当前目录下快速创建结构。
  • 搜索与排序:可按名称搜索,也可按名称或更新时间排序。
  • 视图切换:支持网格视图和列表视图。
  • 选择模式:支持多选、全选和批量删除。
  • 下载文件:点击文件即可下载,点击文件夹进入下级目录。
  • 上传状态反馈:上传中的文件会展示传输进度与错误状态。

延伸能力

  • 文件可进一步用于分享链接生成。
  • 支持把可识别内容加载到 Markdown 或 JSON 工具中继续处理。
  • 传输任务会统一显示在顶部任务列表中,便于查看上传下载进度。

5. 文本

文本界面

文本模块是工作区里的富文本编辑区,适合沉淀会议记录、方案草稿、阶段总结和长期笔记。

核心能力

  • 富文本编辑:支持常规富文本内容输入与排版。
  • 标题内联修改:可直接点击标题重命名当前文本。
  • 自动同步:编辑状态会持续同步,并显示当前同步状态与最后同步时间。
  • @ 关联能力:可在文本内关联工作区中的文本或文件。
  • 图片嵌入:支持把图片上传到工作区并嵌入富文本内容。
  • AI 优化:可对当前文本发起 AI 润色或优化。
  • 冲突处理:离线或多端编辑冲突时,可对比本地草稿与远端版本并选择处理方式。
  • 冲突留痕:最近冲突版本会保留,便于回看和确认。

使用价值

  • 比纯文件管理更适合长期内容沉淀。
  • 比临时 Markdown 工具更适合与工作区内文件、灵感和同步状态联动。
  • 冲突处理能力适合多端使用场景。

6. 文本比对

文本比对界面

文本比对模块用于快速比较两段文本内容,不依赖服务端接口,打开即可使用。

核心能力

  • 双栏编辑:左右两侧都可直接输入或粘贴内容。
  • 实时高亮差异:修改后立即显示新增、删除和变更区域。
  • 本地运行:不依赖网络请求,适合临时快速比对。
  • 一键复制:可分别复制左侧或右侧内容。
  • 重置示例:可快速恢复默认示例内容。

使用场景

  • 对比原稿与修改稿。
  • 检查 AI 优化前后的文本差异。
  • 临时验证接口文案、配置内容或说明文档的变更。

7. Markdown 编辑器

Markdown 界面

Markdown 编辑器提供独立的 Markdown 编写和阅读体验,适合处理结构化文档、草稿和说明材料。

核心能力

  • 编辑模式:直接编写 Markdown 内容。
  • 阅读模式:渲染最终效果,便于阅读检查。
  • 文档大纲:阅读模式下展示目录结构,适合长文导航。
  • 本地缓存:内容保存在当前浏览器本地,不依赖服务端同步。
  • 外部加载:可把工作区里的 Markdown 文本加载进来继续编辑。

使用价值

  • 适合整理接口文档、会议纪要、技术草稿和说明文档。
  • 与工作区主文本区分开,适合专门处理 Markdown 结构化内容。

8. JSON 处理

JSON 处理界面

JSON 处理模块用于快速整理、修复和检查 JSON 内容,适合接口调试、配置整理和数据清洗。

核心能力

  • 文本模式:适合直接粘贴和编辑原始 JSON。
  • 树形模式:适合查看层级结构并展开折叠节点。
  • 标准化:尝试修复非标准内容并转换为合法 JSON。
  • 格式化:输出易读的缩进格式。
  • 压缩:压缩成紧凑 JSON。
  • 校验:检查当前 JSON 是否有效。
  • 展开 / 折叠:适合处理层级较深的数据。
  • 复制与清空:便于快速带走结果或重新开始。
  • 外部载入:支持把工作区里的 JSON 文件内容加载进来继续处理。

使用价值

  • 适合接口返回值检查。
  • 适合配置文件清理和规范化。
  • 适合在不切换外部工具的情况下完成临时 JSON 操作。

9. 其他功能

其他功能界面

除核心工作区能力外,Personal Sync 还提供一组账户级和系统级辅助能力,覆盖安全、分享、管理和桌面端增强场景。

账户与安全

  • 工作区管理:创建、切换、删除当前账号下的工作区。
  • Passkey 管理:查看、绑定、删除当前账号的 Passkey 凭证。
  • 修改密码:支持更新登录密码。
  • 自动锁定:可设置数字锁定密码和自动锁定超时时间。

协作与分发

  • 分享链接:为文件生成无需登录即可下载的分享链接。
  • 分享列表:分页查看历史分享记录,并支持复制、停止、延期。
  • 传输任务:统一查看上传与下载任务进度、状态和失败信息。

AI 与效率

  • AI 设置:配置灵感总结与文本优化所使用的模型服务。
  • Token 管理:为灵感接入和自动化生成 API Token。
  • 快捷键设置:可配置快速新增待办、快速新增灵感等快捷操作。

管理后台

  • 管理用户:管理员可查看普通用户、重置密码、禁用、启用和删除账号。
  • 邀请码管理:管理员可生成邀请码,并查看状态、过期时间和使用记录。

使用价值

  • 让工作区不仅能记录内容,也能覆盖安全控制和日常运维动作。
  • 对个人使用者,重点是 Passkey、自动锁定、快捷键和分享。
  • 对管理员,重点是邀请码发放和用户管理。

适用场景

  • 需要把待办、笔记、文件和灵感放到同一工作区统一维护。
  • 希望在 Web 和桌面端共享同一套工作流与数据入口。
  • 经常处理临时文本、Markdown、JSON 或文稿比对,希望在一个工具里直接完成。

阅读顺序建议

  1. 先看“产品定位”和“功能地图”,快速了解整体结构。
  2. 再按顺序阅读各功能详细部分,主 README 已包含完整说明。
  3. 最后结合界面截图确认自己最关心的模块是否符合预期。
最后编辑于

hi