网页 · PWA
部署后直接用浏览器访问,无需另装客户端。界面按屏幕自适应:手机单手快速记录,平板双栏,桌面支持拖放与键盘。
随中枢一起提供01数据模型
目录决定任务放在哪里,日期与时间点决定什么时候关注它,流程记录它走到哪个阶段,步骤拆解它具体怎么做。四个维度彼此独立,引用的始终是同一个任务——在任何一处改变状态,所有视图同时更新。
02日期与时间点
把任务安排到某一天,或者挂在一个还没有确定日期的事件上。安排只是一条引用:同一个任务可以同时出现在好几处,完成一次,处处完成。
加入日程只增加一条安排关系,标题、状态和笔记仍然只存在于任务本身。
把某一天仍未完成的安排批量顺延到次日,自动跳过已完成或已归档的任务,随时可以撤销。
「上线前」「额度重置后」这样的事件到达,只改变事件本身;任务是否完成,仍然由你决定。
03离线优先
界面先读本地数据,不等网络。每次修改和它的待同步记录在同一个本地事务里写入;恢复连接后按顺序推送,再拉取其他设备的变化。
点浏览器里任务前的圆圈改变状态,看修改怎样到达中枢和 Android;再把浏览器切到离线试试。
04自托管
TaskDock 以 Docker 镜像发布在 GitHub Container Registry。服务器上不需要源码,也不需要 Node.js:准备好 compose.yaml 和 .env,拉取镜像、执行迁移、启动,家里的 NAS 也能跑。
# 在空目录中准备 compose.yaml 与 .env.example $ cp .env.example .env # 生成随机密钥,填写 .env 里的密码与令牌 $ openssl rand -base64 48 $ export APP_VERSION=2.0.0-rc.37 $ docker compose pull $ docker compose --profile operations run --rm migrate $ docker compose up -d # 默认访问 http://服务器地址:48731
# 在 .env 中填写 OWNER_USERNAME 与 OWNER_PASSWORD $ docker compose --profile operations run --rm bootstrap # 初始化成功后:从 .env 删除 OWNER_PASSWORD, # 并删除或轮换 BOOTSTRAP_TOKEN
# 先备份数据库,再修改版本号 $ export APP_VERSION=<新版本号> $ docker compose pull $ docker compose --profile operations run --rm migrate $ docker compose up -d # 出现问题时改回上一个版本号,并按备份恢复文档处理数据库
05细节
每个任务都能保存 Markdown 笔记,记下思路、命令、链接和处理过程,和任务放在一起。
在桌面浏览器按 ⌘ K 或 Ctrl K,直接搜索任务和备注。
在手机浏览器里,向右滑过阈值即可完成任务,向左滑展开操作菜单;随手记录有常驻的新建按钮。
归档文件夹会逐项归档整棵子树;恢复时只恢复这一次操作归档的内容,不会误恢复更早归档的任务。
新任务统一使用 TASK-N 全局编号,编号创建后不再改变,在笔记和提交信息里引用都不会失效。
网页端读取系统配色偏好,Android 跟随系统主题。主题属于设备本身,不会同步到其他设备。
06多端
部署后直接用浏览器访问,无需另装客户端。界面按屏幕自适应:手机单手快速记录,平板双栏,桌面支持拖放与键盘。
随中枢一起提供原生 Jetpack Compose 客户端,使用 Room 本地存储,和网页端共用同一套 API 与同步协议。
APK · GitHub ReleasesFastify 与 PostgreSQL 组成的单用户中枢。所有设备的数据最终汇集在这里,也只在这里。
ghcr.io/igngserver/taskdock