Product Requirements Document

本地番茄计划与15分钟记录工具 PRD

在个人网站上新增一个轻量的专注记录工具:用户每天填写计划,系统每隔 15 分钟提醒一次, 用户记录刚刚做了什么。所有数据只保存在浏览器本地,不上传服务器,不需要账号。

项目类型 个人效率工具
数据策略 LocalStorage / IndexedDB 本地保存
核心节奏 每 15 分钟提醒与记录
使用入口 个人网站静态页面

1. 产品摘要

该工具的核心不是复杂的任务管理,而是帮助用户建立“今天打算做什么”和“刚刚实际做了什么”的闭环。 它以 15 分钟为一个最小记录单位,让用户在一天结束时能看到真实的时间流向。

工具将作为网站上的独立静态页面运行,例如 /static/focus/index.html。 页面不依赖服务端 API,不创建用户账户,不上传数据。计划、记录、设置、统计都保存在当前浏览器本地。

产品判断:第一版不要做成完整项目管理系统。只做三个高频动作:写今日计划、开始提醒、记录刚刚做了什么。 这三个动作做顺,工具才会真的被长期使用。

2. 问题与目标

2.1 用户问题

  • 每天有计划,但执行过程中容易跑偏,晚上很难复盘到底时间花在哪里。
  • 普通番茄钟只记录“专注了多久”,但没有记录“具体做了什么”。
  • 复杂时间管理软件需要登录、同步、项目配置,启动成本高。
  • 用户不希望个人计划和过程记录上传服务器。

2.2 产品目标

目标 说明 衡量方式
降低启动成本 打开页面即可填写今日计划并开始提醒。 首次使用 1 分钟内能开始。
形成记录闭环 每 15 分钟提醒一次,用户填写刚完成的事情。 一天内能产生连续时间记录。
保护隐私 数据只存本地,不上传服务器。 代码中无远程保存 API。
方便复盘 按今天、历史日期查看计划和实际记录。 能查看每日时间线和完成情况。

3. 用户与场景

场景 用户动作 产品响应
早上开始工作 填写今天计划:3 到 5 件重要事项。 保存到当天计划区,显示“开始专注”按钮。
工作中每 15 分钟 收到提醒,填写过去 15 分钟做了什么。 生成一条带时间戳的记录,并进入下一轮倒计时。
临时中断 点击暂停,处理其他事情。 停止提醒,保留当前记录状态。
晚上复盘 查看当天计划和实际记录。 展示时间线、记录数量、计划完成标记。

4. 功能范围

4.1 第一版必须做

  • 今日计划:支持填写、编辑、勾选完成。
  • 15 分钟倒计时:开始、暂停、继续、结束。
  • 到点提醒:页面声音提醒、浏览器通知提醒。
  • 记录弹窗或记录面板:填写“刚刚做了什么”。
  • 今日时间线:按时间顺序展示所有记录。
  • 历史记录:按日期查看过去的计划和记录。
  • 本地保存:刷新页面后数据不丢失。
  • 导出数据:支持导出 JSON,避免浏览器清理数据后完全丢失。

4.2 第一版不做

  • 不做账号登录。
  • 不做服务器同步。
  • 不做多人协作。
  • 不做复杂项目管理、看板、甘特图。
  • 不做跨浏览器自动同步。

5. 核心体验

填写今日计划 用户进入页面后,先写下今天最重要的几件事。
开始 15 分钟专注 点击开始后显示倒计时、当前轮次和下次提醒时间。
到点记录 每 15 分钟提醒一次,用户填写刚刚做了什么,可选择关联某条计划。
继续下一轮 保存记录后自动进入下一轮,也可以暂停或结束当天记录。
复盘一天 查看计划完成情况、时间线和记录总数。

6. 页面结构

6.1 页面布局

区域 内容 设计要求
顶部状态栏 今天日期、当前状态、下次提醒时间。 信息简洁,不占用太多高度。
倒计时卡片 剩余时间、开始/暂停/继续/结束按钮。 视觉上最突出,按钮清楚。
今日计划 计划输入框、计划列表、完成勾选。 支持快速添加,不需要复杂表单。
快速记录 文本输入、关联计划、保存按钮。 提醒出现时自动聚焦输入框。
今日时间线 每条记录的时间、内容、关联计划。 按时间倒序或正序可切换。
历史与导出 日期选择、历史查看、JSON 导出。 收纳在次级区域,不干扰主流程。

6.2 推荐信息层级

  • 第一优先级:倒计时和记录输入。
  • 第二优先级:今日计划和完成状态。
  • 第三优先级:时间线和历史数据。
  • 第四优先级:设置、导入、导出。

7. 提醒机制

7.1 提醒方式

  • 页面内提醒:倒计时归零后显示记录面板,并播放短提示音。
  • 浏览器通知:用户授权后,页面在后台时也可以弹出通知。
  • 标题提醒:浏览器标签标题变为“该记录了”。

7.2 技术注意事项

浏览器通知需要用户主动授权。移动端浏览器、后台页面和系统省电策略可能影响定时器准确性。 第一版应明确提示“提醒尽量准时,但不保证像系统闹钟一样绝对可靠”。
  • 倒计时不要只依赖 setInterval 递减,应使用目标时间戳计算剩余时间。
  • 页面隐藏后再回来,应根据当前时间重新计算是否已到提醒点。
  • 提醒后如果用户未填写,状态应保持为“待记录”,不要直接丢弃这一轮。
  • 用户可在设置中修改间隔,但默认固定为 15 分钟。

8. 本地数据方案

数据只保存在浏览器本地。第一版建议使用 localStorage,实现简单且足够承载文本记录。 如果后续增加大量记录、图片、附件,再迁移到 IndexedDB

8.1 LocalStorage Key

Key 用途 内容
ykc-focus.settings.v1 用户设置 提醒间隔、声音开关、通知授权状态提示。
ykc-focus.days.v1 每日数据 按日期保存计划、记录和当天状态。
ykc-focus.active.v1 当前计时状态 是否运行、开始时间、目标提醒时间。

8.2 数据结构草案

{
  "2026-05-21": {
    "plans": [
      {
        "id": "plan_001",
        "text": "完成番茄记录工具产品文档",
        "done": false,
        "createdAt": "2026-05-21T09:00:00+08:00"
      }
    ],
    "logs": [
      {
        "id": "log_001",
        "startedAt": "2026-05-21T09:00:00+08:00",
        "endedAt": "2026-05-21T09:15:00+08:00",
        "text": "整理功能范围和本地存储方案",
        "planId": "plan_001"
      }
    ]
  }
}

8.3 导入导出

  • 导出:下载完整 JSON 文件,文件名包含日期,例如 focus-records-2026-05-21.json
  • 导入:选择 JSON 文件后合并到本地数据,冲突时以较新的记录为准。
  • 清空:提供“清空本地数据”按钮,必须二次确认。

9. 隐私与安全

  • 页面不发送计划和记录内容到服务器。
  • 不接入第三方统计 SDK 记录具体输入内容。
  • 如果页面所在网站有访问日志,也只能看到访问页面的请求,不应记录用户填写内容。
  • 用户应被明确告知:数据存储在当前浏览器,清理浏览器数据或更换设备后不会自动恢复。
  • 导出的 JSON 文件由用户自行保管,网站不留副本。

10. 状态与异常

状态 触发条件 界面表现
未开始 当天没有运行计时。 显示今日计划和“开始专注”。
计时中 用户点击开始或继续。 显示剩余时间和暂停按钮。
待记录 15 分钟到点。 弹出记录输入,保存前不进入下一轮。
暂停中 用户点击暂停。 停止提醒,显示继续按钮。
跨天 页面运行到第二天。 自动创建新日期数据,但保留前一天记录。
通知未授权 用户拒绝浏览器通知。 仍可使用页面内声音和标题提醒。

11. 本地统计

统计也只在本地计算,不上传。第一版只需要提供足够复盘的信息。

  • 今日记录次数。
  • 今日累计记录时长。
  • 计划完成数量 / 总计划数量。
  • 最近 7 天记录次数趋势。
  • 被关联最多的计划或关键词,可以后续再做。

12. 迭代路线

阶段 目标 交付内容
V1 可用的本地番茄记录工具 今日计划、15 分钟提醒、记录、时间线、本地保存。
V1.1 提升复盘能力 历史日期、最近 7 天统计、导出 JSON。
V1.2 提升提醒可靠性 通知授权引导、页面隐藏补偿、提示音设置。
V2 高级个人效率功能 模板、标签、关键词统计、Markdown 日报导出。

13. 验收标准

  • 用户可以填写今日计划,刷新页面后计划仍存在。
  • 用户点击开始后,页面开始 15 分钟倒计时。
  • 倒计时结束后,页面提示用户填写刚刚做了什么。
  • 保存记录后,记录出现在今日时间线中。
  • 用户可以暂停、继续和结束当天计时。
  • 浏览器通知授权后,到点可以弹出系统通知。
  • 断网状态下页面仍可使用,因为核心数据不依赖服务器。
  • 代码中不存在上传计划或记录内容的接口调用。
  • 用户可以导出本地数据 JSON。
  • 移动端和桌面端都能完成核心流程。