我们整个网站都是用 Claude Code 构建的——这是从 Git 日志里挖出的经验教训

HN AI Tools 2026-08-07T00:49:33.973446

坦白说,发这篇文章让人有点不自在。Soamee 是一家软件外包公司,客户找我们做数字产品。但过去一年半,我们自己的网站却大量依赖 Claude Code 来搭建。这是我们从 git 日志里发现的东西。

这不是一篇吹捧 AI 的营销稿,而是一份诚实的复盘:哪些功能帮我们省下了几周时间,哪些地方我们不得不推倒重来,以及为什么在这个工具有诸多局限的情况下,我们还在继续用它。

仓库数据一览

先看事实,再谈分析:

这 52% 的 AI 参与率并不意味着这半年代码都是 Claude Code 写的。它只代表这个工具出现在我们一半以上的开发会话中——有时生成整个文件,有时只是建议一个三行的修复。

Claude Code 做了什么

翻译系统

这是帮我们省时最多的场景。网站支持五种语言,每篇博客、每个案例、每个服务页面都有 ES、EN、PT、IT、DE 五个版本。没有 AI 的话,要么雇四个翻译,要么接受西班牙语内容和多语言版本之间存在明显延迟。

Claude Code 生成了初版翻译。质量不算完美——模型丢失上下文时,葡萄牙语会夹带西班牙语腔调,德语需要人工检查变音符号,意大利语偶尔会混用不同语域。但几秒钟就能拿到一版可用的草稿,而不是等好几天。提交日志能说明一切:"Revisión contextual del portugués: bloques en español y acentos ambiguos""Corrige contenido en alemán: umlauts, erratas y bloques en español"。

每份翻译我们都会人工审核,但审校比从零开始写要快得多。

翻译校验脚本

我们有一个翻译校验脚本,只要某个西班牙语页面缺少其他四种语言的对应版本,CI 就会失败。Claude Code 写出了 scripts/translation-checker.cjs 的第一版,包括类别别名、只有西班牙语版本的页面的例外规则,以及和 pre-push 钩子的集成。

这是个 400 行的 Node 脚本,功能和我们要求的完全一致。没什么出彩的地方,但正是那种人类开发者要花两小时、Claude Code 二十分钟就能搞定的任务。

重复性组件

网站上有很多服务页、行业页、解决方案页——结构相似、内容不同。Claude Code 按照已有的模板生成了其中大部分。后来模板的设计改了,我们就批量更新这些页面。

它还写了 URL 规范化中间件(HTTP 转 HTTPS、补齐结尾斜杠、针对 Google Search Console 里发现的 404 错误做 301 跳转)、sitemap 生成器,以及几个 CI 脚本。

博客内容

这个博客上几乎每一篇文章都有 Claude Code 参与。有时候它根据大纲生成完整初稿;有时候它给我已经动笔的文章提供结构建议;有时候它只是把写得单薄的段落扩展开。

文章的语气风格总是由人来把关;结构通常由它建议;数据永远靠人工核对。

哪些事必须由人来完成

视觉设计

这是最清晰的一条边界。Claude Code 能实现你描述得足够精确的设计,但没办法凭空创造一套。Soamee 的视觉风格——深紫色(#1e1548)、薄荷绿(#5dd3b3)、45 度斜条纹图案、同心圆气泡——全部来自人的决定,而不是 AI。

当我们让 Claude Code「改进博客设计」时,它有时候给出来的东西在技术上没问题,但就是不像我们自己的风格。我们不得不学着把需求说得非常具体:「给引用块加一条 3px 宽的薄荷绿左边框」——这种指令它执行得很好;但「改进设计」这种模糊要求,基本指望不上。

架构决策

选择 Astro 5 搭配混合式 SSR(服务端渲染),是人类做的决定。在 Tailwind CSS v4 文档还很少的时候就用上它,也是人类做的决定(调试时为此花了不少时间)。在众多部署方案里选了 Dokku,同样是人类做的决定。

Claude Code 可以在你摆出几个选项时帮你做评估,但真正的选择标准——什么对我们的业务重要、适合我们的技术栈、符合我们的运维能力——这些只能由我们自己来定。

每个 PR 都要人工过一遍

Claude Code 生成的任何改动,没有经过人工审查,都不会进入生产环境。不是因为不相信模型,而是因为人工审查能发现在模型认知之外的问题:比如某段话的语气是不是我们说话的调调,一个新功能在商业上是否讲得通,一条内部链接是不是指向了正确的位置。

Git 日志里能看到这样的提交记录:“修复失效的内链:/contacto 和 /servicios/consultoria-tecnologica”。这些链接是之前某次 AI 改动弄坏的,后来在后续的人工审查中修复了。

真正的业务逻辑

联系表单通过 Mailgun 发送邮件。限流逻辑、错误处理、必填字段——这些是我们自己设计的。等我们把预期行为清晰地定义好之后,Claude Code 才负责把它写成代码。

真正跑通的工作流

我们花了几个月才找到一套真正管用的工作方式。不管用的方式是:给 Claude Code 一个含糊的任务,然后指望它给出完美的结果。管用的方式是:

  1. 先写规格说明。在打开 Claude Code 之前,我们会先把想要的东西写清楚:具体的行为、约束条件、边界情况。规格写得越具体,来回迭代的次数就越少。

  2. 永远用分支和 PR。AI 生成的任何改动都放在独立分支上,从来不直接推到 master。这样合并之前可以完整地审查代码差异,出了问题也容易回滚。

  3. CI 当安全网。翻译检查、图片检查、内部链接测试——全部跑在 CI 里。Claude Code 有时候生成的代码语法上没问题,但语义上是错的(比如链接指向一个不存在的页面,引用了没有生成的图片)。这些都会被 CI 拦截下来。

  4. 分区块审查。我们不会一口气审查一个包含 50 个文件的 PR(合并请求),而是按主题拆开来看:先审西班牙语内容,再审某一种语言的翻译,最后处理剩下的。

  5. 由人来完成提交。这一点从不例外。提交信息由人工撰写,而不是 Claude Code。这是个很小的信号,但很重要——它意味着确实有人看过、确认过。

惊喜与意外:哪些超出预期,哪些翻了车

惊喜的一面

CSS 调试能力出奇地好。我们采用 Tailwind CSS v4 时,这还是个文档稀少的全新领域。Claude Code 帮我们搞清了某些断点为什么表现不符合预期,以及 v4 的 layer 系统是如何运作的。没有它,设计系统的稳定化要多花不少时间。

自动化脚本是它的舒适区。翻译检查、链接检查、站点地图生成、SEO 快照脚本——这些原本要写好几天的小工具,几小时就能生成,之后再做微调。

相似文件之间的一致性令人印象深刻。一旦你建立起某种模式——服务页面、带 FAQ 的博客文章、案例研究——模型就能忠实复刻。人类天生容易前后不一致,模型不会。

踩坑的一面

依赖幻觉。尤其是在早期使用 Astro 5 和 Tailwind v4 的阶段,Claude Code 有时会推荐这些版本中并不存在的 API。我们学到的教训是:动手实现之前,一定要先对照官方文档核实。

长上下文问题。在非常长的会话中,模型会"忘记"一开始定下的约束。一个真实例子:我们开工时就明确不用某些废弃组件,五个小时后 Claude Code 又把它们提了出来。短小、聚焦的会话效果要好得多。

默认产出"千篇一律"的设计。没有非常具体的指令时,Claude Code 给出的方案往往和任何其他 Tailwind 网站没什么两样——技术上正确,视觉上毫无个性。品牌调性需要持续盯防。

葡萄牙语翻译需要特别审查。模型混淆西班牙语和葡萄牙语的频率,比其他任何语言组合都高,多半是因为这两种语言太相似了。因此,葡萄牙语(PT)的审查时间总是明显长于德语(DE)或意大利语(IT)。

再来一次?会,但有前提

如果今天从头搭建 soamee.com,我们会从第一天就用 Claude Code。但有几条明确的原则:

用它来扛工作量,而不是做决策。 需要创建 20 个类似页面时,Claude Code 无可匹敌;但要不要做这些页面、做了有没有意义,这个决定得你自己来。

审查时间不会消失,只是改变了形态。 在没有 AI 工作流之前,我们把时间花在“写”上;现在我们把时间花在“审”上。这不是简单的时间等比减少,而是工作性质变了。用 AI 写东西更快,但审查需要注意力和判断力。

别因为信任就省掉 CI。 每次心里冒出“这个改动太简单了,不用跑完整检查”的念头,接下来就会出问题。CI 必须每次都跑,没有例外。

品牌调性无法外包。 Claude Code 可以模仿文风,但它不了解你的公司、你的客户、你内部的价值观。真正要紧的文案——价值主张、服务描述、案例研究——一律要经过人工编辑。

结论

639 次提交,其中 331 次有 AI 参与;534 个 Astro 文件;5 种语言。最终网站上线运行、有搜索排名、也有转化。

soamee.com 是 Claude Code 建的吗?不完全是。是我们自己建的,Claude Code 只是承担大批量重复工作的主要工具。这个区分很重要:工具不在乎结果成败,不了解业务背景,也不会做出那些定义产品方向的关键决策。

如果你的项目有大量重复内容、需要翻译成多种语言,或者想快速推进大量代码,Claude Code 能显著改变你的产出能力。前提是:系统化的人工审查、稳健的 CI,以及对其能力边界有合理的预期。

如果你想了解我们如何做技术栈决策——包括这个网站为什么选 Astro 而不是 Next.js——那篇文章里有详细说明。如果你对我们为客户做的工作感兴趣,可以看看我们的开源贡献工作方式

查看原文