# 产品开发总结 | PFollow 终于完整了！

> 原文：https://pjhubs.com/2026/04/21/pfollow-130/
>
> 作者：PJHubs · 发布于 2026-04-21 · 标签：PFollow、开发日志

![](https://pjhubs.com/images/2026/04/02/1.png)

提交了 1.3.0 PFollow 版本，带上了全新的「全国重点文物保护单位」数据，还有旅行回顾和心心念念的徽章系统，PFollow 总算是五脏俱全了，距离完全体往前迈出了一大步。并且还把 PJ.Studio 做了改头换面的第二版，对比半年前只用了两张 jpg 互相切图的效果好太多了。

## PFollow
搬完家后第二天就整理出书桌，马上开始开发 PFollow 下一个版本的内容，想要在下一趟旅行开始前发出新版本，也想赶在订阅了 Ultra 会员的 AI Coding 工具过期前消耗完积分。好在截止写下本文时，只剩下 4% 的额度没有使用，还算凑合吧，但以后应该不会再订积分额度这么大的包了，感觉过去的几天都没有休息好，都在想着如何更快的消耗完这些积分，避免亏本，得不偿失。

### 全国重点文物保护单位
在 1 月底那会儿就已经开始在谋划给 PFollow 加上全国重点文物保护单位（后文简称文保单位）数据源了，但整套数据解析、校准和适配流程拉得太长，不光是五千个文保单位数量过于庞大无法一个个比对数据点位的真实性，就连数据解析环节都错了好几回，不是少了就是分类错了。这么大批量的讲究准确性的数据错一个排查起来可真是太难了。

折腾了一段时间后发现再这么拖下去我自己都要没信心了，果断在 3 月中下旬的一次版本迭代中先暂时去除了文保单位的数据，留给未来的自己再处理。

一直等到最近一次 1.2.x 系列版本更新，在一些社交平台上宣传了一波 PFollow，包括身边的小伙伴在内都给予了较高的评价，我受到了极大的正反馈，才下定决心一定要把这个文保单位的硬骨头给啃了。接下来就给大家分享一波 PFollow 是如何解析、清洗和格式化并上屏这些数据标签的。

![](https://pjhubs.com/images/2026/04/02/2.png)

首先，我们需要找到某一类数据的统称。以「中国世界遗产」为例，可以问 AI Chatbot 也可以查 wikipedia，甚至百科百科都行，只要能够找到这一类数据统称下的所有子项即可。

![](https://pjhubs.com/images/2026/04/02/3.png)

接着，把这个数据统称列表来源交给 AI Agent，先让它按照某个固定格式序列化成 json 文件，帮我们生产一份完整挖好空的、带地点名称的 json 文件。比如我会要求 agent 留出 description、geo、locationName 等字段，方便后续统一格式化填补，但 locationName 字段会进一步要求 agent 根据网页上的信息先行填补完整。

注意，这里的 locationName 字段非常重要，这代表着该地点所出的省份和市县信息，前期就是因为少了这个关键字段，导致我下一步再去调用地理信息查询时，经常被地图厂商模糊匹配查询到了北京某个奇怪的地点上，一坑一个不吱声，你就查到昏天黑地吧。

下一步，有了地点的 name 和所属市县的 locationName，就可以进行地理信息查询了。这里我找到了高德提供的[「坐标拾取器」](https://lbs.amap.com/tools/picker)，可以通过地点名称查询出对应的 gps 点位信息。这里也有个坑，记得一定要去注册成为开发者，登录后再去查询，否则拿到的 gps 点位精度过低，只有小数点后三位，成为开发者后可以拿到小数点后六位，可用性大大提升。

已经整理出了地点列表，再交给 agent 让它写一些脚本去做 GUI 操作一个个帮我们查出来对应的 gps 点位更新回 json 配置文件即可。这里为什么说「写脚本进行 GUI 操作」呢？原因还是接口做了反爬，不能大批量快速调用，会被限流以及极端情况下会被封 IP 甚至封号，得不偿失。

![](https://pjhubs.com/images/2026/04/02/4.png)

解决这个问题我们可以用时间来换，让 agent 写一套基于 Chrome test mode 下的 DOM 操作脚本，模拟人类行为在 input 块中输入内容，复制出 gps 点位到剪贴板，再统一刷回 json 配置文件中。这一套流程可以欺骗这套反爬流程，已经跑了几个月，生产出了 9 套数据源。

但还是有些棘手的小问题，比如在做「全国重点风景名胜区」数据时，大连海滨―旅顺口风景名胜区这一点位的数据就很难受。涵盖了从大连老虎滩一直到旅顺口整个海岸线长达几十公里的风景区，这个 gps 点位加在哪里都不合适。最终的解决办法还是要固定一个展示的 gps 卡位点，但把 json 配置文件里的 geo 字段重构为 json array 类型，支持多个 gps 点位解析，只要照片在这些个 gps 点位附近都算来过。

诸如此类还有好几个小问题折腾了好久，这里再说一个有趣的，绝对让你觉得这事干起来性价比极低。在做文保单位数据时，经常地理查询找不到或者找不准某个文保单位，换了好几个地图厂商的查询服务都找不到这个点，仔细一看原文才发现这些个文保单位的地址是「位于 xx 县 xx 村东北方向 2km 处的刀背山中部」，一连十几二十个都出现了这种情况。

遇到这种问题解决的方案也很简单，当 AI 不行的时候我们就要「人工智能」了。用人工手动的方式找到这个县这个村，仔细对比东北方向 2km 是不是有一座名为刀背山的山，然后切换到卫星视角下，找到这座山的中部位置，打上一个点位，把它作为这个文保单位的 gps 点。

接下来做的事情才是发挥真正 LLM 能力的一步，给地点加上 50 字左右的简介。这个时候千万不要再让 agent 去爬去总结各大百科上的网页内容，浪费 token 不说，还墨迹得很。直接让它发挥模型能力，撑满单次会话窗口上下文，基于自己的知识库总结出这些地点的 50 字简介，回填 json 配置文件，这是 LLM 最适合干的事。

![](https://pjhubs.com/images/2026/04/02/5.png)

最后一步，拿着这份 json 配置文件，让 agent 进行建模，从数据解析到 UI 上屏显示在 MapView 上即可，不过这些就是常规的客户端开发范围了，没什么意思。

不过那两天搞得我人都恍惚了，经常冒出做这种事情是否有意义，如果这都不是爱，还能是什么呢？最终，在全力校准数据的决心下，我看到了自己在全国五千处文保单位中打卡了两百多处的记录，一股热泪涌上心头。很早就想把这套流程固化成 Skill 让 agent 自己去做了，但就从我上面描述出来的这些环节都可能出问题，需要花费大量的时间去校准字段异常，连描述需求和流程都说不清，怎么能指望一个 md 就能够让 agent 帮着做完呢，不容易呀。但我还在尝试，争取可以固化一些足够小的 Skill，逐渐拼凑起来吧。

### 旅行回顾
原本是想做成「旅行护照」一页一页的翻过去，去看自己的回忆总结，但左思右想总觉得还是不能这么做。如果 PFollow 是 Flighty 这事还真有搞头，Flighty 做得也挺好的，没必要按着头抄。不过说到抄，前段时间我关注到的一个设计感非常强的一款同为照片回顾 + 地点记录的 app 没想到居然也是抄的国外一个产品，开发者美化了一波说法是拿到了授权。但还是被眼尖的路人发现抄得没边了，就连字体都抄过去了。

更有意思的是，还有一款我之前关注的产品，主打无感地点自动记录，能够计算出你在某个地点停留的时间，想法和思路都挺好的，但在最近一个版本中居然去抄了前面我说的原本就抄了别人的 app 的 app 设计，这一整个闭环给我看懵了。原本我对这些地点记录和打卡国内开发者都挺佩服的，在这个方向上居然能够花费如此大的时间精力成本去做这么「古老」的产品方向，还做的这么重，甚至都全职开发了，只是没想到到头来本质上还是在抄。

我无法猜测 PFollow 的这套流程和理念什么时候会被抄，可能永远不会被抄，因为根本没人看的上。但有时候能被抄也能说明大家都看到了一些有意思的地方，不过我倾向于未来的某一天一定有人会基于我的这套方案去做更多元化的升级，还挺期待那一天的到来，想看看其他人是怎么理解这件事的。

但又不得不说起已经落入尘土的 Exping 了，有这个产品在的那几年 PFollow 我都不愿意继续做，因为它基本上把我对 PFollow 最想做的部分都给做了，设计和品质都非常好。虽然结果最终还是停止运营了，但关注它的那段时间我确实看到了不少精益求精的产品人在对待自己喜欢的产品上所付出的那股劲儿，respect！

![](https://pjhubs.com/images/2026/04/02/6.png)

PFollow 的旅行回顾目前由大到小分成了三大块。首先是世界模块，通过世界地图展示出用户去过的国家个数、去过最南和最北的国家，以及去过次数最多的国家。其次是中国模块，通过中国省份地图来展示出用户去过了几个省份，计算出去过了几个城市，停留时间最久的城市和去过的海拔最高城市。最后是数据模块，展示出了用户去过了多少个 5A 景区、中国世界遗产、历史文化名城和博物馆等等指标。最终通过一张长图来全部列举展示出来。如果觉得某一 section 的数据想避嫌，可以长按 section 删除它。

旅行回顾功能整体是免费的，毕竟都是用户自己的数据。你可能会有点奇怪，都有了地点罐子为什么还需要旅行回顾长截图呢？这么做的道理也很简单，地点罐子是带交互的、给自己看的入口，如果你想让别人知道你都去过了什么地方，那规范的格式化数据汇集在一起是最方便的。

### 徽章系统
PFollow 的徽章系统是一块儿我怎么啃都啃不下去的肉。在几年前我第一次购入 Apple Watch 时就惊讶 apple watch 在健康领域上投入的成本。有段时间我是真的会因为没有合并上三环而让自己大晚上的下楼走路或者在家里做运动，只会把三环合上，只为了拿到某个特殊日期的特殊徽章。当然，最重要的原因还是因为 apple watch 的徽章质感非常好，好到出现的任何一款徽章我都想拿到。

PFollow 虽然不是一个严格意义上的地点打卡产品，只能通过用户真实照片来计算和匹配一些地点标签数据，但这样也给用户提供了「原来我去过这么多地方」的认知，曾经就有小伙伴强烈建议我加上徽章系统，甚至还可以参考 Keep 的徽章商业化逻辑，毕竟 Keep 光靠买实体徽章都赚了一个亿。

之前不是很愿意投入精力去做徽章系统最主要的原因是 PFollow 的第一笔订阅没收到，除了送给身边朋友们那十几份会员外，观察了过去三个月，自然流量下没有任何一笔订阅费收入。虽然这在我的预期之内，但差点夭折在“没有反馈”的阶段，因为独立开发，做自己的产品这个状态不是上班这么简单，上班的回馈是很强的，更别说在之前我还在字节这种追求极致的环境里。但好在这个产品是我自己真心喜欢的，从 18 年有这个想法到现在，一直念念不忘，一直安慰自己「反正没人付费我就自己用」

26 年 4 月初新的数据标签上线后，调整了一波定价，付费率和用户反馈开始大量的上来了。并且产品层面上也做了一些改变。最主要的变化是个人的状态更对了，不像之前没有那么多时间去思考产品本身。第一版的付费策略（6 元一个月，38 元一年，58 元终身）上了后，只有送给朋友们的兑换码，没有一个人买。第二版付费策略（12 元一年，18 元买断）上了后，当天就有人付费买断，并且第二天开始重新宣传后，评论区和身边的朋友反馈都很足，半天卖了 7 份，随后连续几天都有十几份的买断。

说了这么多，想表达的意思是，我终于在 PFollow 这个产品上收到钱了！！！PFollow 的 PMF 也找到了，剩下的事情就是想办法去加大规模，多方面触达到目标用户。

![](https://pjhubs.com/images/2026/04/02/7.png)

因此，也就开始了打造 PFollow 的徽章系统。找了一个设计师朋友设计了一套我喜欢且符合 PFollow 这款产品初衷的徽章，目前有中国省份、世界大洲和国家地区三套徽章已上线，看后续的用户反馈如何再来决定是否有必要把规划中剩下的徽章都做完。经过我们的尝试，目前比较符合设计师日常流程的确实还得是 Lovart/星流，其他的平台还需要进一步观察。


## 其他
在最近折腾 PFollow 这里学习到了几点。首先，定价确实是个策略，不能在产品很小的时候就定超过实际价值的价格，应该逐步提高，并且一定要给到用户「可以买贵的，但不会买贵了」的预期。而且一定要在产品发布的第一天就上商业化策略，这点的认知没有变。因为在产品很小的时候都有人愿意给你付费，说明你已经找到了 PMF，想办法规模化继续验证即可。

其次，用户的反馈很重要，可以没赚到钱，但一定要有反馈。前期送兑换码的原因也是想从身边人拿反馈。实际上反馈也拿到了一些，但质量不如目标受众来得准确。

最后是要加大宣传。我跟几个小伙伴私底下说过这个观点，我也是从某个播客节目里听到的，很认可。你的每一个想法背后都有 800 万人跟你想的一样，只要你能够找到这 800 万的受众，也就成了。PFollow 的宣传途径主要是小红书，至于其他平台，比如即刻、豆瓣、Threads、微博和朋友圈都试过，抖音最后也试了下，效果都不太好。

效果最好的是小红书，是直接带来流量的，可以多做几套文案去测，我也测出来一些稍微爆一些的文案。但社群我没做，主要是没精力，但实际上做社群会大大提高用户粘性，后面再考虑吧。一开始没做宣传，我想试试不宣传的情况下通过自然流量能不能触达到目标用户群带来第一笔收入，结论就是很惨，根本没人。这年头不存在酒香不怕巷子深的事了，获客成本越来越高，用户的注意力分配基本上都均摊到头部 app 中，只有找到非常非常垂的方向和用户才能有机会一试。

还有一点特别有意思，可能是被小红书带来的流量冲昏头脑，我连续两天在帖子中放了站外下载链接，直接触发了平台的限流规则，禁止了我账号下的所有帖子流量一周。反应到数据上非常快，转天基本上就没有任何新增付费了，但还是有零星几个下载，得不偿失呀，也算是花钱买教训了。

除此之外，终于有时间来整理 [PJ.Studio](https://pj.studio) 了，到现在想起来都觉得这个域名真牛逼（叉个腰），毕竟是我的第一个短域名，还天造地设完美匹配上了 PJ 二字，越想越绝。

![](https://pjhubs.com/images/2026/04/02/8.png)

延续第一个版本通过两张 jpg 图片切换外加一些 CSS 逻辑营造出来的开关灯效果，把自己做过的一些产品都放了上去，最下面也加上了开发者故事模块，这个站点相当于多了一份自己所思所想的宣传页吧。之前我还挺愿意说「影响力」这词的，最近两年越发觉得这个词有点负面，可能还是被大厂叙事的逻辑给搞坏了，不可取不可取。

把以上所有事情都做完后，AI Coding 工具积分还是没用完，开始去修博客里的一些陈年老 bug，给加上了 RSS 订阅和 https 支持。但就算如此还是有九百积分没耗完，争取在最后一天再努力一把。

## 总结
PFollow 这个产品发展到现在和我 18 年在学校宿舍里折腾的形态已经完全不同，我不知道那会儿的自己如果知道现在的自己把 PFollow 弄成这样会怎么想，大概率会送来一个大逼兜吧哈哈哈。不过我觉得幸运的是现在的「点子」和一开始的「点子」已经完全不一样了，这反而是一件好事。

这在学术届更是如此，借用某位学术大拿的话来说，如果你正在做的研究做完了的方向和你一开始决定要做的方向是一模一样的，说明这大概率或者说这一定不是个好的研究方向，但如果已经分叉出去了已经不同了，这说明大概率你找到了一个正确的方向。

经过 1.3 这个版本，PFollow 现在的业务流程更加清晰了。帮助用户基于地图标签点组织相册里的照片，提供更好的照片回忆模式的免费使用场景，并通过付费订阅做垂类地点数据源自动打卡签到行为，满足部分垂类群体用户喜好。这么一看好像做的事情也不大，但好在就算如此小的事情，还是能够发现别人做得不好的地方，找到了一些突破点，有真实用户付费已经很满意了，未来的每一步都是进步。

马上就要开始我的下一趟旅行了，没想到这又是在旅行前夜才结束的工作，最近几个月总是在旅行的空档中才有机会去写 app，去年的自己一定想不到吧哈哈！那就...让我们在全世界相遇。
