做了一个解决我自己痛点的小工具

出行规划工具 · 项目毕业复盘

个人项目复盘 从「心算倒推时间」到「小程序自动算」 2026.08.06

我为什么会需要这么个工具?

我女朋友在福建,我在北京,隔三差五就要远距离出行
周五或周六早班机飞过去,周日最晚一班飞回来——每次都要倒推:几点到机场、几点出门、几点起床。
环节多了就涉及各种交通工具,心算很容易漏。我记性又差,算完就忘,忘了又得重算。
问题不复杂:从终点往回推,算出每个节点的最晚出发时间。
起床出门到机场登机 从这里往回推固定终点 每一段都得算时间和缓冲

年初的想法,拖到五月才动手

过年的时候就在想了,一直拖着没动。5 月 15 号才正式启动,断断续续搞了半个月,5 月 30 号 V1 上线。

年初
每次出行都要心算倒推
想做个工具解决这个问题,但一直拖着没动手。
5.15
终于正式启动
跟 Codex 聊需求、写 PRD、定技术方案。
5.19
发布开发版内测
几位朋友认真体验了,给了很多有价值的反馈。
5.30
V1 正式上线
从想法到能用的工具,第一个闭环跑通了。
半个月不短,但中间推翻重来了好几次,不是一条直线。

写了需求文档,为什么第一版还是不行?

一个具体想法
跟 AI 反复讨论
写了 PRD + 技术选型
AI 按文档实现了
但实际体验不对
我当时以为

把文档想清楚,剩下交给 AI 就行了。

后来才明白

文档写不清楚所有的概念、页面形态和交互逻辑。很多事只能边做边想清楚。

第一版的问题:什么信息都往一张卡片里塞

初代版本
  • 每张卡片上都写了出发地、到达地、交通工具。
  • 地点信息和通行信息混在同一个对象里。
  • 页面上大量重复文字,交互逻辑也很模糊。
应该是
  • 地点(节点):需要停留或经过的位置。
  • 路段(交通):两个地点之间的通行方式与耗时。
  • 两种不同的东西,各用各的方式在页面上展示。
概念没分清楚,UI 再好看也没用——用户看不懂、用不顺。

把地点和交通拆开,页面一下就清楚了

地点卡片:只展示这个地点本身的信息,不再塞交通内容。
交通气泡:在两个地点卡片之间,单独展示通行方式和耗时。
数据和页面终于对上了——用户一看就知道自己在编辑什么。
先把「对象是什么」搞清楚,再谈交互怎么做。
北京 · 家地点卡片 首都机场地点卡片 打车 · 70 分钟 节点节点 路段是连接,不是另一张重复的卡

第一轮返工教会了我什么

一个模糊的想法撑不起一个产品:对象、关系、边界都得想清楚。
产品形态要自己判断:大致的布局和核心交互,不能全都交给 AI。
AI 写代码很快,但它不能替人做产品决策
没想清楚就让 AI 开干,最后大概率要返工,代码越改越难维护。
核心就一句:不能放弃思考,全盘交给 AI 替你做决定。

第二次走偏:为什么「单时间轴」是根本错误?

我的理由:人是一个物理实体,同一时间只能在一条时间线上——所以只需要一条时间轴
实际用了才发现:这个工具不是日常用的,它只解决复杂出行的场景。
下一次打开,大概率是一段全新的行程。而且用户会提前安排未来多次出行
"人不能在两个地方"是事实,但这不是这个产品该用的模型。
同一条时间轴旧行程残留 周末出行下次已预约的出行 信息全挤在一起

正确的结构:不是一条线,是多个独立的行程

每次复杂出行是一个独立的行程,行程内部才是地点和交通段。

行程 A
北京 · 家
首都机场
福州
行程 B
福州 · 酒店
景点
返程机场
行程 C
未来出行
待规划
待规划
多行程才符合真实使用:用户不是每次都在上一段行程的尾端继续。

知道错了以后:为什么还是选择整体重构?

单时间线前端、后端、数据库全都围绕这个错误假设建的。
纠结了很久影响面太大了,基本等于重写。但继续打补丁只会越描越黑。
多行程结构把底层设定推翻,换来能承载真实使用场景的基础。

重构代价很高,但核心模型错了就是错了,不是局部修修补补能解决的问题。

面对根本性错误,早点重构比继续维护错误结构更划算。

更难受的一课:不要因为「自己很确定」就不去验证

我当时干了什么

AI 最开始提了多行程方案,我用「人不可能同时在两个地方」这个理由否掉了它。AI 就顺着我改了设计。

现在我会怎么做

对每个重大设计,都用真实使用场景去反复追问。正确性比谁提的更重要。

产品设计既要有主见,也要给「我可能是错的」留验证空间。

重构完了,最磨人的工作才刚开始

人工体验
找到问题
给 AI 下
修改任务
AI 改完
人工复核

这个阶段没有了第一版实现时的那种惊艳感,面对的全是 bug、逼死强迫症的小样式、奇怪的交互细节。

整个过程枯燥乏味,但也很有成就感——看着产品一点点被打磨成型,越来越好。

5 月 19 号发了内测版,真心感谢帮我体验的朋友们

作为开发者,自己太熟悉产品了,反而看不出用户第一次打开时的问题。

让别人帮你体验,是在借用别人的眼睛发现自己看不见的东西。

初代体验版长这样

初代体验版首页
飞书反馈问题记录
← 初代体验版首页飞书上收到的反馈 →

第二轮大改:从动森风格组件库「偷」设计思想

那段时间在 HelloGitHub 上看到一个动森风格的 Web 组件库,一眼就喜欢上了。
但它只有 Web 端没有小程序端,我就让 AI 全面分析它的文档,把设计规范和设计思想整理出来。
然后按照这个设计要求,对小程序的样式做全方位改造。
这次用的是 Claude Opus 4.6,改完打开一看,确实惊艳到了。
基础样式固定之后,后面 Codex 接着迭代也没出什么大问题。
改版前:信息拥挤改版后:层级清楚 核心操作辅助信息

前端全面改版之后,效果确实不一样了

改版后首页
改版后行程页
← 改版后首页改版后行程页 →

做新手引导,我来回搞了两天

为什么要做 onboarding

帮我测试的朋友都说打开之后看不懂。「倒推计算时间」这个概念确实不是常见的心智模型,第一次用很难 get 到。

为什么这么难做

要带用户完整走一遍核心操作:局部高亮、箭头指向、步骤提示、按钮动画、滚动定位……每一处细节都得对齐。

理解工具是干什么的
跟着走完一遍核心操作
形成自己的使用方式
Onboarding 不是写一段说明文字,是把关键交互流程演示给用户看。

新手引导的最终效果

新手引导1
新手引导2
新手引导3
新手引导4
步骤 ①步骤 ②步骤 ③步骤 ④

一次缓存事故,逼我重新划了数据边界

测试时发现:删了的行程数据,本地残留缓存居然把远端已删除的数据又覆盖回来了。

数据层应该承担的角色边界规则
服务器数据权威数据源数据存不存在,服务器说了算
本地缓存离线兜底用不能反向覆盖服务器已确认的删除
同步逻辑恢复一致性明确优先级、删除语义和失效时机
缓存不是第二个真相来源,没有明确权威边界就会搞出「幽灵数据」。

做完这个项目,我到底学到了什么?

从自己的真实痛点出发,做出了一个能上线用的小程序
两次推翻核心产品假设,最终确认了地点—路段—多行程的模型。
通过内测反馈、UI 重构、onboarding、缓存边界,把产品从「能跑」推到了「能用」。
弯路没白走,每一次推翻都让理解更准确了。
最想记住的一句话

AI 能放大实现速度,但产品的定义、验证和责任,始终要由人自己来承担。

想清楚 + 验证假设 + 持续打磨 = 真正能用的产品

谢谢观看

出行规划工具 · 项目毕业复盘

从一个真实痛点开始,把每次推翻都变成更准确的理解。