Lazy loaded image
TaskFlow:一个偏个人工作台风格的任务管理项目
Words 1621Read Time 5 min
2026-4-14
2026-6-13
type
Post
status
Published
date
Apr 14, 2026
slug
taskflow
summary
TaskFlow 是我围绕个人任务管理做的一次完整实践,包含任务记录、筛选排序、截止提醒、进度看板、账号认证和真实数据持久化。
tags
TS
必看精选
生活
category
前端开发
icon
password
类型
日期
Apr 14, 2026
标签
概述
状态
完成

TaskFlow:一个偏个人工作台风格的任务管理项目

TaskFlow 是我做的一个个人任务管理项目。它不是单纯的 Todo List,而是更接近一个小型工作台:可以记录任务、筛选任务、查看截止风险,也能通过 Dashboard 看到最近的完成情况和任务分布。
做这个项目的起点其实很日常。任务一多之后,问题往往不只是“有没有记下来”,而是我能不能快速判断:现在最该处理哪几件事,哪些任务快到期了,最近推进得怎么样。TaskFlow 就是围绕这个场景做出来的。

项目地址

项目预览

项目目前已经部署到 Vercel:
如果没有配置完整的 Appwrite 环境变量,项目会自动进入本地演示模式;配置完成后,则可以使用真实注册、登录、资料保存和任务持久化能力。

主要功能

TaskFlow 目前包含几个核心模块:
  • 注册、登录、退出登录
  • 个人资料设置,包括昵称和头像地址
  • 任务创建、编辑、删除和状态切换
  • 任务详情页
  • 按关键词、标签、状态、优先级筛选任务
  • 按截止日期、创建时间、更新时间和优先级排序
  • Dashboard 数据看板
  • 完成趋势、状态分布、标签分布和近期活动
  • 逾期、今天到期、3 天内到期提醒
  • URL 同步筛选条件和看板时间范围
我比较喜欢的一点是,任务列表和 Dashboard 的状态都可以通过 URL 保留下来。刷新页面之后,当前筛选条件不会丢;分享链接时,也能还原同一个视图。

技术选型

这个项目使用的是:
  • Next.js App Router
  • React
  • TypeScript
  • Appwrite
  • React Hook Form
  • Zod
  • Zustand
  • Vercel
前端部分主要用 Next.js App Router 组织页面、布局和 API Route。表单使用 React Hook Form + Zod 做输入管理和校验。任务状态由 Zustand 管理,本地演示模式下会落到 localStorage。
后端数据部分接入 Appwrite,用于账号认证和任务存储。

数据和认证设计

项目里浏览器不会直接拿服务端权限去访问 Appwrite,而是先请求当前站点的 Next.js API,再由服务端 API 调用 Appwrite。
这样做主要是为了两个目的:
  1. Appwrite API Key 留在服务端,不暴露给浏览器。
  1. 登录态通过项目自己的 httpOnly cookie 保存,前端不用直接管理敏感会话信息。
任务数据开启了 row-level permissions,每条任务只给当前用户读写权限。资料信息没有额外建 profile 表,而是复用 Appwrite Account 的 name 和 prefs 来保存昵称与头像地址。

演示模式

我不希望项目在没有后端配置时变成一个空页面,所以做了本地演示模式。
当 Appwrite 环境变量没有配置完整时,TaskFlow 会使用内置 mock 数据和 localStorage。这样别人打开项目时,即使没有我的 Appwrite 配置,也可以看到完整的界面和主要交互。
配置 Appwrite 后,同一套界面会切换到真实数据模式,任务会从远程同步。
这个设计对个人项目展示挺有用:作品集页面可以直接体验,开发时也能方便切换真实数据和本地数据。

Dashboard 的设计

Dashboard 不是单独堆几个统计数字,而是围绕“今天该怎么看任务”来组织信息。
目前支持三个观察范围:
  • 今天
  • 本周
  • 全部
页面里会展示未完成任务、进行中任务、已完成任务、逾期任务、今天到期任务和 3 天内到期任务。同时也会显示完成趋势、状态分布、标签分布、近期活动和即将到期任务。
我希望它给人的感觉不是“数据很多”,而是“扫一眼就知道现在该先处理什么”。

任务筛选和排序

任务模块支持关键词、标签、状态、优先级筛选,也支持多种排序方式。
这里我重点处理了截止日期相关逻辑。任务会被判断为逾期、今天到期或即将到期,这些信息不仅会展示在界面上,也会参与排序和提醒。
相比简单列表,这样的任务视图会更接近实际使用时的思考方式:不是只看任务存在,而是看任务的紧急程度和当前状态。

项目收获

这个项目对我来说最大的收获,是把一个看似普通的任务管理需求,拆成了比较完整的产品链路:
  • 页面路由
  • 用户认证
  • 表单校验
  • 状态管理
  • API Route
  • 数据持久化
  • 权限控制
  • URL 状态同步
  • 部署和环境变量配置
它也让我更清楚地感受到,一个个人项目如果想真正像“应用”而不是“页面”,需要处理很多边界情况。比如未登录访问、环境变量缺失、远程数据同步失败、本地演示兜底、筛选状态恢复等。
这些细节不一定显眼,但它们决定了项目是否真的可用。

后续计划

后面我还想继续补几个方向:
  • 给任务增加子任务或备注
  • 支持头像上传
  • 增加任务导出功能
  • 给 Dashboard 补充更多时间维度
  • 整理 Appwrite table 中旧兼容字段
  • 进一步优化移动端任务操作体验
TaskFlow 目前已经可以作为一个完整的个人项目展示,也能作为我后续继续迭代的任务工作台。
 
上一篇
个人模板
下一篇
dount