Lyker 上线了,然后呢?
拖更了一段时间。这次能写出来,全靠 git log 和 Obsidian 帮我回忆这两个月做了什么。
一、冲刺
5月中旬流感康复后,第一件事是补上内购。RevenueCat 的 Test Store 环境和生产环境存在差异,调试花了一些时间。
调试内购其实不麻烦,就是 RC 的后台配置比较繁琐,还有自己定义的嵌套产品分类概念。只要配置过一次,后续照猫画虎就行。剩下的就是等 App Store Connect 那边审核商品。
5月25日左右,做了一个决定——把 MVP 相关的品牌标识清理掉。”MVP Beta”这个标签在上线前被去掉了。同一时间,弄好了苹果的 ATS 限制,后端切到了 HTTPS。
二、账号体系
6月初发现一个尴尬的事:App 可以识别食物、生成食谱、聊 AI 了,但用户登录体系太简单,并且注册没有做限制。
接下来一周多,从零补了一套完善的账号体系:
- 邮箱注册 + 验证码(接入了 Resend 邮件服务)
- 手机号注册(SMS 验证)
- Apple 登录
- lyker_id(用户的公开标识,替代内部 user_id)
- 账号删除功能(合规需求)
前后端加起来三十多次提交,才让”登录”这两个字在屏幕上正常工作。
三、数据迁移——比想象中重
Lyker 的食谱数据从旧的测试食谱库迁移到了新库。这不是单纯的复制数据,涉及 fork-on-edit 模式、图片上云存储、首页 Feed 接口重写、搜索结果全部重新对齐。
第一步是数据清洗。新库的表要完整落库,前提是数据经过清洗过滤,图片上云存储。对于数据不完整、清洗过程出异常的,标注出来手动处理。 其次,接口字段对齐,梳理前端用到的字段以及新表现有的字段,看哪些可以直接映射过去,哪些无法映射或者没有。 最后涉及到联表查询,修改过的前端路径都要测试一遍。 测试完成后,将所有 SQL 归档,迁移完成。
另外还顺便对 AI 的 system prompt 重构成 6 段结构化格式,加入了 recipe context 注入和 probe 检测——防止用户套出 AI 的底层 prompt。
四、相机——原生重写
相机模块从零写了一个原生 CameraPlugin,原因是调研的开源方案都不支持预览,原先在工程内的实现写的是 web 端兼容的方案。上线前还重做了识别结果页,两张 UI 适配 iOS 26 的 flat design。为了流畅度加了图片压缩、loading 遮罩、耗时打点。(因为刚好电脑升级了一下系统,顺便把 Lyker 的 UI 也调整了一下)
后端这边同步改进了识别链路:二分类判断是不是食物、注入食材上下文、加 timing log 找瓶颈等。
五、上线日
上线那天还是挺顺利的,第一次因为没有添加注销按钮给我打回来了。增加了一个注销按钮,并附上了截图。后续再审核,在指定时间内顺利的就通过了。
六、然后呢?
上线后并没有”用户自然涌来”这件事。
6月下旬的两件大事:一是把落地页(lyker.zerora.cn)写好部署了,在上架前夕的空挡我就预热了;二是在做小红书内容写一写为什么做这个 App。
上线第一周,数据不算乐观。但有大学室友朋友支持。虽然没有埋点追溯,但根据直接找我讨论的情况和账号数据,应该来自私域的比较多。
目前的时间在做了日历页和健康报告——也就是”吃即录入”的思路落地。
七、尾声
从5月12日说”延期了”,到6月中旬真的上线,再到现在——不上不下的中间状态。Lyker 不是那种一上线就爆的产品。但我清楚,如果选了那条确定的路,我可能不会像现在这么投入。真正的乐趣在于创造。
一个人开发的产品,自己应该是它的第一个真实用户。如果自己都不愿意用,这个产品也就那个样子了。 所以在它上线后,我也在时不时的问自己,到底想把 Lyker 打磨成什么样的产品。路还长,不急。