
项目概述TodoNow是一个智能任务管理与提醒系统支持三种任务类型日历签到、截止时间、次数达标提供多渠道通知提醒邮件、微信、浏览器推送。基于 Next.js 15 (App Router) Supabase 构建的全栈应用技术栈层级技术前端框架Next.js 15 (App Router) React 19 TypeScript样式Tailwind CSS v4图标库Lucide React数据库Supabase PostgreSQL认证Supabase Auth邮箱 密码邮件服务腾讯云 SES模板邮件浏览器推送Web Push API VAPIDAI 能力DeepSeek API决策辅助部署Vercel cron-job.org / 阿里云 ECS PM2 Nginx页面与路由公开页面无需登录路由功能描述/产品首页Hero 区域、功能特性展示、CTA 引导/login登录页邮箱 密码登录/register注册页昵称 邮箱 密码注册/forgot-password忘记密码输入邮箱发送密码重置邮件受保护页面需要登录路由功能描述/dashboard仪表盘统计卡片活跃任务/今日打卡/本月通知/完成率 今日需打卡任务列表/tasks任务管理全部/进行中/已完成/已逾期 Tab 筛选网格卡片展示/tasks/new创建任务设置名称、类型、条件配置、子事项、通知偏好/tasks/[id]/edit编辑任务修改任务配置支持删除任务/settings个人设置修改密码、通知偏好、浏览器推送开关、注销账号/decisions决策工具首页提供 WADM 和 WCCA 两种决策方法入口/decisions/wadmWADM 加权决策矩阵量化评估多方案支持 AI 辅助分析/decisions/wccaWCCA 最坏情况分析预判最坏后果理性决策API 路由路由认证功能描述/api/cron/check-remindersCRON_SECRET / x-vercel-cronCron 提醒检查端点/api/ai/decision用户登录AI 决策辅助DeepSeek/api/debug/task-notifications无调试用查看任务通知状态/api/debug/test-email无调试用测试邮件发送/api/debug/push-subs无调试用查看推送订阅/sw.js无动态生成 Service Worker 脚本核心功能1. 三种任务类型周期性签到 (periodic)频率设置每天 / 工作日 / 每周 / 每月签到时间设定每日签到时间点宽限期超过签到时间后的容忍时长超时视为迟到自定义每周可选具体星期几每月可选具体日期适用场景每日打卡、健身计划、学习任务等截止时间 (deadline)截止日期设定任务完成的最后期限提前提醒可设定截止前 5/10/15/30/60 分钟提醒允许延期开启后截止日过后仍可打卡子事项进度持久化子事项打卡记录永久保留不会每日重置适用场景项目交付、考试复习、限期任务等次数达标 (count)目标次数设定需要完成的总次数统计周期总计 / 每天 / 每周 / 每月进度追踪系统自动统计已完成次数显示进度条适用场景读书计划、练习次数、习惯养成等2. 打卡系统主任务打卡一键完成当日签到子事项打卡支持 checklist 子项独立勾选/取消所有子项完成后自动触发主任务打卡迟到标记超过签到时间 宽限期后打卡标记为迟到打卡记录所有打卡历史永久保存可在任务详情查看3. 通知提醒系统提醒类型提醒类型触发条件通知渠道签到提前提醒周期性任务到达设定的提前提醒时间邮件 浏览器推送截止时间提醒截止任务到达设定的提前提醒时间邮件 浏览器推送逾期通知截止时间已过且无打卡记录邮件 浏览器推送通知渠道邮件通知腾讯云 SES 模板邮件支持签到/截止/逾期/反馈四种模板含频率限制同收件人 60 秒冷却触发限制后 5 分钟锁定期浏览器推送Web Push API Service Worker点击通知可跳转到仪表盘微信通知类型定义已预留尚未实现实际发送逻辑去重机制同一任务 同一通知类型 同一渠道 同一天不会重复发送错误追踪notif_error字段记录失败原因支持 cron 自动重试Cron 触发方式方式环境机制频率Instrumentation 心跳所有环境应用启动后setInterval每 60 秒直接调用checkReminders()活跃期间每分钟cron-job.org 外部调用Vercel 生产每分钟 HTTP 调用/api/cron/check-reminders?secretxxx每 1 分钟Vercel Cron JobsVercel 生产Vercel 原生 cronx-vercel-cronheader 放行每天 0 点Hobby 限制4. 任务管理状态筛选全部 / 进行中 / 已完成 / 已逾期任务操作编辑、删除、暂停/恢复创建限制每个用户最多 3 个进行中且未逾期的任务已完成/已结束的不计算子事项管理创建/编辑任务时可添加、排序、删除子事项5. 用户系统注册昵称 邮箱 密码邮箱验证后自动创建账户登录邮箱 密码登录支持密码显示/隐藏密码重置通过邮箱发送重置链接修改密码需验证当前密码成功后自动跳转登录页账号注销输入 DELETE 确认后永久删除所有数据任务、记录、通知、个人信息6. 决策工具WADM加权决策矩阵多方案、多因素的量化评估自定义因素权重1-10和方案评分总分自动计算辅助客观决策支持AI 辅助分析DeepSeek提供决策建议和敏感性分析WCCA最坏情况分析为每个方案列出可能的最坏后果分析预案和应对措施帮助克服恐惧、理性决策7. 用户反馈入口页面右下角浮动反馈按钮反馈类型使用建议 / Bug 反馈 / 功能建议 / 其他通知提交后自动邮件通知管理员数据库结构核心表表名说明安全策略profiles用户扩展信息昵称、邮箱、微信绑定、通知偏好RLS仅可读写自己的数据tasks任务主表名称、类型、状态、条件配置、通知配置RLS仅可读写自己的数据task_records任务打卡记录日期、状态、备注RLS仅可读写自己的数据task_subitems任务子事项名称、排序RLS通过关联任务验证权限record_subitems子事项打卡记录子项ID、日期RLS通过关联任务验证权限notifications通知日志类型、渠道、状态、错误信息RLS仅可读自己的数据feedback用户反馈类型、内容、状态RLS仅可创建push_subscriptions浏览器推送订阅endpoint、密钥RLS仅可管理自己的订阅迁移文件按执行顺序排列supabase-schema.sql— 核心表结构supabase-migration-profiles.sql— Profiles 扩展supabase-migration-display-name.sql— 显示名字段supabase-migration-subitems-fixed.sql— 子事项支持supabase-migration-notif-error.sql— 通知错误追踪字段supabase/migrations/001_add_feedback.sql— 用户反馈表supabase/migrations/002_add_push_subscriptions.sql— 推送订阅表移动端适配响应式布局自适应桌面端和移动端底部 TabBar移动端专属导航栏顶部 Header移动端显示页面标题抽屉式侧边栏移动端菜单可滑出FAB 按钮移动端创建任务浮动按钮安全设计Row Level Security (RLS)所有数据表启用行级安全用户只能访问自己的数据双层权限验证Server Action 使用 Admin 客户端 RLS 双重保护Cron 密钥认证提醒检查 API 需要 CRON_SECRET 验证或 Vercel Cron 内部 header密码修改验证修改密码需先验证当前密码账号注销确认需输入 DELETE 文字确认项目结构src/ ├── app/ # Next.js 15 App Router │ ├── page.tsx # 首页/落地页 │ ├── layout.tsx # 根布局 │ ├── login/ # 登录 │ ├── register/ # 注册 │ ├── forgot-password/ # 忘记密码 │ ├── dashboard/ # 仪表盘 │ ├── tasks/ # 任务管理列表/新建/编辑 │ ├── settings/ # 账号设置 │ ├── decisions/ # 决策工具WADM/WCCA │ ├── sw.js/ # Service Worker 端点 │ └── api/ # API 路由 ├── components/ # React 组件 │ ├── dashboard/ # 仪表盘组件 │ ├── forms/ # 表单组件 │ ├── layout/ # 布局组件 │ ├── settings/ # 设置组件 │ ├── tasks/ # 任务组件 │ ├── feedback/ # 反馈组件 │ └── ui/ # 通用 UI 组件 ├── lib/ # 核心逻辑 │ ├── actions.ts # 服务端操作CRUD/认证 │ ├── cron.ts # 定时任务调度 │ ├── notifications.ts # 通知引擎 │ ├── push.ts # Web Push │ ├── types.ts # 类型定义 │ ├── utils.ts # 工具函数 │ ├── email/resend.ts # 腾讯云 SES 邮件 │ └── supabase/ # Supabase 客户端 └── instrumentation.ts # 服务启动心跳部署说明环境变量# Supabase NEXT_PUBLIC_SUPABASE_URL NEXT_PUBLIC_SUPABASE_ANON_KEY SUPABASE_SERVICE_ROLE_KEY # Cron 鉴权 CRON_SECRET # 邮件腾讯云 SES TENCENT_SECRET_ID TENCENT_SECRET_KEY TENCENT_TEMPLATE_CHECKIN TENCENT_TEMPLATE_DEADLINE TENCENT_TEMPLATE_OVERDUE TENCENT_TEMPLATE_FEEDBACK TENCENT_FROM_ADDRESS TENCENT_REGION # Web Push VAPID NEXT_PUBLIC_VAPID_PUBLIC_KEY VAPID_PRIVATE_KEY # AI 决策DeepSeek DEEPSEEK_API_KEY # 管理员邮箱反馈通知 ADMIN_EMAIL部署方式VercelHobby 免费计划关联 GitHub 仓库自动部署配置上述环境变量在 cron-job.org 创建任务每分钟调用https://你的域名/api/cron/check-reminders?secret你的CRON_SECRET