Not fully sequential, not fully parallel. One thin slice through every layer first — then it forks once, at Phase 2, and rejoins.
不是纯串行,也不是全并行。先打一根穿透所有层的细桩——然后只在 Phase 2 分叉一次,再合流。
A separation that also answers the hardest question a creative director will ask: why is this here?
这个分层同时回答了创意总监最难的那个问题:这东西为什么在这儿?
Liquid glass is affordable here — but only because this interface happens to be its best case. Keep inside these limits or drop the effect.
Liquid glass 在这里是负担得起的——但仅仅因为这个界面恰好是它的最佳情况。守住下面的边界,守不住就砍掉。
≤ 3 surfacesGlass on the top-level card only. Secondary elements use plain translucency. Fifty glass cards will spin a laptop's fans.
只在最上层卡片用玻璃,二级元素用普通半透明。五十张玻璃卡片会让笔记本风扇转起来。
blur ≤ 10pxOn mobile, above ~10px drops frames.
移动端超过约 10px 就会掉帧。
never position:fixedA documented iOS Safari bug — it repaints the blurred region on every scroll frame. Use sticky or an opaque bar.
iOS Safari 有一个记录在案的 bug —— 它会在每一个滚动帧重绘模糊区域。改用 sticky 或者不透明工具条。
never opacitySetting opacity below 1 turns the element into a "backdrop root" and the effect silently vanishes. Put transparency in the background-color alpha instead. This catches nearly everyone.
把 opacity 设成小于 1,元素会变成 "backdrop root",效果直接静默消失。透明度要写在 background-color 的 alpha 通道里。这条几乎绊倒所有人。
size ≠ animatedMoving a glass panel is free. Resizing it regenerates the displacement map. Animate position, never dimensions.
移动玻璃面板是免费的。改变尺寸会重新生成位移图。可以动位置,绝不动尺寸。
-webkit- prefixShip both -webkit-backdrop-filter and the unprefixed property.
两个都写:-webkit-backdrop-filter 和不带前缀的版本。
refraction = decorationTrue refraction only renders in Chromium; Safari and Firefox fall back to plain blur. So never encode meaning in the glass — meaning lives in Layer B, which works everywhere.
真折射只在 Chromium 渲染,Safari 和 Firefox 退回普通模糊。所以永远不要把含义编码进玻璃——含义住在 Layer B 里,那个到处都能跑。
- repository (repo)
- A folder whose entire history is recorded. Living on GitHub, it is also the trigger for deployment.
代码仓库。一个完整记录了修改历史的文件夹。放在 GitHub 上时,它同时也是部署的触发器。
- commit / push
- Commit = save a labelled snapshot locally. Push = send those snapshots to GitHub. Pushing is what starts a deploy.
commit = 在本地存一个带标注的快照。push = 把这些快照送到 GitHub。push 这个动作会启动部署。
- deploy
- Turning your code into the live site people can visit. Here it is automatic: push, wait ~30s, done.
部署。把代码变成别人能访问的线上网站。这里是自动的:push,等约 30 秒,完成。
- Vercel
- The host. Watches your repo, rebuilds on every push, serves the result. No server to rent or maintain. Free at this size.
托管方。盯着你的仓库,每次 push 就重新构建并上线。不用租服务器、不用运维。你这个体量免费。
- Supabase
- The database, hosted for you. Your trade log lives here so it survives across devices. Free at this size.
托管的数据库。你的交易日志住在这里,所以换设备也还在。你这个体量免费。
- route
- A URL path inside one app.
/ is the public case study, /app is the tool, /lab is the sandbox — all one project, one deployment.
路由。同一个应用里的一段网址路径。/ 是公开案例页,/app 是工具,/lab 是沙盒——同一个项目,同一次部署。
- Route Handler
- A small piece of code that runs on the server, not in the browser. Required for the LLM, because an API key must never reach a browser.
跑在服务端而不是浏览器里的一小段代码。LLM 必须用它,因为 API key 绝不能进浏览器。
- design tokens
- Named values —
--ink, --accent — instead of raw hex codes scattered through the code. Change the name once, everything follows.
设计令牌。用有名字的值(--ink、--accent)代替散落在代码各处的色号。改一次,全部跟着变。
- CSS variable
- How tokens are written in CSS. The
:root{} block at the top of this file is exactly that.
tokens 在 CSS 里的写法。这个文件顶部的 :root{} 就是。
- walking skeleton
- The thinnest possible version that still runs through every layer of the system. Built first so that anything broken breaks in hour two, not week three.
能走路的骨架。最薄的、但仍然穿过系统每一层的版本。先建它,是为了让出问题的东西在第 2 小时暴露,而不是第 3 周。
- event bus
- Instead of writing data directly, you announce that something happened. Whoever is listening reacts. Adding a new listener later — a device, a screen, a log — costs one line.
事件总线。不直接写数据,而是宣告「发生了某件事」,谁在听谁反应。以后加新的监听者(设备、屏幕、日志)只要一行。
- shader
- A tiny program that runs on the graphics card, once per pixel, sixty times a second. How Layer B is drawn.
跑在显卡上的一小段程序,每个像素跑一次,每秒六十次。Layer B 就是这么画出来的。
- TSL
- Three.js Shading Language. Write shaders as JavaScript node graphs; it compiles to WebGPU and falls back to WebGL from the same source.
Three.js 着色语言。用 JavaScript 的节点图写 shader;同一份源码编译到 WebGPU,并能降级到 WebGL。
- feTurbulence
- An SVG filter that generates noise procedurally. It makes the grain on this page — no image file involved.
一个程序化生成噪声的 SVG 滤镜。这个页面上的颗粒就是它做的——没有用任何图片。
- exit criterion
- One sentence that is either true or false. If it is false, the phase is not finished, however good it looks.
退出条件。一句非真即假的话。它为假,这个阶段就没完成——不管看起来多好。
- timebox
- A fixed number of hours, decided in advance. When they run out you stop, finished or not.
限时盒。事先定好的固定小时数。用完就停,做没做完都停。