最近做了一款 App,作为自己的业余项目,尝试性地发布到了海外贴吧 Reddit 上,没想到很快获得了接近 400 点赞,以及许多的评论和私信。
其实 App 本身不复杂,名字叫 Roam FM,是一款常驻在 Mac 菜单栏的电台工具,
只不过,它是一个主打随机漫游的电台。每一次点击,都会带你随机降落到世界的某个角落,3D 地球也会同步转动,将目的地置于视野中心,让你能直观感知到电台的位置。
可能,上一刻还在中东聆听阿拉伯式的吟唱,下一刻就来到了非洲腹地,热闹奔放,又或者刚穿越到东南亚接受热带气息的洗礼,转眼间,耳边又响起了激情昂扬的朝鲜电台。
这大概就是我心目中,漫游世界的一种具体的模样。

作为一次小小的里程碑,我决定记录一下这次工具的从 0 到 1,就是那种,虽然没有人感兴趣,但我可以自发声的硬分享,哈哈哈。
过时的电台,依然眷念
这是一个俗套的故事,但我确实非常喜欢电台。因为受不了传统广播里深夜越来越多卖药广告的尴尬,2014 年我把收音机留在了老家。直到前两年,我发现了 Radio Garden,一个可以在地球上收听全世界电台的网站。它是 Roam FM 最早的启蒙,虽然只能在浏览器上手动点选,但那种探索世界声音的乐趣,令人着迷。

Nas 里的意外产物

有一段时间,我特别沉迷折腾家里的 NAS,搭建各种工具,比如之前分享的让特斯拉行程无缝接入日历。
后来,为了替代滴答清单的专注计时,我又自己在 Docker 里「造」了一个轮子。并且,我给它设计了两种背景音:一种是常规的白噪音,如雨声、咖啡馆噪音;另一种则是随机电台,这也是 Roam FM 最早的雏形。我挑选了大约 100 个非中文电台,每次点击随机播放,只显示名字和国家。
结果没想到,这个「副产品」竟然比专注计时更深得我心。
于是,我让它在 Nas 里继续「内测」了一两个月。期间,不断打磨那些看似简单的随机规则,并扩充了更多电台。它逐渐从一个简陋的脚本变得有血有肉,直到我决定把它从 Nas 里真正孵化出来。
100% 的 AI 编程
坦白说,作为一个不会写代码的产品经理,公开承认「这是 AI 编程的作品」需要一点勇气。毕竟在很多人眼里,AI 写的代码往往约等于「玩具」。但好在,Roam FM 本身就是一款主打陪伴与氛围的「玩具」,这反而让我少了不少心理包袱。
回顾整个开发过程,除了核心的电台功能不涉及 AI 技术外,App 和落地页的代码 100% 由 AI 撰写。期间我又试了一遍 Cursor、Windsurf,最终在 Claude Code 上完成了全部工作。一点经验分享:纯新手的话,仍然建议从 Cursor 开始,有一定经验的新手,Claude Code 才勉强适合,毕竟后者还是有很高的门槛,不够开箱即用。
设计方面,可能和很多人的直觉不一样,这个 App 没有设计稿,甚至没有原型图。得益于 Apple 平台完善的设计规范,我只需要把脑子里的需求描述给 AI,然后边做边改就可以了。唯独,让 Lovart 和 Nano Banano 来生成产品 Logo,怎么都差点意思,最后还是找了设计师朋友帮忙。
至于文案和多语言,基本是我提供骨架,AI 填充血肉。Roam FM 目前支持简中、繁中、英、日、德五种语言,专门加了德语,是因为后台数据显示德国付费用户出人意料是最多的。
甚至,连最繁琐的 App Store Connect 提审流程,也是我截图发给 AI,让它一步步教我填完的。
当然,过程并非一帆风顺。正如那句名言所说:The first draft of anything is shit。
现在回看,第一版是真的丑。

一次未竟的「上架」
等到写完代码,挑战才算真正开始。
原本以为,这一次至少验证了技术可行性,没有过不去的阻碍,会比上一个死在 Demo 验证阶段的想法要好,但没想到卡在了提审这最后一步。先是被复杂的后台绕晕了,后来是直接被拒审,直到现在还是。
这个时候,不能只是与 AI 聊天了,我还找了好几个身边的开发者朋友,以及写信给类似产品但成功上架的海外开发者。综合盘点下来,App Store 是人工审核,而且政策不算透明,Roam FM 又与电台有关,这就让审核变成了一个运气,有的可以,有的就是不行。
这算是最大的遗憾了。最初的设想是,Roam FM 要覆盖全平台,尤其是 iPad 版本,因为在 iPad 里的 Roam FM 才更像实体的全球收音机,还有一个可以在手上把玩的地球仪。
好在,天无绝人之路,我在备选方案里找到了 Gumroad。这个应该是我能找到的开发成本最低、靠激活码完成软件售卖与激活的第三方服务了,不需要额外的后台建设。不过,如果有其他更好的选择,欢迎推荐。
虽然缺失了 App Store,但在苹果平台打包认证也需要苹果开发者账号,不算亏。
最后
无论如何,这款小玩具终于和大家见面了。
官网在这里:https://roamfm.app/
如果它能在某个时刻,带你逃离片刻的喧嚣,去地球的另一端发发呆,那这就足够了。祝你在随机的漫游中,与那个能让你停下来的声音不期而遇……