平台背后 · 工程

四个应用。一套后端。
一名工程师。

Nibblify 是一套完整的外卖平台:顾客端应用、餐厅端应用、骑手端应用、运营后台、后端服务,以及一个 10 种语言的网站。这一切由一个人与前沿 AI 模型协作完成。我们把这套方法称为 vibe engineering。

300K+
手写代码行数
2,456
自 2025 年 11 月的提交数
6
个代码仓库,一个平台
1
名工程师在键盘前

方法

什么是 Vibe Engineering

Vibe engineering 不是「让 AI 随便写,然后祈祷」。它是一种分工:人负责意图、架构和最终判断;模型负责敲代码、记忆细节和写出第一稿;而代码仓库本身负责验证——测试、校验器和构建期检查,一旦出现偏差就会大声报错。

方向由人来定

每个功能都始于一个决定,而不是一句提示词:它要做什么、会碰哪些数据、绝对不能破坏什么。架构、数据模型和取舍始终由人掌握。我们从不问模型该做什么,只问已经定下的东西该怎么做。

模型写出第一稿

界面、控制器、数据迁移、翻译、测试——第一版几分钟就能出来,而不是几天。而它也只被当作第一版:逐行阅读,错的地方重写,跑偏了就整段扔掉。

仓库负责验证

没有任何东西是仅凭感觉上线的。296 个测试文件、安全规则测试套件、i18n 键值检查器、SEO 元数据审计和链接互引校验器都会扫过代码。当 AI 写的代码有问题时,机器会远早于用户发现它。

上下文被写下来

每个仓库都带着自己的架构说明——一份关于结构、约定和坑点的活地图。模型每次开工时就已经了解这套代码,这正是它们从「自动补全」变成真正协作者的原因。


协作者

三个模型,三种分工

每个模型都用在它最擅长的地方——不擅长的地方,则由另外两个来把关。

ChatGPT

打磨产品

产品思路、命名、面向用户的文案,以及关于「这个功能到底该是什么」的漫长讨论。Nibblify 的大多数界面,在成为代码之前,早就以对话的形式存在了。

Gemini

调研与第二意见

对 API、平台规则和应用商店政策的广泛调研,以及对另外两个模型产出的设计和代码的独立审阅。当两个模型意见相左时,这个分歧本身就是最有价值的信号。

Claude Code

负责动手的智能体

它直接在代码仓库里工作:通读整个代码库、跨数百个文件编写与重构、运行测试套件、修好自己弄坏的地方,然后提交。这 300,000 行代码的大部分都出自这里。


技术栈

它究竟是用什么写的

Dart 与 Flutter

≈ 173,000 行 · 650 个文件

四个应用共用一门语言和一套 UI 框架,因此 iOS、Android 和 Web 都出自同一份代码。基于 Dart 3.10 的 Flutter,搭配 Riverpod、Provider 和 go_router。

运行在 Cloud Functions 上的 JavaScript

≈ 25,500 行 · 238 个函数

运行在 Firebase Cloud Functions 上的 Node.js 负责订单、结算、骑手派单、个人数据的 AES-256 加密、GDPR 数据导出、推送通知,以及整个管理端 API。

Firebase 与 Firestore

1,119 行安全规则 · 47 个集合

Auth、Firestore、Storage、Messaging、Remote Config、App Check、Crashlytics 和 Analytics——每个集合都由手写的安全规则守护。数据库就是四个应用之间的契约。

HTML、CSS 与自研构建

≈ 19,300 行 · 200 个静态页面

本站是手写的 HTML 和 CSS 搭配 Tailwind,由一套 Node 构建脚本编译:它把每个页面渲染成 10 种语言,并自行生成 hreflang 标签、结构化数据、站点地图和图片变体。


数据

每一块,逐一统计

统计时间为 2026 年 8 月 2 日。已排除依赖库和机器生成的文件,因此这些都是真正为 Nibblify 写下的代码。

Nibblify Food

Dart · 69,600 行 · 269 个文件

顾客端应用:发现、地图探索、容错搜索、购物车、结算、实时订单追踪、评价和账户。版本 1.0.127,已上线 10 种语言。

Nibblify Partner

Dart · 41,700 行 · 140 个文件

餐厅端应用:菜单、优惠、营业时间、实时订单流、团队管理、结算和创作者计划。版本 1.0.74,已上线 10 种语言。

Nibblify Driver

Dart · 11,600 行 · 50 个文件

骑手端应用:上线接单、实时导航、送达凭证、收入与钱包。版本 1.0.45,专门做得足够轻量,能跑在骑手真正在用的低端手机上。

Nibblify Staff Portal

Flutter Web · 49,900 行 · 191 个文件

内部运营后台:餐厅审核、骑手证件与钱包、订单客服、实时地图、数据分析与监控——背后有 102 个仅限管理员的 Cloud Functions。

后端与安全

JavaScript · 25,500 行 · 238 个函数

Cloud Functions、Firestore 触发器和定时任务,另加 1,119 行覆盖 47 个集合的 Firestore 与 Storage 安全规则。

测试

Dart 与 JavaScript · 42,600 行

296 个 Dart 测试文件,加上基于模拟器的集成测试套件和安全规则测试。正是这张安全网,让 AI 写的代码可以放心上线。

翻译

36 份词典 · 57,300 行

26 个应用语言文件和 10 份网站词典,展开后还会生成 154,700 行 Dart 代码。阿拉伯语采用完整的从右到左布局,而不是事后随手镜像一下。

本网站

HTML、CSS、JS · 19,300 行 · 20 个页面

20 个源页面,经由自研 Node 构建渲染成 200 个本地化静态页面——不用任何框架,最终送到浏览器的 JavaScript 不到 250 行。

307,000
整个平台的手写代码行数

如果把这些翻译生成的本地化代码也算进去,几个仓库总共约有 463,000 行。


护栏

我们如何让 AI 写的代码保持诚实

先写下来

每个仓库都记录自己的架构,模型在写下第一行之前就知道这套代码是怎么运转的。

小而经过审阅的改动

是 2,456 次提交,而不是五十次。每个改动都小到足以让人在合入之前完整读一遍。

让机器检查机器

测试、翻译键值一致性、SEO 元数据审计和安全规则测试套件,会在每次改动上跑一遍。

先上线,再盯住

四个应用累计 255 个上架版本,崩溃报告和数据分析告诉我们真实发生了什么。


「模型没有取代工程,它们只是省去了敲键盘。剩下的,正是一直以来最难的部分——决定要做什么,并且确信它真的能用。」
Zakaryae Ait Ouamer · Nibblify Food 创始人兼 CEO

时间线

八个月,六个仓库

2025 年 11 月——第一次提交

Nibblify Food 起步于一个 Flutter 项目,背后是 Firebase 后端。

2025 年 12 月——餐厅这一侧

Nibblify Partner 启动,这个项目不再是一个应用,而成为一套系统。

2026 年 5 月——网站

一套自研的静态构建把网站渲染成 10 种语言,带 hreflang、结构化数据和逐页 SEO 审计。

2026 年 5 月——骑手与运营

Nibblify Driver、员工后台和一个共享后端仓库,在三周之内相继启动。

2026 年 8 月——获得 Le Mans Innovation 支持

平台进入全城试点,抵达勒芒时是经过验证的,而不是停留在纸面上。

查看合作详情 →

你也这样做东西吗?

我们在招好奇的人

如果以这样的速度交付、并且用测试把它们一一验证,正合你的工程口味,欢迎联系我们。