我们的 vibe coding 站点为何看起来像设计师做的

Railcode 创始人讲述自己的网站如何被人误以为请了设计师:把 Rollercoaster Tycoon 当灵感、开一堆分支并行试、反复迭代,并给出具体的设计习惯而非工具推荐。

中文
复制
Railcode 官网首页截图,左侧是「Build the tools your team needs」标题与黄色按钮,右侧是 Claude Code 终端窗口,底部横贯一条过山车像素图案

提到 vibe coding 出来的网站,你脑子里大概会浮现出这种东西: 一个典型的 AI 生成落地页,深色渐变背景配紫色点缀 示例用途的假网站(但它看起来很像一大堆并非示例用途的真网站) 不过,你现在看的这个网站也是我 vibe coding 出来的,而它长这样: 说实话,我自己觉得说它像设计师做的有点抬举了,但确实有人这么跟我讲!不少人跑来问我这网站是怎么做的,甚至问我跟谁合作的。 被问得多了,我就想挑战一下这个不可能的任务:把 Railcode 网站的创作过程完整讲一遍。 不是因为我自认多了不起,也不是觉得设计师没必要(恰恰相反),而是因为——大家聊来聊去都是 LLM 生成的设计垃圾,而我发现自己有了 coding agent 帮忙之后,对设计反而更来劲了。以前我束手无策,现在我能把脑子里的创意真正做出来。 所以我的目标是说明:你可以借助 coding agent 做出有品味的设计(有品味=你自己喜欢),而且你完全应该放手去做。 一个索引页,列出所有网站原型以及生成它的 prompt 为了写这篇文章,我把每一个原型连同生成它的原始 prompt 都整理进了一个索引页,这样我才能真正回溯自己的过程,让文章有据可依

一大堆过山车

Railcode 这个名字来自「code on rails」的想法。Railcode 里的应用和 agent 就是代码,我们负责基础设施和护栏(也就是那些 rails),让它们能快速部署到安全的环境里。 决定做网站的前一周,我意识到自己在 Railcode 里给自己搭东西搭得特别开心(我是活跃用户),问了问客户,他们说自己玩得也挺开心。 Rails + fun = rollercoaster,所以我决定网站上要有一辆过山车。 可我不是设计师,从零开始构思概念对我来说太难了。这意味着我得依赖案例和灵感。为此我有两个办法:

  1. 在网上翻我喜欢的各种设计
  2. 让 agent 把同一个东西用不同风格生成一大堆设计 目的是打开思路,看看有哪些可能性。大多数时候我会从好几个地方各取一点,拼起来,然后反复迭代到满意为止。大多数时候都是死路一条。 这次,最早的过山车设计长这样: ASCII 风格的那两个(上面两个)灵感来自我当周早些时候看到的朋友的网站。其余几个我交给 Fable 自由发挥。它们的作用是作为灵感的种子。 这里面有几个因素帮到了我:
  • 强度分级: 我会让 agent 拿一个概念/想法,生成一批落在强度/复杂度光谱不同位置上的设计。这样我既能判断这个概念整体上是否有意思(如果光谱上没有一个我喜欢,那多半是我选错了光谱),也能判断自己是不是想把这个概念做得更极简,或者还有空间往更疯的方向走。
  • 放飞自我: 试一个概念时,我通常会向 agent 要至少 4 个版本,有时甚至 10 个。其中至少一半我会给出一定程度的指引,剩下的就让 agent 自由发挥。大多数时候这些版本烂得彻底,但它们能擦出火花,催生新想法。 你大概能看出来,那个又疯又丑的霓虹设计就属于「放飞自我」的部分,我永远不会真的用它,但它把我从 ASCII 的思路里拽了出来,转向了更有野心的东西。

Rollercoaster Tycoon

A Rollercoaster Tycoon amusement park screenshot

我小时候常玩一款叫 Rollercoaster Tycoon 的游戏。目标(至少对我来说)是造出最酷的游乐园。就像你在上面看到的,你可以造出特别✨有美感✨的园区。

看着 Claude 造出的那坨霓虹怪物,我想起了这款游戏,于是我知道,我的网站要致敬它。

所以一开始,我让 Fable 给我搭了个迷你版游戏:

“做一个类似 Rollercoaster Tycoon 的自包含组件,让我能在 html 里直接玩——其实做两个并行的版本。其中一个要有透明背景”

这挺酷的,有那么一瞬间我以为我的网站里真会塞进一个游戏,但玩了一会儿之后我意识到,这有点过头了。

于是我回到原点,决定只挑一个我真正喜欢的过山车。试了足够多次之后,终于有了这个:

定下它的时候,我以为完事了。甚至直接把过山车往模板上一贴,一度觉得就这样吧。

这确实挺酷,但一个过山车杵在网站正中间算怎么回事?格格不入。

显然,我们需要一整个园区。

脱轨

决定要一个园区之后,我莫名觉得它得放在 hero 的底部。我确信这是受了以前见过的某些网站影响,但一个都想不起来。

于是就有了这条横带:

“加一条大概 200px 高的细横带,放一堆游乐园设施,风格和过山车一致”

到这里你能看出雏形了,但放到网站上还是很难看:

放在网站上的设施横带,显得格格不入

注意,此时我已经在并行推进,想清楚了要加 coding agents 板块,正在做那部分的组件

在此基础上继续迭代,就得到了这个:

优化后的首屏,游乐园条带过渡到下一区块

走到这一步,我的做法是:把素材设计锚定在之前那个过山车上,逐个挑选并打磨每一段动画,并且认定这条条带不该独立存在,而应该是通向下一个区块的颜色过渡。最后这一点,我确信是从某些网站上看到的,但一个都想不起来是哪几个。

分叉之上再分叉

定下最后那版设计时,我特别满意,还马上拿给一个朋友看了。但总觉得哪里不对,于是就有了这些分叉。 做网站时,我会一直只用一个 HTML 文件,直到基本可以上线,才把它拆成 React,分成各种组件,让 agent 并行去改。 这样做的好处是,复制一份设计、改一两处、并排对比,速度非常快。

同一份设计的多个分叉并排放在一起对比

我还会搭所谓的“playground”,用来试颜色和其他变量。 这次我先把手头的草地颜色从蓝色改成绿色(草是绿的,废话),但调出来的绿并不是我想要的那种。于是我让 Claude 搭了一个 playground,可以在里面试不同的强调色、文字色、草地色、背景色等等,最后才定下我想要的那种草色。 (我甚至有点想做个开源小工具,专门用来管这些分叉和 playground。等有空了也许试试。) 草地搞定之后,我开始抠细节。 在转向过山车这个方向之前,我其实是先让 Fable 做了“一个开发者工具网站的有趣 mockup”,由此开启的整个流程。那些 mockup 基本都是垃圾,但在琢磨 CTA 怎么设计更好时,我想起自己见过一个很合适的东西:

从早期 mockup 里抠出来的一个小 CTA 按钮设计

这就是为什么要在流程早期多看设计,哪怕它们很糟糕。后面说不定就能从一堆草稿里翻出个宝贝。 另外,白色背景让网站显得不好玩(而我想要的是好玩),所以我把它改成了天蓝色,又加了几朵云烘托气氛:

从白到蓝,效果天差地别

剩下的就顺理成章了。首屏定调,整个网站跟着走。 Railcode 产品 现在的强调色是蓝色,但网站上的绿色来得太自然,我干脆顺势接受,没有硬掰回去。于是就有了浅绿和深绿两个区块,最后连页脚的土壤也这么来的。这么一来,产品本身的设计可能也得重新看看了…… 网站其余部分还是改了很多轮,但风格大致定型之后,做新图标和素材时就能随时参照。先把调性定下来很重要,因为这样才有明确的方向感。 不过细节永远抠不完。最后一个例子是导航栏:固定的颜色总觉得不对劲,于是我让它根据当前所在区块,渐变到对应的背景色。在我看来差别巨大!

白色、浅蓝、浅绿、深绿我都试过固定版本,最后发现最好的方案就是全都要

灵感

前面说过,作为非设计师,从现成的作品里找灵感是我创作流程中必不可少的一环。而清晰的范例,也是给 coding agent 指方向的最好方式。 有时候你会做出跟参考对象非常接近的东西,比如这个浅色区块转深色,本身是挺常见的模式,但我经常参考的是 Contextual AI:

contextual.ai 与 railcode.dev 浅转深区块过渡的并排对比

左边是 contextual.ai,右边是 Railcode 网站

但有时候灵感来源没那么明确。比如 Railcode 的这个区块,其实是受 Clay 启发:

clay.com 和 railcode.dev 区块的并排对比

左边是 clay.com,右边是 Railcode 网站

我也一直在大量浏览各种网站,即使最后没有用到其中任何具体的东西,它们依然对我有影响。Railcode 的网站和 Sentry 完全不像,但我一直看他们的网站,去感受那种与内容契合的插画风格。

深夜的消息记录,要求再做几版设计

午夜过了 30 分钟:“more”

还有很多可以说的,但我觉得这篇已经太长了。所以如果要总结我认为自己流程中最关键的部分,就是:

  • 做设计时我只用 Anthropic 的模型。我发现 OpenAI 的模型即使给了具体方向也很难做好。Fable 是最好的。
  • 在满意设计、准备处理文案之类的东西之前,我把所有内容都放在一个 HTML 文件里。
  • 我看 大量 网站找灵感。我会经常回看自己喜欢的网站,也不断寻找新的。如果特别喜欢某个组件,我会把它作为基础,在上面继续搭建。
  • 一开始我让 Claude 生成大量不同的网站,最后 99% 都扔掉,但偶尔会从里面拿一个组件出来,或者只是得到一个可以试试的新想法。
  • 我经常让 coding agent 对几个设计“放开手脚”,也会让它们从一个想法的种子出发,做出一系列从极简 -> 夸张的多个版本。
  • 我喜欢让自己的过程留下容易查看的痕迹,所以我会不断“fork”一个设计,改几处,再和原版对比。之后我可能继续在 fork 上做,也可能回到原版,但从不删掉任何 fork。
  • 我会搭 playground,在里面轻松试颜色、字体和位置,实时看到结果,而不是走让 agent 改东西那种缓慢的迭代流程。
  • 我迭代,迭代,再迭代。大多数迭代都是死路。

最重要的是,我在这个过程中玩得很开心 :)

一张梗图,配文是 POV: me when Fable did heavy lifting

POV:Fable 挑大梁时的我

来源: Railcode← 返回首页