实用技巧 精选

我的第一件 Vibe Coding 作品:与 AI 共创一个个人网站

一个不懂代码的人,靠和 AI 对话,用 5 天从零做出一个 55+ 双语页面的个人网站。这篇文章记录全过程:人机怎么分工、五个阶段怎么推进、手机端适配踩了哪些坑、哪些经验值得你直接复制。

#Vibe Coding#AI编程#网站搭建#个人博客#CodeBuddy

作者:Galvin · 共创伙伴:CodeBuddy
2026-08-02


先说结论

这篇文章是给所有被”我不会编程”挡在门外的人写的。

我不会写代码,也没有系统学过任何框架。但靠和 AI 对话,我在 5 天里做出了一个能用的个人网站,55+ 个双语页面,构建零错误,部署在 galvinai.pages.dev。

这篇文章讲四件事:Vibe Coding 是什么、我们怎么分工、五个阶段怎么推进、踩了哪些坑值得你避开。

这不是技术教程,是一篇关于”可能性”的记录。


一、Vibe Coding 是什么

这个词由前 OpenAI 研究员 Andrej Karpathy 提出。它描述一种新的编程方式:代码不再是一个字母一个字母敲出来的,而是你用自然语言跟 AI 对话,AI 执行、你讲想法、双方一起迭代。

我既不是前端工程师,也不是职业开发者。我是一个有想法、有内容想表达,但被技术门槛挡在外面的人。

这篇文章记录的,就是我如何把一个”我想要一个个人网站”的模糊念头,变成线上真实运行的 URL。


二、起点:我只想要一个网站

我的需求很朴素:

  • 一个能装下思考、洞察、技巧分享、读书笔记的线上空间
  • 中英双语,同时服务两类读者
  • 干净、安静、不花哨
  • 能搜索
  • 手机和电脑都能正常看

按传统路径,我得先学 HTML、CSS、JavaScript,再学一个现代框架,再学响应式设计、i18n、部署运维。这些内容我只有一定了解,完整跑通过一次的经验是零。

但我有一个对话伙伴:CodeBuddy。它能在本地文件系统上改代码、构建项目,甚至用浏览器截图验证效果。

2026 年 8 月 1 日,我打开了第一个对话窗口。


三、我们怎么分工

回看这几天的开发过程,我意识到我们之间形成了一种很特殊的协作模式:

传统开发我们的方式
我写代码,谷歌搜索查文档我描述想法,AI 写代码
Ctrl+C / Ctrl+V 复制粘贴AI 直接修改项目文件
运行 → 报错 → 看日志 → 改AI 构建 → 截图验证 → 定位问题
我查 CSS 属性含义我只要说”间距太大”
“这个 Bug 修了 3 个小时”“描述症状,3 轮对话解决”

我的角色:产品经理 + QA 测试 + 决策者
AI 的角色:全栈开发 + 自动化测试 + 技术文档撰写

对话的方式极其自然。我经常就是截图后丢一句”你看,手机版样式是这样的,很明显不符合要求”。AI 自己分析根因、找到文件、完成修改、构建、验证,最后我只确认一句”可以了”。

不过这种偷懒的描述也浪费过不少算力。“很明显不符合要求”这种话,会让 AI 把不相关的内容全检查一遍。有一次只修一个文本溢出问题,烧了 100 多算力还没搞定。后来我调整思路,冷静下来把问题描述清楚,效率立刻上来了。


四、五个阶段:从零到上线

整个项目可以分成五个阶段。

阶段一:搭骨架(约 2 小时)

我说:“我想建一个个人博客网站,中英双语,用 Astro 框架。”

AI 帮我选型了 Astro。理由很实在:网站本质是一堆文章,不需要复杂的前端交互,Astro 编译后输出纯静态 HTML,快、安全、部署简单。

这一阶段搭好了:

  • 项目初始化、目录结构规划
  • 文章内容的 Markdown + Frontmatter 数据模型
  • 首页 + 四个专栏页(行业洞察、实用技巧、阅读思考)
  • 关于 / 联系页面

阶段二:做核心功能(约 1 小时)

每个功能都是一次”你的想法 + AI 的实现”:

  • 中英文双语(i18n):基于 URL 路径(/zh/ vs /en/)的双语切换方案,页面、导航、SEO 元数据全部同步
  • 暗色 / 亮色主题:点击切换、跟随系统偏好、本地记忆
  • 全文搜索:浮动搜索面板,支持中文分词和英文搜索
  • 表格可视化:首页文章按标签分类,类似 Notion 数据库视图

阶段三:磨页面(约 4 小时)

这是对话最密集的阶段,也是 Vibe Coding 感受最强的阶段。典型节奏:

  1. 我说:“页眉要做成下拉菜单的形式”
  2. AI 理解后给出设计方案
  3. 我确认
  4. AI 改 Header.astro,构建
  5. 我看效果截图:“这个间距再大一点,箭头动画不够流畅”
  6. AI 微调,重新构建

如此反复,像一场即兴演奏。我的审美感 + AI 的执行力 = 双方都满意的结果。

最终页眉实现了:

  • 桌面端:多层下拉菜单,带悬停和下划线动画
  • 手机端:汉堡菜单展开为全屏侧滑面板
  • 功能按钮:语言切换、主题切换、搜索切换,图标 + 文字,带 hover 态

阶段四:手机端适配(最艰难,约 6 小时)

这是全项目投入精力最多、问题最难攻克的环节。手机端汉堡菜单,我们至少迭代了 4 个版本:

第 1 版:菜单能打开,但只显示在 header 高度范围内,覆盖不全。问题出在 CSS:body { overflow-x: hidden } 导致 position: fixed 的定位基准从 viewport 变成了 body。

第 2 版:菜单覆盖全屏了,但汉堡按钮和关闭按钮视觉重叠。方案是把 header 层级提升到 z-[70],移除 overlay 内独立的关闭按钮,让汉堡按钮本身动画切换为 X 图标。

第 3 版:菜单项间距太大、留白过多。压缩了菜单项 padding、分类标签间距、面板顶部 padding。

第 4 版:点击页面空白区域无法关闭菜单。之前的事件监听只捕获了 #mobile-overlay-bg,nav panel 内部区域的点击漏掉了。简化为”任何 overlay 内点击都关闭”。

每个问题都是截图发给 AI,它分析 → 修改 → 构建 → 用 Playwright 在 iPhone 模拟器下截图验证。没有一次是”拍脑门改一下试试”,每一步都有根因分析和验证手段。

阶段五:部署上线(约 1 小时)

最后一步是把项目推上线。选了 GitHub + Cloudflare Pages 完全免费方案:

  1. 本地 Git 初始化,关联 GitHub 仓库
  2. SSH 密钥配置
  3. Cloudflare Pages 连接仓库,自动构建部署
  4. 项目改名碰到 .pages.dev 子域名冲突问题(Cloudflare 的设计特性,第一次用确实容易踩坑)

部署后 AI 还自动访问线上 URL,验证了首页加载、导航等核心功能。

最终线上地址:galvinai.pages.dev(55+ 个双语页面,构建零错误)


五、四种深度配合方式

这里的交互流程,比”问一句、答一句”要复杂得多。

1. 截图驱动

我最常用的方式:打开网页截图,发给 AI,说一句”你看,这不对”。

AI 会自动做这些事:

  • 读取相关源码文件
  • 分析截图里显示的问题
  • 定位具体是哪一行 CSS 或 JS 逻辑导致的
  • 给出修改方案并直接执行(很多时候我会要求先出方案,确认后才执行)
  • 构建项目
  • 启动 Playwright 在移动端模拟器下截图验证

整个过程我不需要理解 padding-top 和 calc() 的区别,不需要知道 overflow-x: hidden 会影响 position: fixed。这些技术细节 AI 会自己分析并绕过。

2. 感受驱动

我常说的都是这种话:

  • “行与行之间间距过大,留白太多”
  • “这个动画不够流畅”
  • “按钮视觉重叠,用起来别扭”
  • “字体大一点”
  • “颜色可以再柔和一些”

这些纯主观的表达,AI 都能翻译成具体的技术修改:改 padding 值、调 transition 参数、重排 z-index 层级、修改色彩值。

3. 试探式探索

有时候我自己也不知道要什么,就问:

  • “手机端菜单一般怎么做?”
  • “这个页面还能加点什么?”
  • “有什么推荐的做法?”

AI 给几个方案,我选一个,它实施。这种”给我看看选项”的方式,特别适合对技术实现不太熟的人。

4. 翻译 + 审校

所有界面的中英文文案,我写中文,AI 翻译成英文。导航菜单、按钮文案、404 页面、SEO 描述,全是我提需求、它执行。


六、四个最难的问题

问题 1:overflow-x: hidden 的连锁反应

现象:手机端汉堡菜单展开后只覆盖了页面内容区上半部分,下方还能看到正文。

分析:AI 发现 body { overflow-x: hidden } 让 <body> 变成了滚动容器,导致 position: fixed 的子元素基于 body 而非 viewport 计算位置。

方案:overflow-x: hidden 只保留在 html 上,移除 body 上的声明。

体会:一个看似无害的 CSS 属性,能引发跨文件的问题。让我自己调试,可能永远不知道是这个原因。

问题 2:两个按钮的光学重叠

现象:overlay 里的 X 关闭按钮和 header 上的汉堡按钮叠在一起,用户困惑”该点哪个”。

分析:两个按钮在同一区域,z-index 分布不合理。

方案:移除 overlay 内独立的关闭按钮,改为汉堡按钮本身动画变为 X,header 层级保持高于 overlay。打开和关闭是同一个位置,肌肉记忆统一。

问题 3:点击空白无法关闭

现象:菜单打开后,点击菜单项之间的空白区域,菜单不关闭。

分析:事件监听只匹配了 #mobile-overlay-bg,nav panel 内部的 div 点击不匹配任何关闭条件。

方案:简化为”overlay 内任意点击都关闭”,11 行代码变成 4 行。

体会:有时候最简单的方案就是最好的方案。

问题 4:Cloudflare Pages 子域名误解

现象:把项目名从 personal-site 改为 galvin,但 galvin.pages.dev 不能访问,旧的 personal-site-6ed.pages.dev 还能用。

分析:Cloudflare Pages 的项目显示名和 .pages.dev 子域名是分离的。子域名创建时锁定,改名只改显示名。

方案:了解机制后,删除项目重新部署,成功拿到 galvinai.pages.dev。


七、最终效果

维度状态
页面数量55+ 双语页面
构建状态零错误
桌面端体验下拉导航、表格视图、全文搜索
手机端体验全屏菜单面板、触摸友好、safe-area 适配
国际化中英双语,URL 路径区分
主题亮色 / 暗色自动识别 + 手动切换 + 本地记忆
部署GitHub Push → Cloudflare 自动构建,1-2 分钟上线
SEO每个页面独立的 title / description / og:image

八、写在最后

动手之前,我对 AI 编程的期待只是”帮我写几段代码”。

实际体验完全超出预期。

最大的收获不是 AI 写得多好,而是它让我从一个”代码消费者”变成了”产品创造者”。我不再纠结”这个功能怎么实现”,转而关注”我想让用户感受到什么交互”。我从关注 How,变成了关注 What 和 Why。

这就是 Vibe:一种流动的、直觉驱动的创作状态。AI 把”实现”的成本降到几乎为零,释放了我的创意和审美。

当然,这不意味着我可以两手一摊什么都不管。最终做决策的还是我:这个动画要不要、那个间距对不对、整体设计方向走向哪里。这些判断 AI 代替不了,而正是这些判断,才让作品真正被视为”你的”。

如果要对想尝试 Vibe Coding 的朋友说一句话:不要想”我不会”,只要想”我想要什么”,然后去对话。

项目只是初步完成,后面还有更多要完善的地方,更多内容等着我去填充。

感谢 CodeBuddy,这次共创是我技术旅程上最珍贵的记忆之一 💪