Skip to content

Renewly:用 Codex 尝试从零搭建一个订阅管理 Mobile Web 项目

Jamie Liu
Published date:
Edit this post

我尝试新的方式,从头开始让 codex 搭建一个订阅管理的 mobile web app,因为苹果开发者年费昂贵的原因,在没有好的能变现的 app 之前,还是不打算上 apple app store

Table of contents

Open Table of contents

Renewly 项目背景

  1. 这是一个订阅管理 app ,可以实现订阅的管理、按周期进行费用统计、设置;
  2. 我在 apple app store 上找了一个我认为 ui 很好看的订阅管理应用,我对 app 的页面进行了截图,作为竞品图片;
  3. 一切都让 ChatGPT5.4 从头开始规划,告诉它我会让 ai 去执行它做的规划;
  4. 使用 5.3-CodeX 执行代码修改,每一步的结果都复制给 ChatGPT ,让它指挥给出指令文案,复制给 Codex 去执行,Codex 使用了 计划模式
  5. Codex 未使用任何 Skill

第一步:制定规范文档

我先使用 Vite + React + pnpm + Tailwind v4 + shadcn 初始化好了项目,然后使用 ChatGPT 告诉它我的项目是个订阅管理 mobile web app,询问它我第一步应该干嘛,并提供了参考应用的截图,告诉它尽量模仿和还原,它的回答片段如下:

你不需要写那种大而全、给老板看的 PRD。
你需要的是一份给 AI 和开发执行的“实施型 PRD / UI 实现规范”。

你现在最该写的,不是一份文档,而是 4 份东西
1)产品实施 PRD
2)UI 还原规范
3)组件规范 / 前端架构说明
4)验收标准文档

结合你当前阶段,我建议的开发顺序

不要直接上业务逻辑。
先按这个顺序推进:

第一阶段

...

第五阶段

最后再做数据接入、存储、提醒逻辑

最后给你一个最实用的结论

你下一步最合理的动作不是立刻写代码,而是先产出这 3 份文件:

docs/renewly-mvp-prd.md
docs/renewly-ui-spec.md
docs/renewly-component-architecture.md

这三份比单独一份 PRD 更有用。

然后我就直接让它给我提供了这三份文档,由于考虑到项目功能还算多,ChatGPT 也列出了计划大纲,我就让它给我生成五份执行计划。

阶段一:文档约束与实施基线
阶段二:基础设计代币与通用组件脚手架
阶段三:核心页面静态还原
阶段四:数据接入、本地存储与核心交互闭环
阶段五:交互收口、视觉微调与最终验收

我大概看了眼计划概要,担心它设计后端 api 接入的方式,我虽然知道使用本地浏览器是无法同步甚至容易丢失数据的,但是初步 demo 我还是想让它使用浏览器本地缓存来做,于是我提问:“关于你给的这五个阶段执行计划,是否有数据存储方案的设计”

- 有设计

- 但目前属于阶段计划里的“存储实施提纲”

- 还没有形成一份独立、足够约束 AI 的存储设计文档

- 建议现在就补

  Renewly 数据存储方案设计文档 `docs/renewly-data-storage-design.md`

第二步:执行计划

我告诉 ChatGPT 我将要让 ai 开始执行计划,请它给一段描述文字给我通知 ai 开始执行计划,这里 codex 我使用了 计划模式,之前我一直没有尝试,使用后发现类似我让它给我一个实施清单一样,先给出计划,再询问你是否执行。

每个阶段完成后,我都将 codex 执行完的落实结果,复制给 ChatGPT ,然后它会给我下一阶段的执行命令文案。

在第一阶段执行后,codex 按计划生成了一个 plans/renewly-phase-1-baseline-lock.md

**2. 基线文档(唯一事实源)** 

以下 5 份文档已锁定为后续开发唯一事实源:

1. `docs/renewly-mvp-prd.md`

2. `docs/renewly-ui-spec.md`

3. `docs/renewly-component-architecture.md`

4. `docs/renewly-data-storage-design.md`

5. `plans/renewly-phase-1-plan.md`

   执行约束:

- 后续实现必须先阅读以上文档再开发。

- 如发生冲突,以本清单中的基线决议为准,并回写文档统一口径。

**3. 阶段范围锁定** 

**4. 路由与组件优先级锁定(供 Phase 2 执行)** 

里面相当于一个针对整个项目读取后总结的执行原则,后期 ChatGPT 给的命令文案,都会将这 5 个文件带上,提醒 codex 去读取

第三步:收口

完成所有执行计划后,ChatGPT 列了两个后续计划:

  1. 部署前收口

  2. 第二期规划

我继续让它做 部署前收口 ,打算这一步之后,预览效果。

这里 codex 询问了我部署方式的选择 Vercel / Netlify / Nginx 的部署配置 ,我这里让 ChatGPT 生成了我先本地预览的命令:


本轮先不要生成 Vercel / Netlify / Nginx 的专属部署配置。

原因:

* 我当前只是本地通过 `pnpm dev` 预览
* 后续目标部署平台是 Cloudflare
* 本轮只需要做平台无关的部署前收口,不绑定具体托管商

请调整为以下范围:

1. 不生成 Vercel / Netlify / Nginx 专属配置文件
2. 只检查和整理与静态部署通用相关的内容:

   * `pnpm build` 产物是否正常
   * Vite 静态资源路径是否合理
   * SPA 路由回退需求是否明确
   * README 中补充本地运行、构建、静态部署说明
   * 输出一份“Cloudflare 后续部署时需要注意的要点”,但本轮不真正接入 Cloudflare 配置
3. 当前验收以本地开发预览和生产构建可用为主
4. 本轮不要引入任何和具体托管平台绑定的额外实现

codex 询问了应用部署在根目录 / 还是二级目录 /renewly 的问题,我有点疑惑,不应该是 /dist 部署吗,ChatGPT 给我的解释是,如果是单独域名或者二级域名,就选根目录,这是在询问我项目 base path 的问题

第四步:预览

收口完成后,codex 建议我跑一次 pnpm preview 来验证生产预览启动是否正常。

报错了


installHook.js:1 The result of getSnapshot should be cached to avoid an infinite loop

Uncaught Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

页面闪一下变成白屏,尝试截图给 codex 修复,修复成功后,我看了预览效果,给出以下分数:

  1. 颜色还原度 80%
  2. 结构还原度 80%
  3. 样式还原度 50% ,差强人意,字体大小粗细很违和,圆角都不对,不知道是不是图片不能识别的很好,阴影也不对
  4. 图表等复杂组件还原度 30%
  5. 表单组件操作反馈还原 0%,都是原始表单
  6. 没有任何动效
  7. 很多功能可能是因为没有截取操作后的效果,比如修改密码,功能都没有实现

第五步:初步使用总结

初步结论:

  1. 给参考图片后,codex 能很好的还原颜色和结构,但是字体大小、粗细、圆角、阴影这些细节差强人意
  2. 作为一个有参考图的开发结果,我认为比没有参考图得到的好很多,细节可以再调优,页面结构和共用组件的规范设计,让后期很多东西很好调整
  3. 本轮没有使用任何前端 ui/ux skill,后续有机会可以试试使用后的差别
  4. 表单没有制定提交规则,使用体验很差
  5. 依然会形成卡片套卡片的设计,这在我使用 codex 开发没有非常细节的约束前端时,多个项目出现这种现象

思考

关联

针对这个实验,需要逐个的分析 ai 给出的文档或者计划产物的详细内容。

  1. Renewly:V0版本产物《Renewly MVP 实施型 PRD》的分析
Previous
修改注册表的方式永久试用typora
Next
Renewly:V0版本产物《Renewly MVP 实施型 PRD》的分析