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。
- 移动端和桌面端都能完成核心流程。