
你有没有过这种状态下班回来往沙发上一躺手机解锁、锁屏、再解锁视频平台来回切换十几回最后脑子里冒出来几个字不知道干吗的。我原以为这只是懒直到某天我把这句话当成一个项目来做才发现里面藏着大量被忽略的需求。这篇文章记录我怎么把“不知道干吗的”从一句抱怨变成一个真正能帮我摆脱空白时间焦虑的小工具以及连续用了三周后看到的东西。如果你也经常陷入“明明有一整块时间却什么都没干”的窘境或者你也想过要不要做点小工具解决自己的真实问题这篇文章应该能给你一些可复制的思路。1. 从一句抱怨到一个小项目需求分析1.1 “不知道干吗”其实不是无事可做可能有人不理解打开手机全是信息怎么会不知道干吗恰恰是因为太多了。心理学里有一个现象叫决策疲劳你做的选择越多后续选择的质量就越低也会越倾向于逃避选择。我每天上班至少要做几十个决定到晚上大脑已经把决定额度用完了面对一堆选项只会宕机。所以“不知道干吗的”不是“没有选项”而是“不想再做选择”。这个洞察很重要直接决定了我的产品方向我不需要一款功能强大、让我继续选来选去的计划工具我需要一个能“替我选”的轻量工具。它甚至不需要给我一百个备选只需要给我一个可直接执行的下一秒动作。你看同样是“不知道干吗”有人需要的是一张完整的年度计划表有人需要的仅仅是有人替他拍板现在下楼走一圈或者现在打开一本书。我属于后者。1.2 市面上的工具为什么都差点意思动手前我把常见的方案过了一遍。待办清单类产品像滴答清单、Todoist解决的是“我已经知道要做的事怎么落地”的问题但“不知道干吗”的人根本没法在清单里列出一个空泛的未来。内容社区类产品推荐机制再准也是在喂信息刷完反而更累。随机数生成器倒是够随机但一条干巴巴的“123”没法告诉我能干什么。所以缺口在于一个没有账号体系、没有信息流、不诱导停留在页面的小工具。打开三秒内出现一条建议点“干这个”就记下来“换一个”就立刻换一条不需要登录不需要看评论。只有做到这么轻它才有机会在决策疲劳的时刻被真正使用。我做第一版的时候没有加任何社交功能因为我知道一旦加了评论区用户就会从“执行”变成“围观”工具的核心价值就没了。1.3 我给自己定的设计边界做小工具最难的不是加功能而是忍住不加。我给“不知道干吗的”定了三条原则第一不做沉浸式信息流页面只有一个卡片、两个按钮第二建议库里的内容必须具体到“下一秒就能开始”像“三分钟调整电脑桌面壁纸”可以“运动一下”不行第三必须有反馈循环用户点的是“干”还是“换”会被记入偏好权重用来调整后续推荐。另外我给自己划了一条边界工具只负责给你一个选项不负责治愈更深层的情绪问题。如果一个人连续几个月靠它度过每个晚上但还是觉得空虚那他要做的不是刷新更多建议而是停下来做一次人生复盘。这条边界后来被做成了一个提醒逻辑后面会详细讲。这里我想说的是做工具也好做内容也好先想清楚“哪些问题我不解决”往往比列出功能清单更值钱。2. 技术选型和整体架构2.1 为什么选纯前端 PWA而不是 App 或小程序我第一反应是想做成小程序毕竟用完即走比较符合工具属性。但很快放弃了小程序要过审、要账号、还要依赖微信生态个人开发者维护成本也不低。后来决定用 PWA 方案Vite Vue 3 搭一个纯静态站用 PWA 做离线缓存和安装能力用户可以把图标直接“添加至主屏幕”体验接近 App但没有分发和审核负担。技术栈也没太多玄学核心是 Vue 3 Vite vite-plugin-pwa localStorage。刚开始写的时候我甚至想过不要框架原生 JS 也能做。但考虑到后面想加自定义建议库和统计页用 Vue 处理状态和路由会省事很多。如果读者只想做原型那原生 JS 完全可以没必要为了用框架而用框架。这个工具的特点是“状态简单、交互极轻”所以技术选型的关键不是赶时髦而是让你能在三天以内做完第一版。2.2 数据模型建议、反馈记录、偏好权重数据设计上我尽量保持简单用 localStorage 存三块内容。第一块是建议库每条建议包含 id、类别、内容、标签、体力等级、预计耗时、允许出现的时段。第二块是交互记录每次推荐都记一条推荐时间、选项 id、用户的决定是“执行”“换一个”还是“稍后再说”。第三块是偏好权重主要按类别保存一个浮点数。把这三块分开存是后来复盘时的最佳决定。比如我想知道“周一晚上到底适合推什么”直接查交互记录就能统计出来不需要额外开发。建议库添加字段也不影响旧记录。纯前端项目数据都在浏览器本地没有后端用户的隐私压力小很多也省了我的服务器钱。可能有人担心 localStorage 不安全但换个角度看一个“今天干什么”的工具本来也不该收集任何个人信息。2.3 推荐算法不是纯随机而是“加权随机 防重”如果直接把建议库里的内容随机丢出来几天后就会发现自己老抽到同一类建议或者连续抽到“去户外跑5公里”这种“正确却沉重”的选项。我的做法是加权随机第一步先按当前时段过滤建议池比如晚上十点以后不推户外类第二步给每条建议算一个临时权重考虑基础权重、类别偏好权重、新鲜度加成第三步最近二十条推荐过的 id 直接排除避免短期内重复第四步用权重随机从剩余池里抽一条。新鲜度加成很好理解就是为了让一段时间没出现的建议有更高概率被选中实现“回顾旧建议”的效果。这样的随机感不是混乱更像电台播放列表兼顾了随机和可预期性。这里贴一段核心代码Vue 组件里的抽取逻辑大致长这样function getSuggestion(pool, weights, excludedIds, periodBoost) { const candidates pool.filter(item !excludedIds.includes(item.id) item.allowedPeriods.includes(currentPeriod()) ); const totalWeight candidates.reduce((sum, item) { return sum item.baseWeight * weights[item.category] * periodBoost[item.id]; }, 0); let r Math.random() * totalWeight; for (const item of candidates) { r - item.baseWeight * weights[item.category] * periodBoost[item.id]; if (r 0) return item; } return candidates[candidates.length - 1]; }这个函数不复杂但足以满足“看起来有随机感实际上又跟着我的偏好走”的需求。想调随机感的话可以调 periodBoost 的范围或者把排除列表从二十条改成十条这完全取决于你希望用户每次打开的“熟悉感”和“新鲜感”比例。3. 从0到1实现第一版3.1 项目初始化和 PWA 配置我用 Vite 创建项目命令很简单npm create vitelatest buzhidao-game cd buzhidao-game npm install npm install vite-plugin-pwa项目名我随便起的“buzhidao-game”里的 game 指“玩一下”不影响最终展示名。PWA 配置里最重要的是 manifest 的 name、short_name、icons 和 start_url。但这里有个坑开发环境下 service worker 总是缓存旧代码我一度以为是代码写错了后来发现是 PWA 插件在开发模式下默认不启用可以只用 build 后的产物测试。如果只是本地测试可以先不开 PWA直接跑npm run dev调样式。真正要装到手机桌面时再npm run build npm run preview验证一遍离线能力。部署到 Vercel 也很简单把打包产物推上去就行。整个过程没有后端参与所以不需要担心域名解析和服务器维护这一点对于个人小工具来说很重要。3.2 建议库的整理比写代码更花时间整个项目里最费时间的不是算法是那几十条建议。我把自己过去几个月周末真正做过的、做完后觉得不错的事情全部列出来又找几个朋友拉了一轮“你无聊时会做什么”的问卷最后整理成七大类室内动手、户外短途、学习充电、技能练习、整理收纳、社交链接、无意义快乐。每条建议必须满足两个标准十分钟以内可以启动不需要额外准备材料。比如我写过“研究一下家里最乱的抽屉把里面的东西分成‘常用’‘偶尔用’‘可以扔’三堆”也写过“打开地图搜一下家附近步行可达的公园挑一个没去过的下楼走一圈”。这种具体建议比“多运动”管用得多因为它的第一秒动作非常明确。记住第一秒动作越清晰执行的阻力就越小。3.3 反馈循环把“干”和“换一个”变成权重信号工具的核心按钮是“干这个”和“换一个”。每次点击都会更新该条建议所属类别的权重执行一次类别权重加 0.15跳过一次类别权重减 0.1权重下限 0.2上限 5。如果某一类连续被跳过十次系统会在推荐时降低它的出现概率但不会彻底封禁因为人的状态是会变的也许换一个时段就想做了。还有一个细节我后来觉得很值当用户对同一条建议连续三次选择“换一个”时页面会弹出一行字“这个方向的建议你已经换掉三次了可以先停下来想一想为什么你会这么抗拒它”这个功能把随机工具变成了自我观察入口。很多人不是不想做而是这件事触发了某种抗拒心理看见抗拒本身比执行建议更重要。3.4 交互设计、离线能力与部署页面我只做了三个区块顶部一行当前时段标识中间一张大卡片显示建议底部两个按钮。字号故意调得很大因为用户在决策疲劳状态下没有精力看小字。减少视觉信息量反而能让人更容易点击执行。卡片背景色也会随时段稍微变化晚上的版本会暗一点上午的版本明亮一点算是一种很轻的氛围暗示。部署用的 Vercel纯静态站点免费额度够了。PWA 的 manifest 里我设置了display: standalone这样添加到桌面后不会显示浏览器地址栏更接近原生 App。首次打开时用户会看到一个很小的安装提示不需要就算了不强求。这里我建议不要做“引导安装”的弹窗对这种工具型 PWA 来说强制安装反而会吓跑用户。4. 连续使用21天后的复盘与优化4.1 我统计的真实使用数据工具上线后我整整用了三周每天晚饭后和周末各打开一次把交互记录导出来做了个简单的统计表格。时间段推荐次数执行次数跳过次数执行率主要跳过原因工作日晚上149564%体力类太多建议太费脑周六上午64267%想出门但天气不好周日晚上62433%焦虑下周工作不想做任何事数据虽然样本很小但也能看出规律周日晚上的执行率最低因为那时候注意力被“下周要上班”的焦虑占据了工作日晚上的低体力建议执行率反而高。后来我把“无意义快乐”类目在周日晚上的权重调高情况有改善。这里的教训是工具不能假装用户心态一直稳定必须允许用户给当前状态打标签比如进来先选“很累”“有点无聊”“烦躁”不同情绪状态对应不同的推荐池。4.2 朋友试用后的反馈与版本调整我把工具发给三个朋友体验。一位觉得建议太琐碎她想要的是“能写进简历的事”而不是“把书架第二层整理一遍”。另一位很喜欢这种不用动脑的感觉但提出希望可以加自己的建议。第三位一周都没打开回访后说每次打开都推荐一件我不想做的事越看越烦躁。所以第二版做了三处调整支持自定义建议库并和默认库分开进入工具时先选当前情绪状态跳过三次后增加刚才提到的那行提示文字。这些改动都不复杂但都是基于真实反馈而不是我的想象。尤其那个“越看越烦躁”的反馈点醒了我工具不能只注重推荐准不准也要懂得在用户状态很差时“少说话”甚至“不推荐”直接让他去休息。4.3 版本迭代思路与未来扩展第一版解决的是“不知道干吗的”的字面问题后续版本应该解决“为什么不行动”的情绪问题。v1.1 增加情绪入口v1.2 增加自定义建议库和每周统计v1.3 我打算做一个“历史记录时间线”让用户能看到自己过去一个月到底把时间花在了哪些建议上。很多人以为自己没做什么回看记录时会发现自己其实做了不少有意思的事这本身就很有价值。至于接 AI 生成建议我暂时不打算做。因为工具的核心价值在于“减少选择”如果 AI 给了太多个性化选项用户又会陷入选择困难。先保持简单等用户量到了一定程度再考虑加一层非常克制的智能推荐。市面上太多产品死于功能膨胀我不想让这个工具重蹈覆辙。5. 常见问题排查与避坑实录5.1 打开工具后还是不想动是工具没用吗这个我遇到过不止一次。连续几天打开“不知道干吗的”看到建议也不愿意执行问题往往不在建议本身而在当时的情绪状态。工具可以推荐一件事但不能重新点燃动力。所以我在版本里加了“五分钟原则”如果你看着建议毫无行动欲望就把它替换成一个“五分钟后就能结束但确实做了”的微任务比如“站起来做五个深蹲”“把水杯接满放在桌子中间”。不要小看这种小的动作它能打破瘫在沙发上的惯性后面的事情往往就顺了。另外如果这个状态持续超过两周而且不仅是在自由时间连工作、吃饭都提不起劲那就不是一个小工具能解决的建议优先和专业人士聊聊。把工具当止痛药没问题但别把止痛药当主食。很多“不知道干吗”的时刻其实是身体和情绪在提醒你你该充电了而不是该做更多事。5.2 随机结果太无聊或者太离谱怎么办随机结果“太无聊”通常是因为建议库里塞了太多“正确”的事比如整理、学习、锻炼。后来我在库里加了一个“无意义但好玩”类目专门放诸如“用冰箱里的菜做一道黑暗料理并认真拍一张照片”“把客厅的灯关掉用手机手电筒打光看一部默片”这种看起来没用的内容。玩游戏也是休息不必每件事都有产出。结果“太离谱”是因为没有考虑到用户当下能接受的体力阈值。所以我给每条建议加了一个“体力等级”字段从1到3进入工具时可以先选“今天我只想低体力消耗”系统会自动过滤掉等级3的建议。这样的设计很傻但很有效它逼着我在建建议库时把每一条都写得更可执行。如果你在建库时发现某条建议很难定级那它大概率也写得太模糊了。5.3 浏览器数据被清空怎么办纯前端工具最大的问题就是数据都在本地换个浏览器、清个缓存历史记录就没了。我的处理方式是在设置页放一个“导出数据”按钮把本地 JSON 下载下来重新导入就能恢复。因为不依赖后端其实也谈不上隐私泄露丢了就丢了。这里有个开发上的提醒localStorage 不适合存大量数据交互记录我只保留最近 180 条再往前的会被滚动覆盖。如果你想让用户永久保留那还是得加后端但对于个人工具或小范围传播的工具本地存储已经够用。我也没做账号系统因为一旦做了账号就会陷入找回密码、数据同步、服务器运维的坑完全背离了“轻量”的初衷。5.4 工具迭代了自己却没有改变怎么办写到最后我想留下一个有点扎心的排查思路。工具能推荐你想不到的事能记录你做过的事能帮你走出十分钟的空虚但它不能回答“你究竟想成为什么样的人”这个问题。我用这个工具一段时间后发现自己开始把更多时间花在“被推荐”的事情上而不是主动选择那些真正让我兴奋的事。意识到这点后我关掉工具一个周末只做三件事回想最近一次让我忘了时间的事列出自己擅长但很久没用的技能假设下个月不用工作我想怎样安排一天。最后真正改变我的不是推荐建议的工具而是这个回看的过程。所以我建议每一位想复刻这个工具的朋友不要把精力全部花在算法上。先用一张纸写下二十条你真正做起来会开心的具体小事做成最简单的随机卡片用起来。它可能比任何技术方案都更先让你看见自己。