Frontier · 译文 · 2026

我们 vibe coding 出来的网站,为什么看起来像设计师做的

编码代理没有让我对设计更没兴趣,反而更上头。这是 Railcode 创始人 Yakko Majuri 把过山车种子做成整座乐园的过程。

Yakko Majuri 原文 Yakko Majuri · 2026-08-10 · 约 10 分钟

译文。原文:https://railcode.dev/blog/vibe-coded-website。图和视频来自原文,过程图按原文时间线另画。

1 你以为的 vibe coding

一说 vibe coding 出来的网站,脑子里大概是这种东西:

一张深色渐变、紫色强调色的通用 AI 落地页

作者做的假站,用来举例。他说很多真站长这样。

可你正在看的这个站,也是 vibe coding 出来的,长得完全不是一回事:

Railcode 官网。原文视频。

作者自己也觉得,说它「像设计师做的」有点过。可别人真这么跟他说了。很多人过来问这站怎么做的、跟谁一起做的。

问的人太多,他决定把 Railcode 网站的创作过程讲一遍。他不是在表明自己多厉害,也不认为设计师可以不要。网上大多在骂 LLM 设计 slop。他自己的感觉是,有了编码代理之后,对设计更兴奋了。以前无从下手,现在能把脑子里的画面做出来。

这篇想说明一件事:编码代理可以做出你自己看得顺眼的设计。

把每个网站原型和对应提示词排成索引页

写这篇文章时,他把每个原型和生成它的提示词收进一张索引,把过程钉在事实上。

2 过程一张图

原文是按时间讲的。下面这张图把死胡同也画进去:霓虹丑稿、迷你游戏、单轨贴模板、孤立条带,他都走过。

图 1 Railcode 站点怎么长出来:从过山车种子到整座乐园 按 Yakko Majuri 原文时间顺序还原。箭头是他走过的路,不是通用流水线。 1 打开可能性 逛自己喜欢的网站 让代理按不同风格狂出稿 99% 扔掉,偶尔捡一颗扣子 2 强度光谱 + 放开做 同一概念做 4–10 版 一半给方向,一半 go wild 霓虹丑稿把人从 ASCII 推开 3 童年锚点 RCT 霓虹稿唤起过山车大亨 先做可玩的迷你游戏 好玩,整站塞游戏过头 4 留下一条轨 迭代到喜欢的那条过山车 贴到现成模板上 出戏:过山车凭空出现 5 需要一座园 hero 底加 200px 条带 设施跟过山车同风格 单独一条仍然突兀 6 条带变成转场 资产锚在那条过山车上 动画逐个手挑 条带改成向下一块的颜色过渡 这时才像一整座园 7 单文件 HTML 分叉 定稿前只保一份 HTML 复制、改一两处、并排看 分叉从不删 满意后再拆成 React 组件 8 调色场 playground 草地从蓝改绿,绿又不对 做实时调色板,不靠对话改色 白底改成天蓝加云 产品主色是蓝,站上的绿留下了 9 Hero 定调整站 浅绿 / 深绿区块 泥土色页脚 导航随当前区块变色 静态四色都试过,全要才对 结论:代理负责把可能性铺开,作者负责扔掉、并排比较、把风格钉死。 Fable 扛重活。品味是他自己逛站、童年游戏、分叉对照堆出来的,不是一次提示词生成的。 图例 打开可能性 / 分叉对照 光谱试稿 / 条带转场 锚点游戏 / 调色场 单轨资产 / 定调整站 发现还缺一座园 彩色边框区分阶段。死胡同(霓虹稿、迷你游戏、单轨贴模板、孤立条带)都留在路上,作者明确写了「大多数迭代是死胡同」。 出处:Yakko Majuri,《How our vibe coded website looks like a designer made it》,railcode.dev,2026-08-10。
图 1 从过山车种子到整座乐园。按原文时间顺序,不是通用配方。

3 过山车从哪来

Railcode 这个名字来自 “code on rails”:应用和代理本身就是代码,他们管基础设施和护栏(rails),好在安全环境里尽快部署。见 railcode.dev。

做这个站的前一周,他发现自己在 Railcode 里给自己做东西很开心(他是活跃用户)。问客户,客户也说好玩。

Rails + fun = rollercoaster。于是决定:网站上要有过山车。

他不是设计师,从零想概念很难,只能靠例子和灵感。两招:

  1. 网上逛自己喜欢的设计
  2. 让代理把同一件东西按不同风格狂出一堆

目的是打开「还有什么可能」。多数时候从好几处抓想法、拼起来、没完没了地改,多数时候是死胡同。

第一批过山车稿是这样的:

上排两张 ASCII 稿,灵感来自朋友的站 context.store。其余交给 Fable 自己想,当灵感种子。

对他有用的两件事

  • 强度分层。让代理把一个概念做成从淡到猛的光谱。如果光谱上没有一张喜欢的,多半整条光谱选错了。也能感觉自己更想极简,还是还能再疯一点。
  • 放开做(go wild)。试一个概念至少 4 版,有时 10 版。一半给方向,剩下一半让代理放开。这些稿大多很糟,但能迸出新点子。

那张又疯又丑的霓虹稿,就是「放开做」那一组。他不会用,可它把他从 ASCII 推到更野的方向。

4 过山车大亨

过山车大亨游乐园截图

童年玩的 Rollercoaster Tycoon。目标是把乐园盖到尽可能好看。

看着 Claude 那张霓虹怪物,他想起这游戏,于是决定网站向它致敬。

第一步,居然让 Fable 先做了个迷你版:

build a rollercoaster tycoon like contained component that I can actually play around with in an html — build two in parallel actually. one of them should have a transparent background

可玩的 HTML 组件,并行做了两份,其中一份透明底。

好玩。有那么一瞬间他觉得网站里真该塞个游戏。玩了一会儿,觉得过头了。

回到原点:只要一条自己喜欢的过山车。试够了,终于有了:

留下的那条轨。

当时他以为完事了。把过山车往模板上一贴,差点就停在那儿。

过山车贴在模板中间。好看,可它在这儿干什么?

很明显:需要一整座园。

5 脱轨:需要一座园

决定要乐园之后,他直觉它该放在 hero 底部。说不清从哪几个站看来的。

于是做出这条:

add a thin strip of maybe 200px height where we have a bunch of amusement park attractions in the same style as the rollercoaster

约 200px 高的设施条带,风格跟过山车对齐。

方向能看出来了。可往整站上一放,还是难看:

设施条带放在网站上,仍然突兀

这时他已经平行在做「编码代理」那一块的组件。

再改,变成这样:

改过的 hero:乐园条带过渡到下一块

资产锚在前面那条过山车上,动画逐个手挑。条带不再独立,而是变成下一块的颜色过渡。最后这一步他也说不清从哪看来的。

6 分叉再分叉

落到上一版时他很高兴,马上给朋友看。可还是觉得哪里不对,于是开始分叉。

做网站时,他会把设计先做成一份 HTML,差不多能上了,再拆成 React 组件,好让代理并行改。

好处是:复制一版、改一两处、并排看,非常快。

同一设计的多个分叉并排比较

分叉对照。他从不删这些分叉。

另一件事是做他所谓的 playground:颜色和变量能实时拧,不必每改一次都跟代理说一句话。

这次先把草地从蓝改成绿(草本来就是绿的)。可那一版绿不对。于是让 Claude 做了块调色场:强调色、字色、草地、背景都能试。草地的调子是在那儿拧出来的。

(他几乎想做个开源小工具专门干这个。有空再说。)

图 2 三种改法:对话改、分叉对照、实时调色 原文把慢循环和快循环分开。代理出稿是慢的;并排看和拖滑块才是他用来定品味的。 A 跟代理对话改 适合:新概念、光谱试稿、go wild 一次至少 4 版,有时 10 版 一半给方向,一半放开做 设计只用 Anthropic / Fable OpenAI 模型连明确指示都吃力 慢在哪 改一个颜色也要走一轮对话 大多数稿是死胡同 99% 开场网站会被扔掉 留下的是火花,不是成品。 B 单文件分叉对照 定稿前永远只有一份 HTML 复制整页,改一两处 和原版并排看 继续分叉或退回原版 分叉全部留着,当过程痕迹 快在哪 不用拆组件就能试结构 眼睛比提示词更会挑 满意后再拆成 React 并排看,才知道哪一版真好看。 C 调色场 playground 让 Claude 做一块调色板 强调色、字色、草地、背景 拖滑块立刻看见结果 草从蓝改绿,绿还不对时用它 作者甚至想做成开源小工具 快在哪 颜色不是对话任务 实时比「再生成一版」便宜 Hero 定了,整站跟着走 品味落在滑块上,不落在下一句提示。 结论:代理负责铺开,人负责并排挑、实时拧。三者一起用,才不像「一版 slop 交差」。 出处:同一篇文章的 Forks on forks 与文末清单。Fable 是 Railcode 自家编码代理。 蓝框 = 对话生成;绿框 = 文件分叉;橙框 = 实时控件。
图 2 对话改、分叉对照、实时调色。慢循环铺开可能性,快循环才定品味。

草地搞定,开始抠细节。

还没走上过山车这条路之前,整个过程的第一枪是让 Fable 出「开发工具好玩网站」的 mockup。大多是 slop。后来想 CTA 怎么更好看,想起里面有过一个能用的:

早期 mockup 里抠出来的小 CTA 按钮

早期烂稿里的一颗扣子。这就是为什么一开头要看很多设计,哪怕当时觉得糟。

白底也不好玩。改成天蓝,再加云:

白改蓝,整站味道差一截。

后面都顺着 hero 走。Railcode 产品的强调色现在是蓝,可网站上的绿来得太自然,他没硬拧回去。于是有了浅绿、深绿,最后是泥土色页脚。他说产品设计可能因此还得回头改。

风格一旦钉住,新图标和新资产就有参照。先把 vibe 做对,后面才有方向。

永远有细节可抠。最后一个例子是导航:静态一块色待在那儿不像一家人。改成跟着当前区块的背景变色。他觉得差很多。

白、浅蓝、浅绿、深绿的静态版都试过,最后发现:全要才对。

7 灵感从哪抄

前面说过:他不是设计师,从现成作品里找灵感。对编码代理来说,清楚的例子也是最好的方向盘。

有时会跟看过的东西很像。浅色区块转深色是常见手法,他常拿 Contextual AI 当参照:

contextual.ai 与 railcode.dev 浅转深对比

左 contextual.ai,右 Railcode。

有时关系更含糊。下面这块的灵感来自 Clay:

clay.com 与 railcode.dev 区块对比

左 clay.com,右 Railcode。

他还不停地看别的站。就算没用上具体某一块,也会留下感觉。Railcode 的站一点不像 Sentry,可他反复看 Sentry,想体会插画怎么跟内容长在一起。

午夜过后还在要更多设计迭代的对话

过了午夜半小时:「more」。

8 他自己的清单

还能再写,但已经够长。若只留他觉得最要紧的几条:

  • 设计只用 Anthropic 的模型。OpenAI 的模型连明确指示都吃力。Fable 是最好的。
  • 满意之前,全部放在一份 HTML 里。文案那些事,等设计过关再做。
  • 看很多网站。常回看自己喜欢的,也不断找新的。特别喜欢某一块,就拿它当底座往上长。
  • 一开头让 Claude 狂出很多不同网站,99% 扔掉。偶尔从里面抠一个组件,或得到一个新想法。
  • 常让编码代理对几版「放开做」,也常把一颗种子做成从极简到出格的光谱。
  • 过程要留痕:不断分叉、改一点、跟原版比。可能继续分叉,也可能退回。分叉从不删。
  • 做 playground,颜色、字体、位置能实时拧,不必每一步都跟代理对话。
  • 改,再改,再改。大多数迭代是死胡同。

最重要的一条:过程要好玩。

梗图:POV me when Fable did heavy lifting

POV: me when Fable did heavy lifting

9 出处

译文没有改他的判断:代理负责铺开,人负责扔掉、并排挑、把风格钉死。设计师没有被替代。大多数迭代是死胡同。