Files
dodo/docs/decisions.md
T
2026-09-06 14:41:08 +08:00

3.0 KiB
Raw Blame History

dodo 产品与技术决策记录

定位

dodo 是一个纯自托管的 TickTick-like 任务与习惯管理工具。目标不是一比一复刻 TickTick,而是做一个数据归自己、界面温暖紧凑、适合个人长期使用的任务系统。

当前边界

  • 首版只做本地开发验证,不部署。
  • 首版不做通知渠道:Web Push、Telegram、SMTP 暂不实现。
  • 首版附件只做本地存储,不实现 S3。
  • 首版不做番茄钟。
  • 首版不做自然语言创建任务。

技术栈

  • Monorepofrontend/backend/
  • 前端:Vue 3 + TypeScript + Vite + Tailwind CSS + Shadcn-vue/Reka UI
  • 后端:FastAPI + Pydantic v2 + SQLAlchemy 2 Async + Alembic
  • 数据库:PostgreSQL,主键 UUIDv7,时间统一 UTC,用户配置时区
  • 包管理:uv + pnpm
  • 交付:单 Docker 镜像,外部 PostgreSQL
  • 许可证:AGPL-3.0

数据库

本地开发数据库:

postgresql+asyncpg://postgres:***@10.10.100.99:5433/dodo

已从默认 postgres 库迁移到独立 dodo 库。误建在 postgres.public 的 dodo 表已清理。

产品模型

任务

  • 文件夹 → 清单 → 任务
  • 系统内置收集箱,不允许删除
  • 任务支持一层子任务
  • 状态:未完成 / 已完成
  • 优先级:无 / 低 / 中 / 高
  • Markdown 描述
  • 截止日期 + 具体时间
  • 多提醒设计预留
  • 删除为软删除,回收站手动清空
  • 支持创建、修改、完成、恢复、删除操作历史
  • 并发编辑使用原子乐观锁

重复任务

  • RFC 5545 RRULE
  • 模板 + 实例
  • 修改范围:仅本次 / 本次及以后 / 全部
  • 删除单次保存为例外
  • 每月 31 日在无 31 日月份跳过
  • 逾期完成不影响下次计划日期

习惯

  • 完成型 + 数值型
  • 每天 / 每周 / 每月 / 间隔天数
  • 数值型当日累计,达标后封顶
  • 允许补打和修改历史
  • 支持暂停区间,暂停期不破坏连续记录
  • 归档后保留历史统计

UI 方向

  • 手账生活感
  • 中高信息密度
  • 1012px 中等圆角
  • 细分割线为主,少量浅底色
  • 强调色:#F15A29
  • 只做浅色模式
  • 系统字体栈
  • 不使用猫猫元素
  • 轻微动效

页面结构

  • 桌面三栏:左导航 / 中任务列表 / 右任务详情
  • 手机底部导航
  • 顶部快速输入,手机悬浮新增按钮
  • 桌面右侧详情栏,手机底部弹层
  • 习惯首页:今日习惯列表 + 一周打卡格
  • 搜索:顶部搜索框 + 全局搜索快捷键

工程质量

  • /api/v1 API 路径
  • 统一错误码、可读提示和字段详情
  • 页面内诊断信息 + Toast
  • readiness 检查数据库
  • 首版不提供 Prometheus metrics
  • 审计日志记录操作人、实体、动作、时间和变更摘要
  • 手动 JSON 全量导出
  • 附件默认 20MB,可用环境变量调整
  • 默认允许常用文档与图片,拒绝危险文件类型

第一阶段验收

  • 可初始化管理员
  • 可登录
  • 可创建清单和任务
  • 后端测试通过
  • 前端生产构建通过
  • PostgreSQL 迁移成功
  • 本地应用可以启动并访问