最近一直在用 Vibe Coding 的方式做一个全栈项目 goi。目前核心功能已经开发完毕,项目暂时进入封版维护阶段。这篇文章记录并复盘这段 Vibe Coding 旅程。
项目背景
goi 是一个面向个人使用的全栈管理系统。起初的想法很简单:做一个自己愿意长期使用的工具,同时也借此探索和实践当下流行的 “Vibe Coding”——在 AI 的深度辅助下完成编码开发。
这是一个典型的“利用下班后时间”完成的项目:每天下班回家花一点时间,推进 1–2 个小功能。虽然进度不快,但这种细水长流的节奏让我有足够的空间去思考架构,也能持续获得“看着项目一点点搭起来”的成就感。
Vibe Coding 体验
在这个项目中,我尝试了一种更激进的协作模式:以 AI 编写为主,人工经验为辅。
我更多扮演 “Reviewer” 与 “Architect” 的角色,而将 “Coder” 的工作几乎完全交给 AI。在开发过程中,我主要依据过往经验判断 AI 提出的设计方案是否合理。大多数情况下,只要方案逻辑自洽且符合最佳实践,我会采纳 AI 的建议,甚至直接让它执行代码修改。
在这种模式下,AI 不再只是补全代码的助手,而是实际的执行者:我负责“把关”,它负责“实现”。
工具形态上,我目前主要采用像 Trae 这样的编辑器 + AI 来完成项目开发;更“深一层”的终端式开发形态(例如 Claude 这类工具)我还没有真正实践,但已经能感受到趋势正在从“问答式写代码”转向“让 AI 直接在工程里动手”:围绕项目结构做修改、运行命令、迭代验证。
技术栈与架构
项目采用了 Monorepo 结构,统一管理前后端代码,方便类型共享和依赖管理。
- 工程化: Nx(基于
packages/contracts共享类型定义) - 后端: NestJS
apps/admin-api: 管理后台 APIapps/app-api: 用户端 API- 数据库: PostgreSQL + Redis
- ORM: Drizzle ORM
- 前端: React + Vite
apps/admin: 管理后台 (SPA)- 负责系统权限与应用管理
- 技术栈: TanStack Router + Ant Design
apps/app: 用户端 (SSR)- 面向个人的核心业务应用
- 技术栈: TanStack Start + shadcn/ui + Tailwind CSS

功能概览
虽然整体节奏是“小步快跑”,但经过一段时间的积累,goi 已经具备较为完整的核心功能。
用户端 (App)
用户端主要面向个人用户,专注于日常数据的记录与查看。
- 多账本/空间: 支持创建和切换不同的账本空间,实现数据隔离。
- 数据记录: 快速记录日常数据,支持自定义分类与标签管理。
管理后台 (Admin)
管理后台是整个系统的控制中枢,负责对 ToC 核心数据进行配置与管理。
- RBAC 权限系统: 基于角色的权限控制,精细到按钮级别的权限管理,确保数据安全。
- 系统模块配置: 动态配置 App 端的菜单结构与功能模块,无需发版即可调整 ToC 功能。
- 用户与角色管理: 统一管理所有用户及其角色分配,控制不同用户的访问权限。
研发历程与挑战
项目的开发过程并非一帆风顺,中间经历了多次重构与工程化调整。
关键里程碑
项目起步于一个简单的单体全栈应用:我先构建了基于 NestJS 的权限管理基础,打通前后端流程;随后进入业务开发,完成核心功能设计并进行小规模迭代。随着复杂度增加,单一应用的架构逐渐显得力不从心。为了更好的扩展性与维护性,我引入 Nx 做工程化重构,将 Admin 管理端与 ToC 用户端业务拆分,最终形成了现在的 Monorepo 架构。
工程化踩坑
这个项目耗时较长的一个主要原因,是在工程化探索上走了不少弯路,特别是在 packages 的拆分与构建上。
最初我尝试了 源码直接引用 的模式:packages 下的代码不做打包,仅做类型检查,通过多入口导出来实现代码隔离。但随着项目复杂度增加,问题接踵而至:
- 多入口管理混乱:对外暴露多个入口在实际使用中非常麻烦,最终还是回归到了统一输出。
- 构建产物发散:在 Node 项目中,源码引用导致
dist难以收敛,容易把 Workspace 下的冗余代码也打包进去。 - 模块规范冲突:从
nodemon切换到nestjs/cli后,发现其对 ESM 的支持不够理想。
最终我确立了 “Build First” 的策略:公共包先构建再引用。构建工具也从 tsc 升级到 Rslib 以提升性能,配合自定义的 Nx Scripts 与 Biome/Prettier 工具链,最终落地了一套稳定高效的工程化体系。
Vibe Coding 经验总结
在使用 AI 辅助编程的过程中,我也总结出了一些心得:
- 顺风局(AI 状态好):直接通过自然语言指令让 AI 修改代码,效率极高。
- 逆风局(AI 降智):发现 AI 逻辑混乱或反复出错时,立刻停止编码。优先把方案讨论清楚,形成可执行的文档约束,再让 AI 严格按文档落地。
- 知识盲区(新库/冷门库):这是在完成架构后迭代具体功能时遇到的主要痛点。遇到较新、示例稀缺的库时,AI 往往因为训练样本不足而输出质量不稳定。这时必须人工强力介入,回归传统的“查文档 + 手写”模式。
总结
通过 goi 这个项目,我更直观地体会到了 Vibe Coding 带来的效率提升:它让我能把更多精力放在业务逻辑与产品设计上,而不是被繁琐的实现细节所束缚。
虽然每天只做一点点,但聚沙成塔,现在的 goi 已经是一个功能完备的全栈应用了。
至此,goi 项目暂时告一段落。作为一个探索性质的项目,它已经完成了它的使命:验证了 Vibe Coding 在全栈开发中的可行性与高效性。只是这次旅程带来的不止兴奋,更多时候是一种焦虑与迷茫——当 AI 能替我写下越来越多代码时,我也会反复追问:如果它真的能代替我,我还能做什么?未来又该往哪里走?