实用技巧 ★ Featured

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

记录我与 AI 共创完成个人双语网站的全过程,涵盖从零到部署的五个阶段、深度配合的交互方式、手机端适配的血泪教训,以及 Vibe Coding 带来的全新创造体验。

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

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


前言:什么是 Vibe Coding?

在动笔之前,我想先介绍一下”Vibe Coding”这个概念。它由前 OpenAI 研究员 Andrej Karpathy 提出,描述的是一种全新的编程范式——代码不再是一个字母一个字母敲出来的,而是通过与 AI 进行自然语言对话,在一种”氛围感”中,由 AI 执行、你讲述想法、双方一起迭代完成的创作过程。

我既不是前端工程师,也不是职业开发者。我是一个有想法、有内容想表达,但被技术门槛挡在外面的人。而这篇文章记录的就是——我如何借助 AI,把一个”我想要一个个人网站”的模糊念头,变成线上真实运行的 URL 的过程。

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


一、起点:一个模糊的念头

我想要的很简单——一个能承载我思考、洞察、技巧分享、读书笔记和投资复盘的线上空间。中英文双语的,因为我想同时服务两个读者群体。干净、安静、不花哨,有检索能力,手机和电脑都能正常看。

在传统路径下,这意味着我需要:

  • 学习 HTML、CSS、JavaScript
  • 学习一个现代框架(React / Vue / Astro)
  • 学习响应式设计、i18n 多语言方案
  • 学习部署和运维

而事实上,这些内容我只能说有一定的了解,但实际全流程操作的经验我还真没有过。

但我有一个”对话伙伴”——CodeBuddy,一个能在本地文件系统上操作代码、构建项目、甚至用浏览器截图验证效果的 AI 助手。

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


二、我们的协作方式:一种全新的人机关系

回看这几天的开发过程,我发现我们之间形成了一种非常特殊的协作模式:

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

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

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

但其实这样的对话方式存在大量算力浪费的风险,“很明显不符合要求”这样的描述会让它重新检查很多本不必要的内容。在项目部分细节优化的时候,仅仅解决一个文本溢出的问题,就消耗了 100 多算力,还没解决好。后来我逐步调整思路,冷静下来跟它详细描述,效率就明显提升了。


三、项目全景:从零到部署的阶段划分

整个项目可以分为五个阶段:

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

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

AI 帮我选型了 Astro——一个适合内容驱动网站的静态站点生成器。之所以选它,是因为我的网站本质就是一堆文章,不需要复杂的前端交互。Astro 编译后输出纯静态 HTML,快、安全、部署简单。

这一阶段我们搭建了:

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

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

这一阶段的每一个功能都是一次”你的想法 + AI 的实现”的共创:

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

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

这是我和 AI 对话最密集的阶段,也是”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 的定位基准变为 body 而非 viewport。

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

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

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

每一个问题都是我截图发给 AI,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-topcalc() 的区别,不需要知道 overflow-x: hidden 会影响 position: fixed 的行为——这些技术细节 AI 会自己分析并绕过。

2. 感受驱动的设计迭代

我经常说的是:

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

这些纯主观的表达,AI 都能理解,并转化为具体的技术修改:改 padding 值、调整 transition 参数、重新设计 z-index 层级、修改色彩值。

3. 试探性探索

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

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

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

4. 翻译 + 审校

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


五、我们共同攻克的典型难题

问题 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 子域名误解

现象:在 Cloudflare 里把项目名从 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

结语:我的 Vibe Coding 初体验

说实话,在开始这个项目之前,我对 AI 编程的期待只是”帮我写几段代码”。

但我实际体验到的完全超出了这个预期。

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

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

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

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

目前项目只是初步完成了,后续还会有更多需要完善的地方,更多内容等着我去填充 💪!


感谢 CodeBuddy,这次共创将成为我技术旅程上最珍贵的记忆之一。