• Home
  • 归档
文章检索 作品与友邻 关于我
暴君乔博客
Home 归档

我做了一个软件,把你这辈子走过的路全部画出来

发布于: 2026-09-10
更新于: 2026-09-10
文章目录
  1. 为什么我想做 Leaves
  2. 它的核心体验:少填表,快记录
  3. 首页就是回顾入口
  4. 航班记录:宁可手动确认,也不乱猜
  5. 铁路记录:能查就辅助,查不到也能记
  6. 地图:表格记不住的,路线可以
  7. 数据看板:把一年走过的路算清楚
  8. 成就系统:给长期记录一点反馈
  9. 数据先属于自己
  10. 技术路线
  11. 适合谁
  12. 快速体验
  13. 最后

我最近在做一个个人项目,名字叫 Leaves。

它不是订票软件,不是航班雷达,也不是 12306 的替代品。它想做的事情更私人一点:把每一次出发、抵达、转车、落地,都变成一条以后还能回看的足迹。

项目地址:https://github.com/tyrantqiao/leaves

Leaves 首页航班记录
Leaves 首页航班记录:地图展示航线,底部保留近期行程入口。

为什么我想做 Leaves

我一直觉得,旅行和出差最容易被保存下来的东西,是照片、账单、酒店订单和朋友圈。

但真正的“移动”本身反而很容易丢掉。

比如:

  • 哪天从上海去了杭州?
  • 今年到底坐了多少趟高铁?
  • 哪些城市是反复经过的?
  • 第一次飞某条航线是什么时候?
  • 有多少次只是为了赶路,却后来变成了很清晰的人生切片?

这些信息理论上都存在,可实际上散在 12306 订单、航司短信、日历、相册、聊天记录和记忆里。等到年末想回顾“今年到底去了哪些地方”,往往要翻半天。

所以 Leaves 想解决的不是“怎么买票”,而是“怎么把走过的路留下来”。

它的核心体验:少填表,快记录

Leaves 的入口很简单:你打开软件,输入一段出行信息,它会尽量帮你生成行程草稿。

比如:

CA1234
G1234
上海虹桥到杭州东
北京南 -> 南京南

当前原型已经支持航班、铁路、道路、轮船等多种交通方式。信息完整时,它可以辅助你登记;信息不完整时,它会让你手动补齐,而不是悄悄用一个不靠谱的默认值替你决定。

多交通方式行程记录
多交通方式行程记录:航班、铁路等出行记录可以放在同一份足迹中回顾。

我希望这个产品的记录成本足够低。因为对个人工具来说,一旦每次记录都像填报销单,最后它就一定会被放弃。

首页就是回顾入口

Leaves 的首页不是一个宣传页,而是一个能直接用的应用屏幕。

现在的桌面原型把最常用的三件事放在同一屏:

  • 顶部快速登记:输入车次、航班或城市路线。
  • 中央地图:直接展示当前行程的路线和端点。
  • 底部近期行程:快速切换最近记录。
首页桌面视图
桌面首页全景:顶部快速登记、中间路线地图、底部近期行程。点击图片可放大、缩放查看。
近期铁路行程局部特写
局部特写:近期铁路行程中的车次、起终点、日期和里程。点击可查看完整原图。

打开软件之后,不需要先在复杂菜单里找入口。记录、查看、回顾,都应该从第一屏开始。

航班记录:宁可手动确认,也不乱猜

航班号其实不是一个完全稳定的信息。很多时候,仅有航班号还不够,还需要日期、起飞机场、降落机场等信息才能准确定位。

所以 Leaves 目前对航班登记采取了比较克制的策略:航司、航班号、日期、起飞地、降落地、起降时间都由用户确认。

这听起来不像“智能产品”,但我觉得对个人记录工具来说很重要。外部数据源可能有额度、延迟、失败、错误,个人行程记录不应该完全依赖一个随时可能不可用的接口。

航班登记预览
航班登记预览:确认日期、起降机场和时间后,再保存个人记录。

铁路记录:能查就辅助,查不到也能记

铁路场景下,Leaves 当前原型提供了车站搜索、车次号转换、经停站查询和中转换乘能力。

这些能力通过本地服务封装成同源 API,前端不会直接跨域请求 12306。查询成功时,可以用真实经停站和时刻辅助填写;查询失败时,流程不会卡死,仍然能保存手动记录。

铁路手动兜底流程
铁路查询失败时的手动登记流程,保留基本记录能力。

这个设计对我来说很关键:工具可以增强体验,但不能因为增强能力失败,就让用户连最基本的记录都做不了。

地图:表格记不住的,路线可以

出行记录如果只是一张表,很快就会变得无聊。

但当它们出现在地图上,事情就不一样了。航班可以是一条弧线,高铁可以是一段城市之间的连接,道路和轮船也可以成为不同形态的轨迹。

移动端首页地图
手机首页:窄屏下查看路线与近期行程。

你会开始发现一些以前没注意过的事情:某个城市在一年里反复出现,某条线路其实走了很多次,某次很普通的出差在地图上看起来突然变得具体。

我想要的就是这种感觉:不是做一个冰冷的行程数据库,而是做一个能把生活轨迹重新摊开的容器。

数据看板:把一年走过的路算清楚

记录多了以后,Leaves 会把行程转成可以回看的统计:

维度 可以看到什么
里程 已完成行程累计距离,估算里程会明确标注
城市 去过、经过、反复访问的城市数量
方式 航班、铁路、道路、轮船等交通方式占比
时间 按月份和近期动态回顾移动节奏
状态 区分已完成、计划中、草稿等不同记录
Leaves 数据看板
数据看板全景:累计里程、城市数量、交通方式分布和月份趋势。点击图片可放大。
累计里程卡片局部特写
局部特写:累计里程 1,223 km,单次均值 612 km。上方全景保留统计面板的整体关系。

这些统计不是为了做复杂报表,而是让你在年末、旅行后、换城市生活后,重新看见自己这一年到底去了哪里。

成就系统:给长期记录一点反馈

Leaves 也做了一个轻量成就系统。

比如第一次记录航班、累计抵达多个城市、完成多种交通方式组合、累计里程达到某个阶段,都会被点亮。

Leaves 成就系统
成就页面:对首次记录、累计城市和里程等记录提供反馈。

我不想把它做成强打卡、强运营的东西。成就系统更像是一个温和的回响:你认真记录过的东西,系统也认真帮你记住。

数据先属于自己

Leaves 当前原型已经加入登录和注册入口,并保持账号级行程隔离。不同账号看到自己的记录,本地缓存和服务端本地文件也按账号区分。

同时,它保留了本地导入导出能力:

  • 导出 Leaves JSON,备份当前账号的全部行程。
  • 导入 Leaves JSON,恢复或迁移个人记录。
  • 导入 12306 积分明细提取出的 CSV,将铁路票据追加为行程。
登录页
账号登录入口,不同账号的行程分别保存。

这个项目未来即使接入更多外部数据源,也会坚持一个原则:个人数据应该先属于用户自己,再考虑外部补全、同步和展示。

技术路线

当前可运行版本位于 apps/desktop-prototype/,采用 Node + 原生 HTML/CSS/JavaScript 实现,主要用于验证核心体验。

已经验证的能力包括:

  • 快速登记
  • 地图展示
  • 账号隔离
  • 本地持久化
  • 行程管理
  • 铁路辅助
  • 数据看板
  • 成就页
  • 移动窄屏适配

后续目标是迁移到正式桌面技术栈:

  • Tauri 2 作为 Windows 桌面壳。
  • React + TypeScript 承载前端交互。
  • SQLite 保存行程、地点、路线和必要的外部响应。
  • Provider Adapter 隔离铁路、地图、文本导入等外部数据源。

我不想把 Leaves 做成“什么都接一点”的巨大软件。它真正要做好的是:低输入成本、离线可用、数据可靠、长期可回顾。

适合谁

我觉得 Leaves 特别适合这些人:

  • 经常出差,需要记录航班、高铁、城市和交通费用的人。
  • 喜欢旅行,希望回看年度足迹和城市路线的人。
  • 铁路或航空爱好者,关心车次、航线、里程和交通方式的人。
  • 想轻量备份个人行程数据,但不想把所有东西都交给云服务的人。

如果你曾经在年末翻相册、翻订单、翻聊天记录,只为了想起“今年到底去了哪些地方”,那 Leaves 想做的就是把这件事变简单。

快速体验

项目地址:

https://github.com/tyrantqiao/leaves

本地运行:

npm install
npm start

启动后访问:

http://127.0.0.1:4173

当前版本还是桌面原型,适合体验核心流程和参与产品打磨。正式 Tauri + React + SQLite 版本仍在推进中。

最后

Leaves 关心的是那些我们经常略过的移动瞬间。

清晨出发的高铁,深夜落地的航班,临时改签后的路线,周末跨城的短途,某一年突然频繁出现的城市名。

它们单独看都很小,积累起来却是一份很私人、很真实的生活地图。

如果你也想把自己的出发、抵达和绕路都保存下来,欢迎关注 Leaves。一起把它打磨成一个长期可用、数据可靠、打开就能回到旅途里的个人出行记录工具。

我做了一个软件,把你这辈子走过的路全部画出来
/archives/leaves-travel-map/
作者
tyrantqiao
发布于
2026-09-10
更新于
2026-09-10
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • 旅行
  • 技术
  • 个人项目
  • Leaves
  • 项目

扫一扫,分享到微信

微信分享二维码
土巴兔APP AI提效分析报告
2025赏樱大阪路线设计
© 2026 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 文章检索
  • 作品与友邻
  • 关于我

展开标签

  • 随笔
  • 旅行
  • Java
  • 面经
  • 源码
  • 架构
  • Hadoop
  • 计算机网络
  • 技术
  • IDEA
  • maven
  • JDK
  • Linux
  • MySQL
  • 性能
  • 数据库
  • Redis
  • MQ
  • Spring
  • SquirrelFin
  • 记账
  • Android
  • 个人财务
  • TIDB
  • unity
  • chatgpt
  • 前端
  • Vue
  • Git
  • shadowsocks
  • Hexo
  • 问题排查
  • 业务
  • JVM
  • 算法
  • nginx
  • ssh
  • test
  • vim
  • Python
  • 爬虫
  • 影视剧
  • 中间件
  • 事务
  • 表达
  • 运动
  • mybatis
  • AI
  • 产品
  • 家装
  • 土巴兔
  • 域名
  • github
  • 软件
  • 个人项目
  • Leaves
  • 幽默
  • 穿搭
  • 画画
  • 摄影
  • 设计模式
  • 缓存
  • 调酒
  • c
  • 课程设计
  • 数学

Collection

作品与友邻

我做的小工具、朋友的站点和一些长期值得回访的灵感来源。

  • 土 土巴兔 AI 导购交互演示 可点击体验用户导购、平台运营、装修公司、材料商及 AI 话术知识库的多端增长流程。 /demos/tubatu-ai-guide/
  • L Leaves 行程记录 我做的行程记录页面小工具,用来沉淀旅行路线、日程安排和途中的灵感。 https://leaves.tyrantqiao.com/
  • 本 本网站主题yilia设计者的主页 http://litten.me/
tyrantqiao的头像

tyrantqiao

github rss qq mail facebook linkedin

About

关于我

代码、海浪和持续折腾,都是生活的一部分。

<div class="aboutme-card"> <p class="aboutme-eyebrow">tyrantqiao</p> <h3>Java 全栈开发</h3> <p>常年和 Java、后端服务、前端工程、数据与部署打交道,喜欢把复杂问题拆开、写清楚,也把踩坑过程整理成文章留给后来的人。</p> <div class="aboutme-tags"> <span>Java</span> <span>Full Stack</span> <span>Backend</span> <span>Frontend</span> <span>Extreme Sports</span> </div> <p>工作之外偏爱冲浪等极限运动,享受在浪上找平衡,也享受在代码里找边界。</p> <div class="aboutme-contact"> <a href="mailto:[email protected]">Gmail</a> <a href="mailto:[email protected]">QQ Mail</a> </div> </div>