不会编程也能做应用:我用 Vibe Coding 完成了从 0 到上线

0 行代码,做出完整应用。

我只上了 15 节 Vibe Coding 课。

登录、数据库、天气、AI,全有。

最后还拿到了公开访问网址。

而半年前,我连文件夹都分不清。

下面是我的完整实战过程。

【先换角色】

很多人学编程的第一步,就是去背 HTML、CSS、JavaScript。

这可能正是他们放弃的原因。

2023 年之后,AI 编程工具开始改变开发方式。普通人的任务,不再是独自把代码全部写出来,而是完成三件事:

  1. 决定做什么
  2. 用自然语言告诉 AI
  3. 检查结果是否符合预期

我后来才明白,做 AI 应用更像拍电影。

我负责提出需求、判断效果和调整方向;AI负责完成具体实现。

这就是所谓的“氛围编程”,也就是 Vibe Coding。

它不是完全不思考,更不是随便说一句“帮我做个应用”就能成功。

它真正降低的是代码书写门槛,却把另一种能力变得更重要:

你能不能把脑子里的想法说清楚。

我最开始学到的提示词模板只有四句话:

你是一名〇〇。 我是△△。 我想完成□□。 请按照☆☆的风格和条件完成。

例如:

你是一名专业的 Web 设计师。 我是一个完全不懂编程的初学者。 我想制作一个面向爱猫人士的个人介绍网站。 请采用可爱但简洁的设计风格。

没有复杂术语,也不需要先学编程语法。

但这四句话已经包含了最基础的四个要素:

角色、背景、目标、条件。

【补电脑课】

我原本以为,第一节实操课会直接教我生成应用。

结果老师先讲了文件、文件夹、扩展名和路径。

当时我觉得这些东西太基础,后来才发现,零基础学习 AI 编程最容易卡住的地方,往往不是代码,而是电脑基础。

你至少要知道:

文件:一张数字化的纸 文件夹:存放文件的抽屉 扩展名:文件类型的标签 路径:文件在电脑里的具体地址

开发中最常见的扩展名包括:

.html 网页结构 .css 页面样式 .js 页面交互 .tsx React 组件 .md Markdown 文档 .env 环境变量

Mac 的路径可能是:

/Users/name/Desktop/myapp/index.html

Windows 的路径可能是:

C:\Users\name\Desktop\myapp\index.html

这些知识看起来很琐碎。

但当你告诉 AI“修改这个文件”时,如果连文件在哪里、叫什么、属于哪个项目都说不清,AI也很难准确处理。

所以我给零基础学习者的第一个建议不是安装十几个工具,而是先做一个小练习:

在桌面创建 test 文件夹。 在里面创建 memo.txt。 找到这个文件的完整路径。

这一步很无聊,却能避开后面大量低级错误。

【第一次运行】

最开始,我只使用 Gemini 和系统自带的文本编辑器。

我给 Gemini 的第一个完整需求,是制作一个“猫语翻译机”:

我想制作一个“猫语翻译机”。 功能: - 点击按钮后,随机显示一种猫语,例如“喵”“呼噜”“哈气” - 这是一个娱乐应用,整体效果可以夸张、有趣 设计: - 采用宇宙飞船驾驶舱风格 - 背景偏暗 - 按钮带有发光效果 请使用 HTML、CSS 和 JavaScript, 把所有代码写进一个 index.html 文件。

Gemini 生成代码后,我完成了四个动作:

复制代码 粘贴到文本编辑器 保存为 index.html 用浏览器打开

网页真的运行了。

按钮可以点击,页面有动画,猫语也会随机变化。

更重要的是,我没有先学习如何写 JavaScript。

我只需要继续告诉 AI:

按钮太小,请放大。 背景太黑,请增加一些紫色。 猫语文字请加粗,并放在页面中央。

每修改一次,我就重新复制代码、粘贴、保存、刷新浏览器。

这个流程证明了一件事:

自然语言真的可以转化成可运行的软件。

但它也暴露了一个问题。

当修改次数越来越多时,“复制—粘贴—保存—刷新”会变得非常低效。

所以第五节课,我们开始使用真正的开发编辑器。

【进入编辑器】

编辑器可以理解为专门处理代码的工作台。

课程中介绍了三种选择:

VS Code:免费,扩展丰富 Cursor:AI 编程功能完整 Antigravity:内置 Gemini,适合跟随课程操作

具体选哪一个并不是重点。

真正重要的变化是:AI开始直接进入项目文件。

过去的流程是:

AI 生成代码 复制代码 粘贴进文件 手动保存 打开浏览器 刷新查看

进入 AI 编辑器后,流程变成:

告诉 AI 要做什么 AI 创建文件 AI 修改代码 预览自动更新

例如,我只需要说:

请创建一个 index.html 文件。 页面中央显示“Hello World”。 采用简洁的深色设计。

AI会直接创建文件并写入代码。

我接着说:

把标题改成渐变文字。 增加一个按钮。 点击按钮后显示欢迎信息。

它会继续修改原文件。

这才是 Vibe Coding 真正高效的地方:

我不再负责搬运代码,而是持续描述结果。

【先留后路】

第六节课开始学习 Git 和 GitHub。

这两个名字很容易把初学者吓退,但最简单的理解方式是:

Git:游戏存档系统 GitHub:云端存档仓库

假设我一天进行了三次修改:

09:00 完成首页 12:00 增加登录功能 18:00 修改整体设计

如果晚上发现设计改坏了,我可以回到中午的版本。

这就是 Git 的核心价值。

一次标准保存通常包含三个动作:

选择要保存的修改 填写本次修改说明 创建一次 Commit

好的 Commit 信息应该说明发生了什么:

增加登录页面 接入 Supabase 修复移动端按钮错位

而不是:

修改 更新 测试

当本地代码上传到 GitHub 后,即使电脑损坏,项目依然存在。

但这里有一个必须记住的安全规则:

绝对不要把 API 密钥直接上传到 GitHub。

我把密钥保存在 .env 文件中,再把 .env 写入 .gitignore:

.env

这样 Git 会自动忽略它。

你可以把 API 密钥理解成银行卡密码。

代码可以公开,密码不能公开。

【理解三层】

到了第七节课,我才开始真正理解网页的三层结构:

HTML:页面里有什么 CSS:这些东西长什么样 JavaScript:用户操作后会发生什么

可以把网页想象成一栋房子:

HTML 是墙、门和房间 CSS 是颜色、家具和装修 JavaScript 是电灯、水管和门铃

我不需要背下所有语法,但必须知道每一层负责什么。

因为下面两种指令的效果差距很大:

帮我把网页改好看一点。

和:

保留现有 HTML 结构。 重新调整 CSS 的字体、间距和卡片阴影。 不要修改 JavaScript 交互逻辑。

第二种指令更准确,因为我知道问题出在哪一层。

这也是 AI 编程中一个很反常识的事实:

不需要成为专业程序员,但需要掌握足够的概念,才能判断 AI 有没有做错。

【开始拼应用】

第八节到第十一节,我们开始接触真正的 Web 应用结构。

我先用 v0 生成界面,再通过 React 和 Next.js 组织页面,接着使用 Supabase 保存数据和处理用户登录。

这几个工具分别解决不同问题:

v0:生成界面 React:把界面拆成可重复使用的组件 Next.js:管理页面、路由和服务端功能 Supabase:存储数据和处理用户身份

React 的核心概念是组件。

一个按钮、导航栏、任务卡片,都可以做成独立组件。

它就像乐高积木:先做好零件,再把零件拼成完整应用。

我不需要亲手写组件,只需要告诉 AI:

创建一个 Button.tsx 组件。 按钮文字通过 Props 传入。 支持 primary 和 secondary 两种样式。 点击事件由父组件传入。

这里的 Props,可以理解为父组件传给子组件的参数。

State 则是页面会自动追踪的状态。

例如计数器从 0 变成 1 后,React 会自动更新页面,而不需要手动刷新。

AI会写代码,但我至少要知道:

Props:组件接收的数据 State:会引起页面更新的数据 Server Component:在服务器运行 Client Component:在浏览器运行

如果组件需要点击事件或 useState,通常需要在文件顶部添加:

"use client";

我不必背所有规则,但看到错误时,至少知道应该往哪个方向检查。

【数据进云端】

普通网页刷新后,很多数据会消失。

所以第十节课开始学习数据存储。

我用三个比喻理解数据保存:

State:握在手里的东西,刷新就没了 LocalStorage:放进口袋,只保存在当前设备 云数据库:存进银行,不同设备都能访问

Supabase 可以理解为一个带 API 的在线数据库。

它的基本结构很像表格:

Table:一张表 Column:字段 Row:一条数据

例如一个待办事项表,可以包含:

id task_name completed user_id created_at

我甚至不需要自己写 SQL。

我可以直接告诉 Supabase 的 AI SQL 工具:

请创建一张 Todo 应用使用的数据表。 字段包括: - 任务名称,text 类型 - 是否完成,boolean 类型 - 用户 ID - 创建时间,timestamp 类型

然后再告诉编辑器里的 AI:

删除原来的 LocalStorage 方案。 改为通过 Supabase 完成数据的新增、查询、修改和删除。 连接信息从环境变量读取。

完成后,我在电脑上添加任务,手机端也能看到。

这意味着它已经不再是一个单机网页,而是一个真正连接云数据库的应用。

【增加登录】

数据保存下来后,新的问题出现了:

如果所有用户都能看到同一批数据,这个应用依然不能真正使用。

所以第十一节课,我们加入了登录和数据隔离。

Supabase 支持通过邮件链接登录:

用户输入邮箱 系统发送登录链接 用户点击链接 完成身份验证

不需要记密码,也能快速完成开发测试。

但登录界面只是第一层。

真正决定用户能看到哪些数据的,是 RLS,也就是行级安全规则。

它的作用是:

A 用户只能读取自己的数据 B 用户只能读取自己的数据 两人的数据互相不可见

我通过两个浏览器窗口测试:

普通窗口登录账号 A,创建一条任务。 无痕窗口登录账号 B。 检查账号 B 是否看不到账号 A 的任务。

只有完成这项测试,我才确认数据隔离真正生效。

这一步也让我明白:

“页面看起来需要登录”和“数据库真的安全”,完全是两回事。

【接入外部能力】

第十二节和第十三节,我们先接入天气 API,再把 Gemini API 放进应用。

API 可以理解为餐厅服务员:

应用提出请求 API 把请求交给服务器 服务器返回数据 API 再把结果交给应用

我先使用 Open-Meteo 获取天气数据。

例如:

https://api.open-meteo.com/v1/forecast?latitude=35.689&longitude=139.691&current_weather=true

接口会返回 JSON 数据:

{ "current_weather": { "temperature": 15.5, "weathercode": 0 } }

我接着告诉 AI:

创建一个 Weather 组件。 调用 Open-Meteo API 获取当前天气。 显示温度和天气状态。 如果下雨,在任务列表顶部显示“记得带伞”。 这条提醒不要写入数据库。

应用开始根据外部数据自动改变界面。

之后,我又接入 Gemini API,让 AI读取当前任务列表并给出建议。

提示词结构是:

你是一名行动教练。 请阅读下面的任务列表。 找出最应该优先完成的一项。 给出一条具体建议。 回答不超过 100 字。

当我需要让程序直接处理 AI 输出时,我会要求它只返回 JSON:

请把下面的目标拆成可以执行的任务。 只返回 JSON,不要添加解释。 格式: [ { "task": "任务内容", "priority": 1 } ]

AI的回答不再只是一段给人阅读的文字,而是可以直接写入任务列表的数据。

这一步,才让 AI从聊天工具变成应用内部的一项功能。

【八步流程】

前十三节课教我各种工具。

第十四节课,才把这些工具串成一套完整的开发方法。

我最终固定使用下面八步:

1. Start 打开 AI 编辑器,建立项目文件夹 2. Base 创建 Next.js 项目,先保证基础页面可以运行 3. DB 连接 Supabase,提前建立数据表和身份验证 4. Plan 明确用户、问题、核心功能和 MVP 边界 5. Research 让 AI检查技术风险、成本和替代方案 6. Ticket 把功能拆成足够小的任务 7. Build 一次只完成一个任务,并立即测试 8. Finish 检查缺失功能、错误、安全问题和部署配置

最关键的不是“让 AI一次把应用做完”,而是把任务拆小。

我一直使用下面这段提示词:

请根据已经确认的需求,把实现过程拆成细小的任务列表。 每个任务最多包含: - 修改一个文件 或 - 完成一个独立功能 请按照下面的格式输出: - [ ] Task 1:创建首页 UI - [ ] Task 2:配置 Supabase 连接 - [ ] Task 3:实现用户登录 - [ ] Task 4:实现任务新增功能 请持续维护这份任务列表。 当我说“下一步”时,只执行一个尚未完成的任务。 完成后,把对应的 [ ] 改成 [x]。 不要提前执行后续任务。

这段提示词解决了 AI 编程最常见的问题:

一次改太多文件 前后逻辑冲突 忘记原始需求 错误叠加后无法定位

AI不怕任务多。

AI怕的是目标模糊、边界不清、一次要求太多。

【别迷信 AI】

最后一节课,我重新学习了 React、Next.js、Git 分支和部署原理。

原因很简单:

AI会犯错。

它可能引用不存在的函数,混淆框架版本,重复创建文件,也可能为了修复一个错误,引入三个新错误。

所以我开始要求 AI在修改前先解释:

这个错误出现在哪个文件? 根本原因是什么? 你准备修改哪些地方? 是否会影响其他功能?

修改完成后,我再让它检查:

请对照原始需求检查当前项目。 列出: - 未完成的功能 - 可能存在的错误 - 安全风险 - 移动端问题 - 部署前必须处理的事项 不要直接修改,先输出检查结果。

我也开始使用 Git 分支测试新功能。

可以把分支理解成平行世界:

main:稳定版本 feature/login:登录功能实验 feature/new-design:新设计实验

实验成功后再合并进 main。

实验失败,直接删除分支,不影响稳定版本。

这比让 AI直接在主项目里连续大改安全得多。

【最后上线】

应用在本地运行,只代表我自己能访问。

只有部署之后,其他人才可以通过网址打开。

我的发布链路是:

本地编辑器:开发应用 GitHub:保存代码 Vercel:自动构建并发布

我把 GitHub 项目导入 Vercel,再单独填写环境变量。

这里是初学者最容易踩的坑:

本地能运行,Vercel 上却报错,很多时候不是代码问题,而是环境变量没有配置。

.env 不应该上传到 GitHub。

但 Vercel 仍然需要这些变量,所以必须在项目后台单独填写。

完成部署后,我得到了一个类似下面的网址:

https://my-vibe-app.vercel.app

之后每次更新,只需要:

本地修改 创建 Commit Push 到 GitHub Vercel 自动重新发布

我不用重新上传压缩包,也不用手动替换服务器文件。

到这里,一个文科零基础学习者,已经完成了整套 Web 应用开发链路:

需求 设计 前端 数据库 登录 API AI 版本管理 测试 部署

📌【保存清单】

零基础开始 Vibe Coding,不要一上来同时学习所有技术。

按照这个顺序走:

第 1 阶段:学会描述 明确用户、问题、功能和风格 第 2 阶段:补电脑基础 理解文件、文件夹、路径、扩展名 第 3 阶段:做单文件网页 用 HTML、CSS、JavaScript 跑通第一个作品 第 4 阶段:进入 AI 编辑器 停止反复复制代码,让 AI直接修改项目 第 5 阶段:学习版本管理 每完成一个功能就 Commit,密钥永远不上传 第 6 阶段:理解 Web 结构 知道 HTML、CSS、JavaScript、React 分别负责什么 第 7 阶段:接入数据库和登录 用 Supabase 保存数据,通过 RLS 隔离用户 第 8 阶段:接入 API 和 AI 先处理固定数据,再处理 AI生成结果 第 9 阶段:拆分任务 一次只让 AI完成一个文件或一个功能 第 10 阶段:部署上线 GitHub 保存代码,Vercel 自动发布

同时记住 5 条规则:

不要让 AI一次完成整个应用。 不要在没有 Commit 的情况下大改代码。 不要把 API 密钥上传到 GitHub。 不要只看页面效果,必须测试数据权限。 不要完全相信 AI生成的代码。

半年前,我以为做一个带登录、数据库和 AI 功能的应用,至少要先学几年编程。

15 节课后,我发现真正的门槛不是会不会背代码,而是能不能定义问题、拆分任务、判断结果。

你不需要先成为程序员再开始开发,你可以从今天打开 Gemini,输入一句“我想做一个什么应用”开始。

下一篇,我会把这套流程压缩成一份可以直接复制的 Vibe Coding 项目启动提示词。