feat: strengthen backup and mobile workflows
ci / gitleaks (push) Successful in 1m19s
ci / docker (push) Successful in 5m48s

This commit is contained in:
2026-09-16 21:12:52 +08:00
parent 6f38190c92
commit 6c234d7d82
64 changed files with 5059 additions and 635 deletions
+28 -22
View File
@@ -1,24 +1,32 @@
# dodo
一个自托管的任务与习惯管理工具,目标是做一个温暖、紧凑、可自己掌控数据的 TickTick-like 应用
一个自托管、移动端友好的任务与生活管理 PWA,数据由自己掌控
## 第一阶段能力
## 当前主要能力
- 首次初始化管理员
- 用户名密码登录,Cookie Session
- 文件夹、清单、任务基础 CRUD
- 任务支持截止时间,以及每天 / 每周 / 每月 / 每年和自定义重复(间隔、星期、月日期、次数或截止日期)
- 收集箱系统清单
- 习惯打卡与倒数纪念日
- 倒数日支持倒数日、纪念日、生日,以及每周/月/年重
- Vue 3 + PWA 应用外壳
- 手账生活感浅色 UI
- 文件夹、收集箱与自定义清单;清单归档后保留任务归属,恢复后原样可见
- 任务与一层子任务、优先级、Markdown 备注、日期/时间、回收站、拖拽排序
- RFC 5545 计划重复与“完成后重复”;乐观锁避免并发覆盖
- 今日页按逾期任务、今日任务、今日习惯分组,并提供进度与环境信息
- 完成型/数值型习惯、日/周/月/间隔计划、暂停、历史与归档
- 倒数日、纪念日、生日及公历/农历重复
- Markdown 备忘录及软删除/恢
- 任务附件、登录设备管理与审计日志
- 完整 ZIP v2 备份(含附件字节、manifest 与 SHA-256)及预检后合并/替换恢复
- 兼容旧版 CSV / JSON v1 恢复
## 界面约定
- 弹层统一使用 `AppSheet` / `AppDialog`,共享遮罩、焦点陷阱、Escape、背景 inert 和嵌套栈行为
- 设置页按“数据、账户与安全、登录设备、活动、危险操作”连续分组
- 手机底栏直接进入今天、习惯、倒数日、设置,不再使用“更多”中转
- 新增入口是普通的圆形 Plus FAB,共用于任务、习惯、倒数日和备忘录
## 技术栈
- Frontend: Vue 3 + TypeScript + Vite + Tailwind CSS
- Backend: FastAPI + SQLAlchemy 2 Async
- DB: PostgreSQL(测试环境使用 SQLite
- Backend: FastAPI + Pydantic v2 + SQLAlchemy 2 Async + Alembic
- DB: PostgreSQL(测试使用 SQLite
- Package: uv + pnpm
## 本地开发
@@ -33,18 +41,16 @@ pnpm install
pnpm run dev
```
## 环境变量
```bash
DODO_DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/dodo
DODO_COOKIE_SECURE=false
DODO_SESSION_DAYS=30
```
配置项见 [`.env.example`](.env.example)API 与数据合同见 [`docs/api.md`](docs/api.md) 和 [`docs/data-model.md`](docs/data-model.md)。
## 验证
```bash
uv run pytest -q
uv run ruff check backend tests
cd frontend && pnpm run build
uv run pytest -q
cd frontend
pnpm test
pnpm build
cd ..
git diff --check
```