# dodo 产品与技术决策记录 ## 定位 dodo 是一个纯自托管的 TickTick-like 任务与习惯管理工具。目标不是一比一复刻 TickTick,而是做一个数据归自己、界面温暖紧凑、适合个人长期使用的任务系统。 ## 当前边界 - 首版只做本地开发验证,不部署。 - 首版不做通知渠道:Web Push、Telegram、SMTP 暂不实现。 - 首版附件只做本地存储,不实现 S3。 - 首版不做番茄钟。 - 首版不做自然语言创建任务。 ## 技术栈 - Monorepo:`frontend/`、`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 ## 数据库 本地开发数据库: ```text postgresql+asyncpg://postgres:***@10.10.100.99:5433/dodo ``` 已从默认 `postgres` 库迁移到独立 `dodo` 库。误建在 `postgres.public` 的 dodo 表已清理。 ## 产品模型 ### 任务 - 文件夹 → 清单 → 任务 - 系统内置收集箱,不允许删除 - 任务支持一层子任务 - 状态:未完成 / 已完成 - 优先级:无 / 低 / 中 / 高 - Markdown 描述 - 截止日期 + 具体时间 - 多提醒设计预留 - 删除为软删除,回收站手动清空 - 支持创建、修改、完成、恢复、删除操作历史 - 并发编辑使用原子乐观锁 ### 重复任务 - RFC 5545 RRULE - 模板 + 实例 - 修改范围:仅本次 / 本次及以后 / 全部 - 删除单次保存为例外 - 每月 31 日在无 31 日月份跳过 - 逾期完成不影响下次计划日期 ### 习惯 - 完成型 + 数值型 - 每天 / 每周 / 每月 / 间隔天数 - 数值型当日累计,达标后封顶 - 允许补打和修改历史 - 支持暂停区间,暂停期不破坏连续记录 - 归档后保留历史统计 ## UI 方向 - 手账生活感 - 中高信息密度 - 10–12px 中等圆角 - 细分割线为主,少量浅底色 - 强调色:`#F15A29` - 只做浅色模式 - 系统字体栈 - 不使用猫猫元素 - 轻微动效 ## 页面结构 - 桌面三栏:左导航 / 中任务列表 / 右任务详情 - 手机底部导航 - 顶部快速输入,手机悬浮新增按钮 - 桌面右侧详情栏,手机底部弹层 - 习惯首页:今日习惯列表 + 一周打卡格 - 搜索:顶部搜索框 + 全局搜索快捷键 ## 工程质量 - `/api/v1` API 路径 - 统一错误码、可读提示和字段详情 - 页面内诊断信息 + Toast - readiness 检查数据库 - 首版不提供 Prometheus metrics - 审计日志记录操作人、实体、动作、时间和变更摘要 - 手动 JSON 全量导出 - 附件默认 20MB,可用环境变量调整 - 默认允许常用文档与图片,拒绝危险文件类型 ## 第一阶段验收 - 可初始化管理员 - 可登录 - 可创建清单和任务 - 后端测试通过 - 前端生产构建通过 - PostgreSQL 迁移成功 - 本地应用可以启动并访问