上一篇讲了听城怎么在一个晚上从 Obsidian 里的一行字变成 iPhone 上的 MVP。这一篇讲它出生后第 11 天经历的一次产品定位推翻重来:为什么「位置触发城市冷知识」不够,以及「记录我和城市擦肩而过的故事」这句话是怎么长出来的。
游船上的高光时刻
六月中旬,我和老公按原计划去芝加哥玩了五天。这趟旅行本来就是这个 App 的动机之一,所以我全程开着自己写的听城,边玩边测。
最兴奋的时刻发生在那个很经典的芝加哥游船建筑 tour 上。我坐在船上,开着 App,船开到哪儿,App 就弹出哪儿的小故事。我还专门做了个对照实验:船上导游讲到某栋建筑的时候,我低头看看手机里弹出来的故事,基本上是一样的。当时我就觉得,哇,我做这个 App 能省好多钱,导游要失业了 (旅游行业的朋友们抱歉…我当时真就这么想的)。
还有一个纯属巧合的名场面。我在船上打开相机想拍一栋建筑,快门还没按,自己 App 的通知刚好弹了出来,相机取景框和通知同框,被我截了下来。这张图后来我一直想拿去当 App Store 的实际运行效果图,毕竟这可比摆拍真实多了。

在游船上想拍一栋建筑,快门还没按,通知先到了。
诚实的注脚:当时三档提醒还没做,频控冷却也全关着(毕竟是出来 dogfood 的),所以一路上弹出来的东西着实不少。旅行的时候嫌它热情没关系,但回到日常通勤场景,这个密度就是骚扰了。这个问题先记下,马上会回来。
回家当晚,我发现自己撞车了
旅行回来当晚,我在 App Store 里闲逛,越逛心越凉。session 记录里留着当时的原话:
我突然发现 app store 里面的 迷雾地图、waytale、Atlas Obscura 有点像我在做的 app 啊,而且感觉也有一些同类题材的 app 出来了,帮我看一下,我的项目是不是撞车比较严重了?
调研的结果更扎心:
我看了一下,确实核心功能和 waytale wexplo 撞车率更高,你帮我调研一下,同类的还有哪些 app,这个赛道是不是比较拥挤了?我可以优化的地方在哪边?我如何让用户觉得我的 app 不一样
迷雾地图、Waytale、Wexplo,再加上小红书和 Threads 上刷到的各种独立开发者作品,位置探索这个赛道其实已经站满了人。我开始自我怀疑:既然市面上已经有这么多同类产品了,为什么我还要亲自做一个?是不是就是自嗨好玩呢?
(顺便,同一个 session 里我还问了一个特别独立开发者的问题:“我如果免费且无内购,纯福利项目,会不会被开发者讨厌?“现在看还挺好笑的,害怕的居然是这个。)
我为什么要自己做一个 App
这个问题逼着我想清楚了一件更根本的事:作为一个独立开发者,做一个自己的 App 的理由到底是什么。
我的答案是:因为有一些我自己想要的功能,市面上的 App 就是没有。就像记账 App 市面上多了去了,但你还是可能想要一个完全按自己习惯来的。而市面上那些位置探索类 App,普遍都很有目的性:打卡、收集、规划路线,恨不得给你排出一条最优巡游路径。这些我其实都不喜欢。我旅游就更 casual 一点,可能我是更偏向 P 人,随便漫游到一个地方,如果能跳出来个啥东西告诉我,你眼前这个东西是个什么玩意儿、有什么小故事,我喜欢的是这种感觉。而且我这人比较宅,可能都不会经常出门City walk,真正吸引我的是那些我不知道的小故事,所以我觉得应该需要有一个不出门就能读故事的模式。
打卡、连胜、排行榜这套东西对我也基本免疫。Pokémon GO 和 Duolingo 我都玩过,玩一段时间自己就不想玩了,连胜什么的我实在提不起兴趣。我不喜欢旅行或者 citywalk 的时候被一个 App push 着走。
所以与其说后来的 pivot 是市场分析的结果,不如说是我终于承认了自己是什么样的用户:一个 P 人,做给 P 人用的 App。
头脑风暴
想明白「为什么做」之后,「做成什么样」是第二天和 AI 的一场头脑风暴里定下来的。这场对话的记录完整留着,现在回看还挺有意思的。
开场是我的问题陈述:
我发现我的项目目前和 Waytale / Wexplo 等 app 重合度比较高,需要重新调整思考一下产品方向的问题……目前我在思考怎么做出独特风格,从 UI 入手感觉也不太行,vibe coding + ai ui design 的结果就是会带来高度同质化的 UI。我需要进行头脑风暴来静下心来看看项目之后如何做
这里有个单独值得一说的观察:vibe coding 加 AI 出的 UI,注定是高度同质化的。大家用的是同样的模型、同样的组件库审美,AI 时代产品的差异化不可能来自生成出来的界面,只能来自界面背后的想法。
中途 AI 给的几个方向,我一度觉得不对味:
嗯,大致同意,但这样又回落到导游 app 的近似赛道上面,用户其实不太分辨得出来这和带路线的导游打卡 app 有什么区别
然后聊着聊着,那句话出现了。AI 给出「这是一个记录我和城市擦肩而过的故事 app」这个说法,我的回复是:
我比较喜欢这个定位,而且我觉得可能也要让用户可以选择是实时经过时提醒,还是说可以设置提醒稍微弱化,或者就纯故事模式
现在回看这条消息我自己都觉得神奇:一句话定位和三档提醒(实时提醒 / 稍后汇总 / 静读模式),是在同一条消息里诞生的。芝加哥街头被通知轰炸的记忆还热乎着,所以「提醒应该可以调弱」几乎是本能反应。
为了确认这个定位的感觉,我还找了个很妙的参照系:
比如说像钓鱼/观鸟记录 app 这种也有点类似,但也不是说鼓励你去解锁全部的鱼
对,就是这个感觉。钓鱼佬记录自己钓过的鱼,观鸟人记录自己遇见的鸟,但没有一个正经的观鸟 App 会催你「再看 3 种鸟就集齐本市图鉴」。城市故事也应该这样:记录我遇见过的,而不是催我集齐没遇见的。
头脑风暴的收尾非常工程师:
好的,根据我们这次头脑风暴讨论过的 pivot,修改 docs 里面相关内容
第二天,PRD 的修订记录里多了一行:「产品 pivot 为『城市擦肩记录』、三档提醒、数据所有权原则、来源注释与地点/故事分离方向」。PRD 里沉淀下来的那句话,我到现在都觉得是整个项目想得最清楚的一句:
导游 App 改变用户路线;听城不改变用户路线,只改变用户对刚刚经过之处的理解。

pivot 落到产品上的样子:提醒模式和频率都由用户自己决定。
用「不做什么」定义产品
pivot 之后,PRD 里长出了一张越来越长的「明确不做」清单。事后看,这张清单比功能清单更能定义这个产品:
- 不做 Atlas Obscura 中文版,不做 Google Maps 评论层;
- 不做通用 POI 地图:不做餐厅评分、路线规划、导航、比价;
- 无排行榜、无每日任务、无积分、无完成率刺激,只有保存、收藏、个人城市日记和可删除的本地记录;
- 和 Pokémon GO / Ingress 划清界限:不把城市做成棋盘或收集任务,而是「日常路过后留下的故事层」。
产品气质在 PRD 里的定义是「Apple Reminders + city zine + ambient notification」。这个气质具体到什么程度?具体到通知文案的措辞:稍后汇总的通知不写「去看看附近」,而写「刚才有几则城事与你擦肩而过」。它承认你已经走过,不拉你回头。一个词的差别,一边是导游,一边是脚注。
这条原则甚至写进了数据模型。地点(Place)和故事(Story)是分开的:geofence、地图 marker、现场确认归 Place;阅读、收藏、分享、来源注释归 Story。现场确认不等于「完成」,已读和收藏也不会默认关掉未来的提醒,因为这不是成就系统,是日记。
守住这张清单不容易。月底有一轮「除了加城市还能往哪走」的头脑风暴,讨论到「漫游模式」的时候差点破戒,最后在 ROADMAP 里留下了一条很有意思的自我约束:漫游模式不得照搬旅行青蛙的收集、抽卡、图鉴、盖章,要么改写成「非收集的氛围版」,要么显式决策是否为此放宽非游戏化原则。想放宽原则可以,但必须明着来,不能温水煮青蛙。
改名:从城市旁白到听城
这个项目最早叫「城市旁白 / City Whisper」,取的是「城市向你诉说故事」的意思。英文名一直沿用到今天,中文名后来改成了「听城」。
关于「听城」名字由来的一个彩蛋
改名的理由说出来相当不正经:我觉得「听城」这个有点像网络上说的听床师,自称跑到红墙里面躲在床板底下听大人物的秘闻(你懂的)那种,听不为人知的小故事嘛,好像挺好玩的。就这么定了。
改名也有代价。有朋友很认真地问我:这个 App 叫听城,为什么我没法用语音去听它?名字自带了预期。其实早在 pivot 那天的 session 里我就问过 AI「由于项目名称,你觉得我需要加语音导览的功能么」。目前的答案是:故事页可以用系统 TTS 朗读,完整的语音模式再看。名字先立在那儿,功能慢慢还债。
独立开发者的差分
pivot 定下的另一条原则是数据所有权:城市日记、收藏、现场痕迹全部存在本机,可以一键清除,位置永远不离开手机。这条的来历可以说三层。
第一层是我的隐私洁癖。你想象一下有一个 App,它可以 real-time 拿你的 GPS 位置,并且可能上传到某个奇怪的服务器上。它是不是时时在监控我的位置?会不会把我的行踪卖给大公司或者广告商,然后疯狂给我推广告?或者说做一些更可怕的事情?推荐系统发展起来之后,隐私基本上随时被暴露、随时被拿去卖,我个人非常讨厌这一点。做一个重度依赖定位的 App,我自己就是那个最不放心的用户。
这个立场其实在 pivot 当天就写下来了。那个 session 里有一句现在看很有意思的话:
我这里也不想主打 AI,甚至不想加任何实时的 AI 交互,我自己是不愿意一个拥有高频开定位功能还能发信息给 AI 的 app
一个整天用 AI 写代码的人,坚决不在 App 里放实时 AI。这两件事在我这里毫不矛盾:AI 是我的生产工具,不是用户要付出隐私去喂的功能。
第二层很实际:省钱。数据全在本地,就没有服务器承压问题,scale 上去也不用担心账单。隐私原则和穷人架构,正好是同一个技术决定。
第三层是定位问题:我不太想用这个项目盈利,那我拿什么跟大公司的同类产品做差分?大公司做这种产品,为了商业价值,用户数据几乎一定会被用作商业用途。而「免费、无内购、数据不出手机」这套承诺,恰恰是个人开发者做得出、大公司做不出的。这更像是我自己的一些原则。
其实「免费」这个决定,还有一层完全现实的账,跟情怀没什么关系。
我们目前拿的是 H1B 工作签。这个身份下搞 side project 盈利,在税务和身份合规上是有实际风险的,当时我专门和 AI 讨论过一轮(具体结论就不在这儿当法律建议了,谁在这个处境谁懂)。所以最终干脆把它定位成 hobby project:免费,不收钱,也不承诺社区、订阅这些之后可能变成负担的东西,合规风险直接归零。
然后我又算了一下成本账,发现这个项目其实花不了什么钱:开发主要是在烧 Codex Plan 的 token,这个订阅我本来就会买,不用反而可惜了;Cloudflare 那边基本不花钱;App Store 开发者账号一年 99 刀,对我来说不算什么大支出,而且之后大概率还会做别的小项目,给老公他们做点 iOS 或 Mac 的小工具也能用同一个账号,摊下来更划算。
说实话,做到这个程度,收个买断价、甚至上个 subscription 都完全说得过去。不过最终觉得,反正也没怎么花钱,干脆放个福利吧。
接下来
pivot 之后,一切突然都顺了。通知文案怎么写、地图上放不放进度、要不要做成就系统,这些原来要纠结的问题都有了统一的判据。产品定位这个东西,与其说是想出来的,不如说是承认自己是什么样的用户之后,剩下的那个东西。
下一篇聊技术:iOS 只给每个 App 20 个 geofence 名额,怎么用它们覆盖一座城市。