Habo 需求分析文档
版本: 3.1.2 | 最后更新: 2026-04-13
1. 项目定位
1.1 产品定义
Habo 是一款极简主义的习惯追踪应用,帮助用户通过每日打卡、进度可视化和心理模型引导,建立并维持长期习惯。
1.2 解决的核心问题
| 痛点 |
描述 |
| 习惯难以坚持 |
人们制定了计划但缺乏日常反馈机制,几天后放弃 |
| 缺乏正向激励 |
完成习惯后没有即时奖励感,大脑无法建立正向反馈回路 |
| 数据孤岛 |
习惯数据存储在云端,依赖网络,存在隐私顾虑 |
| 功能过度 |
现有习惯类 App 功能繁杂,设置成本高,反而降低使用意愿 |
| 缺乏科学方法 |
用户不了解习惯形成的心理学原理,只靠意志力 |
1.3 目标用户画像
| 画像 |
特征 |
核心需求 |
| 自律建设者 |
想建立新习惯(运动、阅读、冥想)但经常中断的成年人 |
简单打卡 + 可视化连续天数 |
| 数据驱动型 |
喜欢用数据量化自我、追踪进步的用户 |
统计图表 + 导出功能 |
| 隐私敏感型 |
不信任云服务,希望所有数据留在本地的用户 |
纯本地存储 + 本地备份 |
| 多设备用户 |
在手机、平板、桌面端都需要使用 |
跨平台支持(Android/iOS/macOS/Linux) |
1.4 差异化定位
与 Habitica、Streaks、Loop 等竞品相比,Habo 的核心差异化:
- 极简设计 — 无社交、无游戏化、无广告,聚焦习惯本身
- 心理学模型内置 — Cue-Routine-Reward 习惯循环、两天法则、习惯合约(惩罚/问责伙伴)
- 纯本地架构 — 零网络依赖,数据完全由用户掌控
- 跨平台开源 — Flutter 实现的真正跨平台体验
- 数值型习惯 — 不仅支持"做了/没做",还支持"做了多少"(如跑步 5km、喝水 8 杯)
2. 功能需求
2.1 功能矩阵
P0 — 核心功能(MVP 必须)
| ID |
功能 |
描述 |
| F01 |
习惯创建 |
创建新习惯,设置标题和基础配置 |
| F02 |
每日打卡 |
日历视图中对每一天标记状态:完成 / 失败 / 跳过 |
| F03 |
日历视图 |
月度日历展示,每天显示对应的打卡状态标记 |
| F04 |
连续天数 |
计算并展示当前连续完成天数和最高连续记录 |
| F05 |
习惯列表 |
展示所有活跃习惯,支持拖拽排序 |
| F06 |
编辑/删除 |
编辑习惯属性或永久删除 |
| F07 |
持久化存储 |
所有数据本地 SQLite 存储,关闭应用不丢失 |
| F08 |
浅色/深色主题 |
跟随系统或手动切换浅色/深色主题 |
P1 — 重要功能
| ID |
功能 |
描述 |
| F09 |
两天法则 |
允许用户启用"两天法则"——允许间隔一天失败而不打断连续天数 |
| F10 |
习惯循环 (Cue-Routine-Reward) |
基于《原子习惯》的习惯循环模型,设置提示、例行、奖励 |
| F11 |
习惯合约 |
设置惩罚和问责伙伴,失败时显示惩罚提醒 |
| F12 |
统计总览 |
饼图展示所有习惯的整体完成率分布 |
| F13 |
个人统计 |
每个习惯的详细统计:最高连续、当前连续、月度柱状图 |
| F14 |
数值型习惯 |
支持设置目标值和单位的习惯类型(如 10000 步) |
| F15 |
进度追踪 |
数值型习惯可以记录部分进度,不要求一次性完成 |
| F16 |
分类系统 |
习惯可归属多个分类,支持按分类筛选显示 |
| F17 |
通知提醒 |
每日定时提醒用户打卡 |
| F18 |
备份/恢复 |
导出/导入 JSON 备份文件,支持跨设备数据迁移 |
| F19 |
引导页 |
首次使用时展示三步引导(定义习惯 → 记录天数 → 观察进步) |
| F20 |
归档功能 |
将不再追踪的习惯归档而非删除,保留历史数据 |
| F21 |
音效反馈 |
打卡时播放音效,增强即时满足感 |
| F22 |
备注/日记 |
每日打卡时可添加文字备注 |
P2 — 增强功能
| ID |
功能 |
描述 |
| F23 |
Material You 主题 |
Android 12+ 动态取色主题 |
| F24 |
OLED 黑色主题 |
纯黑背景,适配 OLED 屏幕省电 |
| F25 |
自定义颜色 |
用户可自定义完成、失败、跳过、进度的颜色 |
| F26 |
生物识别锁 |
指纹/面容锁定应用,保护隐私 |
| F27 |
桌面小组件 |
iOS/Android 主屏幕小组件显示今日完成进度 |
| F28 |
一键打卡 |
无需打开菜单,单击直接标记完成 |
| F29 |
深度链接 |
支持 habo:// URL scheme 跳转到指定页面 |
| F30 |
周起始日设置 |
用户可选择周日或周一作为日历的起始日 |
| F31 |
显示月份名称 |
可选在日历中显示月份名称 |
| F32 |
27 种语言 |
支持中英日韩等 27 种语言的完整界面翻译 |
2.2 功能依赖关系
3. 非功能性需求
3.1 平台支持
| 平台 |
最低版本 |
说明 |
| Android |
API 21 (Android 5.0) |
支持 split-per-abi APK 分包 |
| iOS |
12.0+ |
完整功能 |
| Linux |
- |
通过 sqflite_common_ffi 支持 |
| macOS |
- |
原生窗口管理 |
3.2 性能要求
| 指标 |
要求 |
| 启动时间 |
冷启动 < 2 秒(含 splash screen) |
| 日历切换 |
月份切换流畅 60fps,无明显卡顿 |
| 数据容量 |
支持至少 100 个习惯 × 365 天的事件记录 |
| 备份文件 |
支持 10MB 以内的备份文件导入 |
| 内存占用 |
日常使用 < 100MB RAM |
3.3 安全与隐私
| 要求 |
实现方式 |
| 数据不离开设备 |
纯 SQLite 本地存储,无网络请求 |
| 生物识别保护 |
通过 local_auth 调用系统指纹/面容识别 |
| 备份文件控制 |
用户手动导出/导入,应用不自动上传 |
| 无第三方分析 |
不集成 Google Analytics、Firebase 等追踪服务 |
3.4 可访问性
| 要求 |
说明 |
| Material Design 规范 |
遵循 Material Design 无障碍指南 |
| 高对比度 |
深色/OLED 主题提供高对比度 |
| 大字体支持 |
响应系统字体缩放设置 |
| 语义化标签 |
Flutter Semantics 为屏幕阅读器提供语义信息 |
4. 用户故事
4.1 核心用户故事
| 编号 |
用户故事 |
验收标准 |
| US01 |
作为用户,我想快速创建一个新习惯,以便开始追踪 |
输入标题 → 点击保存 → 习惯出现在列表中 |
| US02 |
作为用户,我想在日历上点击某天标记完成,以便记录我的每日进度 |
点击日期 → 选择"完成" → 日历显示绿色标记 |
| US03 |
作为用户,我想看到当前连续天数,以便获得坚持的动力 |
连续 2 天以上完成时显示绿色连续天数徽章 |
| US04 |
作为用户,我想查看月度统计图表,以便了解长期趋势 |
统计页显示柱状图,可切换年份和事件类型 |
| US05 |
作为用户,我想导出数据备份,以便在更换设备时迁移数据 |
设置页点击备份 → 生成 JSON 文件 → 保存到文件系统 |
| US06 |
作为用户,我想设置每日提醒通知,以便不忘记打卡 |
设置通知时间 → 每天定时收到通知 |
| US07 |
作为用户,我想追踪数值型目标(如每天 8 杯水),以便记录部分完成 |
创建数值习惯 → 输入进度值 → 查看百分比完成度 |
| US08 |
作为用户,我想启用两天法则,以便在偶尔失败时不中断连续记录 |
开启两天法则 → 失败一天后次日完成 → 连续天数不中断 |
| US09 |
作为用户,我想用分类管理习惯,以便快速筛选查看 |
创建分类 → 习惯关联分类 → 按分类筛选列表 |
| US10 |
作为用户,我想归档不再追踪的习惯,以便保持列表整洁但不丢失历史 |
点击归档 → 习惯从主列表消失 → 可在归档列表中查看 |
4.2 边界场景
| 场景 |
期望行为 |
| 用户 31 天没有任何事件记录 |
连续天数显示为 0,无徽章 |
| 用户连续完成 100 天 |
连续天数正确显示 100 |
| 用户在两天法则下连续两天失败 |
连续天数归零 |
| 数值习惯进度超过目标值 |
标记为已完成,进度条满格 |
| 备份文件格式错误 |
显示错误提示,不覆盖现有数据 |
| 应用从后台恢复且已启用生物识别 |
弹出认证对话框,认证失败可重试 |
| 跨午夜使用应用(23:59 → 00:01) |
自动检测日变化,刷新日历视图 |
| 空标题尝试保存 |
显示错误提示"The habit title cannot be empty" |
5. 设计原则
| 原则 |
说明 |
| 极简优先 |
默认只显示标题和日历,高级选项折叠隐藏 |
| 即时反馈 |
每次打卡有视觉(颜色变化)和听觉(音效)反馈 |
| 正向强化 |
奖励通知优先于惩罚通知,连续天数优先于失败天数 |
| 零配置可用 |
安装后即可使用,不需要注册、登录或网络 |
| 用户控制 |
所有数据可导出、可删除,用户完全掌控 |