seenry

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Seenry

Seenry

The standard is simple: clean, premium, no AI slop, at the level of the best big-company product design and the best independent studios (Stripe, Linear, Apple, Attio, Figma, ARKET, kargul.studio). Everything below serves that. Read this whole file before building; the rules that decide quality are here, not in the guides.
Work in the project's existing stack. If the project has tokens, components or a
DESIGN.md
, read them first and extend them.
Finished means the gate has seen it. Any new page, screen, dashboard or redesign is not done until
node scripts/check.mjs <file or url> --brief <brief> --mode quick
has run on it at desktop and phone, its blockers are cleared, and the critic's fixes are applied. Run it even when the page looks finished or the request was one line; never report done, or hand over a preview link, on a page the gate has not seen. Report the score and its level honestly: pass (9), leader level (8) or below leader level (7 or less) with the remaining gaps. Polish and showcase modes go further when the person asks for them. Never end your turn while image generation, a build or the check is still running in the background: wait for it, then finish, because in one-shot and headless sessions ending the turn ends the work.
标准很简单:干净、高级、没有 AI 粗制滥造痕迹,达到最优秀的大型科技公司产品设计和最优秀独立设计工作室的水准(Stripe、Linear、Apple、Attio、Figma、ARKET、kargul.studio)。以下所有内容都服务于这一点。构建前先通读整个文件;决定质量的是这里的规则,而不是指南。
在项目现有技术栈中工作。如果项目已有 token、组件或
DESIGN.md
,先读取并在其基础上扩展。
完成意味着质量门禁已经检查过它。 任何新页面、屏幕、仪表盘或重设计,在
node scripts/check.mjs <file or url> --brief <brief> --mode quick
分别以桌面端和手机端运行、清除所有 blockers 并应用评审修复前,都不算完成。即使页面看起来已完成或需求只有一行,也要运行;绝不能在质量门禁未检查的页面上报告完成或交付预览链接。诚实报告评分和等级:通过(9)、领先水平(8)或低于领先水平(7 或更低),并列出剩余差距。用户要求时,polish 和 showcase 模式会进行更深入的检查。绝不要在图像生成、构建或检查仍在后台运行时结束当前轮次:等待其完成,然后再结束,因为在一轮式和无人值守会话中,结束当前轮次就意味着工作终止。

Start complete, then remove the tells

先做完整,再去掉模板感痕迹

Every screen starts from the complete, conventional version of itself: what the best products put on that kind of screen, with the affordances people look for (a welcoming header on an onboarding dialog, icons that help people recognize options, a billing toggle and FAQ on pricing, an identity row on a profile). Seenry's slop rules then remove decoration: eyebrows, rails, leading dots, gradient blobs, italic accents, filler. They never remove content, affordances or recognition aids. When a screen looks tidy but thinner than the leaders' version of it, it is unfinished.
Before building any screen, write its inventory: the eight to twelve things the best products put on that kind of screen. Cover the data each item shows (columns, facts, statuses including the edge ones such as out of stock, pending, overdue or failed), the actions on each item (edit, remove, change role, add to list), the actions on the whole screen (create, invite, import, filter, search, sort), and the states (empty, loading, error, a single item, many items). Use Seenry MCP when it is connected to see how leaders lay that screen out; otherwise use what you know of them. Build every inventory item that needs no new backend, wiring actions to handlers the owner can connect, then check the inventory off again when you verify. A screen missing an inventory item a user would look for is unfinished, however clean it is.
每个屏幕都从自身完整、常规的版本开始:采用优秀产品在该类屏幕上的做法,并提供用户期待的操作入口,例如 onboarding 对话框应有欢迎区,帮助用户识别选项的图标,定价页应有计费周期切换和 FAQ,个人资料页应有身份信息行。随后使用 Seenry 的 slop 规则去除装饰:eyebrow 小标题、边轨、前置圆点、渐变色块、斜体强调和填充内容。它们绝不用于删除内容、操作入口或识别辅助。当一个页面看起来整洁,却比领先产品中的同类页面少了内容时,它就尚未完成。
构建任何屏幕前,先写出内容清单:优秀产品会在该类页面上放置的 8 至 12 项内容。覆盖每项内容所展示的数据(列、事实、状态,包括缺货、待处理、逾期或失败等边缘状态)、每项内容上的操作(编辑、移除、更改角色、加入列表)、整个屏幕上的操作(创建、邀请、导入、筛选、搜索、排序),以及各种状态(空、加载、错误、单项、多项)。连接 Seenry MCP 时,使用它查看领先产品如何布局该类屏幕;否则使用你对它们的了解。构建内容清单中所有不需要新增后端的项目,将操作连接到项目所有者可以接线的 handler,然后在验证时逐项核对清单。缺少用户会查找的清单项,无论页面多整洁,都尚未完成。

One token system, everywhere

全局使用一套 token 系统

Studio work reads as decided because it uses few values, each on purpose: the studio sites we measured render 5 to 11 font sizes; Seenry pages rendered 15 to 26, with ten spacing values off the grid and a dozen durations, typed one at a time. Before any layout, new page or existing app, the project has one token file and every style uses it:
  • Type: six to nine steps (display, title, heading, lead, body, small, label), the display step may be fluid with
    clamp()
    defined once in the token. Never a size typed in a component.
  • Space: the 4px scale (4, 8, 12, 16, 24, 32, 48, 64, 96, 128, plus 20, 40, 56, 80 if needed). Component padding, gaps and section spacing come only from it.
  • Radius: at most three plus full; nested corners concentric.
  • Motion:
    --dur-1/2/3
    (120, 180, 240ms) for state changes,
    --dur-scene-1/2/3
    (600, 900, 1200ms) for page choreography,
    --stagger
    , and two or three easings. Every transition and animation uses them. Start from the starter tokens for a new site and change the values to the identity; in an existing project use its tokens or theme (Tailwind's scale, CSS variables). When the owner asks for that cleanup and its sizes, spacing, radii or durations are typed values (color variables alone are not a token system), never convert by hand (in testing that took the whole session and the design scored lower): run
    node scripts/token_convert.mjs <styles folder>
    to see the scale it builds from the values the app already uses (near sizes merged, spacing on the 4px scale, radii merged to three, durations on the motion tokens), then
    --apply
    to write the token block and rewrite the declarations in one pass, and spend the time on design.
    token_lint.mjs
    (run by check.mjs and existing_check.mjs;
    --changed
    for edits in an existing repo) blocks typed values and Tailwind arbitrary values wherever the project has a scale (every new site, Tailwind, or size and spacing variables) and only advises in a legacy stylesheet without one, where the conversion is the owner's call. For new sites the review board also blocks rendered drift: more than nine font sizes, padding or gaps off the 4px scale, more than seven durations or four radii.
工作室作品显得果断,是因为它只使用少量但各有目的的值:我们测量的工作室网站只呈现 5 至 11 种字号;Seenry 页面却呈现 15 至 26 种,另有 10 个间距值偏离网格,并逐项手工定义了 12 个时长。在开始任何布局、新页面或现有 app 之前,项目必须只有一个 token 文件,所有样式都使用它:
  • Type: 6 至 9 个层级(display、title、heading、lead、body、small、label),display 层级可以通过
    clamp()
    实现流体尺寸,并在 token 中统一定义。绝不能在组件中直接输入字号。
  • Space: 4px 刻度(4、8、12、16、24、32、48、64、96、128,必要时再加上 20、40、56、80)。组件内边距、间距和区块间距只能来自该刻度。
  • Radius: 最多 3 个圆角值再加 full;嵌套圆角必须同心。
  • Motion: 状态变化使用
    --dur-1/2/3
    (120、180、240ms),页面编排使用
    --dur-scene-1/2/3
    (600、900、1200ms),并使用
    --stagger
    以及 2 至 3 种 easing。所有 transition 和 animation 都使用它们。
新站点从 starter tokens 开始,再根据识别体系修改值;现有项目则使用其已有 token 或 theme(Tailwind 刻度、CSS 变量)。当项目所有者要求进行这种清理,且字号、间距、圆角或时长是直接输入的值时(仅使用颜色变量不算 token 系统),绝不能手工转换,因为这在测试中会占满整个会话,并导致设计评分下降。运行
node scripts/token_convert.mjs <styles folder>
,查看脚本根据 app 已使用的值构建出的刻度(相近字号合并、间距对齐 4px 刻度、圆角合并为 3 个、时长映射到 motion token),然后使用
--apply
一次写入 token 块并重写声明,把时间花在设计上。
token_lint.mjs
(由 check.mjs 和 existing_check.mjs 运行;在现有仓库中编辑时使用
--changed
)会在项目存在刻度时阻止直接输入的值和 Tailwind 任意值(适用于所有新站点、Tailwind 项目,以及包含字号和间距变量的项目);对于没有刻度的旧样式表,它只给出建议,因为是否转换由项目所有者决定。对于新站点,评审委员会还会阻止渲染漂移:超过 9 种字号、内边距或间距偏离 4px 刻度、超过 7 个时长或 4 个圆角。

Inside an existing project

在现有项目中工作

When the request adds or changes something in an app that already has its own screens and styles ("fix the settings page", "add a pricing page", "add an empty state", "make this modal nicer"), use this path instead of the flow below. The owner wants a pull request they can merge, not a rebrand. A change that looks great but does not look like their app is a failed change.
  1. Read the app first. Find its styling method (Tailwind utilities, CSS modules, plain CSS with tokens, styled-components), its component library (shadcn, Radix, its own), its tokens, and two or three neighbouring screens. Render one of them. The new work must look like the same team made it: same type, colors, radius, spacing, density and component style. Bring Seenry's craft (hierarchy, alignment, spacing rhythm, readable sizes, states, copy) inside that system; do not import Seenry's defaults, kits, fonts or palette over it. Where the app's own values have drifted (several near font sizes, 9px and 14px paddings beside its 8 and 16), the screens you touch snap to its scale, or to the token file
    token_convert.mjs
    builds from its values (see One token system); the app gets more consistent, never a second system.
  2. Keep the behavior, fix the presentation all the way. Every existing action, field, setting and piece of information architecture keeps working the way it did: no new save models, no persistence the app did not have, no tabs that are really anchors, no renamed actions ("Upgrade" stays "Upgrade"). Presentation is yours to fix completely, and a timid cleanup is a failed change too: replace raw controls with the app's own components (its inputs, selects, buttons; switches for on/off preferences), give each group the same container and label layout the app uses elsewhere, put destructive actions in a calm, clearly separated zone with a normal-case outlined or destructive button, fix shouting copy ("DELETE WORKSPACE" becomes "Delete workspace"), and add short helper text where a setting is unclear. The bar is that the changed screen becomes the best-looking screen in their app. Copy is presentation too: cut long paragraphs to one or two sentences, make first-use actions say what they do ("Create your first project", not "New project"), and where someone has to decide something, fold the guidance or example into the sentence that is already there instead of adding another line. An onboarding or welcome dialog opens with a centered welcome: the brand's mark or one small illustration on the dialog surface or a very light tint (never a heavy saturated band), a friendly title and one sentence. The backdrop dims the page clearly (around 40 to 50% of the ink color) at every width so nothing behind competes. Checkboxes and radios are styled in the brand (rounded, filled with the accent when selected, checkmark drawn), never the browser default. On phone, a short question and its stepper share one row. Choices are tiles with a small icon from the app's icon set, a clear selected state (tint plus check) and real multi-select controls for multi-select questions; numbers use a stepper. The footer pairs the primary action with the secondary one as a real button, not a faint link. Dialogs keep a visible close button, and focus rings appear for keyboard focus only (
    :focus-visible
    ), never as a ring on a control the moment a dialog opens. Use product and plan names exactly as the owner wrote them. Add the sections that kind of surface normally has, and nothing decorative beyond them. Screen-specific rules (a redesigned profile, collections, settings lists, empty states, pricing and other new surfaces) are in surfaces; read the part for the screen you are changing.
  3. Write in the project's idiom. Tailwind and shadcn projects get utilities and the existing components, never a block of page-specific rules in the global stylesheet. Plain-CSS projects get styles beside the component using the existing tokens. Use tokens and existing variables, never new hard-coded hex values.
  4. Research when the screen changes shape. A new surface (a pricing page, an onboarding flow, an empty state) or a request to fix how a whole screen looks ("the settings page looks ugly", "make the dashboard better") gets one quick Seenry research call before you edit:
    research_design_brief
    with the request, family
    websites
    or
    apps
    , an
    asset_query
    naming the screen (settings, pricing, team members) and two or three structural queries, then one
    compare_measurements
    on the references you keep. Take the parts leaders put on that screen and their measured spacing and type into the edit, in the project's own components. Skip research for a bug, a single control or one state. No idea generation, three-way exploration, signature component, design sheet or critic loop unless the owner asks for a redesign.
  5. Motion by default, from tokens. Unless the owner says no motion, every state change on the screens you touch gets a transition from the motion tokens: hover and press (
    --dur-1
    ), toggles, tabs with a sliding indicator and segmented controls (
    --dur-2
    ), dialogs, sheets, menus, toasts and list changes (
    --dur-3
    , enter with
    --ease-out
    , leave faster), loading as skeletons that cross-fade to content, and numbers that change in place. Use the app's motion library if it has one (Framer Motion, the component library's transitions), otherwise CSS. Keep a reduced-motion version. Interface motion only: no scroll scenes or page choreography in an app.
  6. Verify the way a reviewer would. Build. Render the changed screen at 1440 and 390, check every state you touched, and render one untouched screen to confirm nothing else moved. Run
    node scripts/existing_check.mjs <url of the changed screen> --project .
    (about a minute): it runs the review board, the token lint on the files you changed, the motion scan and a product-design review of the screen at 100% and on phone. Clear the blockers your change touched or introduced and, in a project with a token scale, every typed value in the files you changed (in a legacy stylesheet without one, use the values it already has; do not convert unless the owner asks), then apply the review's fixes once, most visible first (in testing, its notes were what separated a good team's screen from a Linear-level one: 13px+ meta text at 4.5:1, one control height, a clear save model, no dead space on phone). Run it once more and stop.
  7. Leave the repo clean. Screenshots, notes and scratch files go outside the project (for example
    $TMPDIR/seenry-<project>/
    ), never into
    .seenry/
    or the working tree. Do not create
    DESIGN.md
    unless the project already has one or the owner asks. The diff contains only the product change.
Report in three or four sentences: what changed, what stayed the same on purpose, and anything the owner should decide.
当请求要在已有自己的屏幕和样式的 app 中新增或修改内容时,例如“修复设置页”“添加定价页”“添加空状态”“让这个 modal 更好看”,应使用下面的路径,而不是后续流程。项目所有者需要的是可合并的 pull request,而不是品牌重塑。看起来很棒却不像其所属 app 的改动,是失败的改动。
  1. 先阅读 app。 找出其样式方式(Tailwind utilities、CSS modules、使用 token 的普通 CSS、styled-components)、组件库(shadcn、Radix、自研组件)、token,以及 2 至 3 个相邻屏幕。渲染其中之一。新工作必须像同一团队完成:使用相同的字体、颜色、圆角、间距、信息密度和组件风格。将 Seenry 的工艺(层级、对齐、间距节奏、可读字号、状态、文案)融入该系统;不要把 Seenry 的默认设置、组件包、字体或色板覆盖到它之上。当 app 自身的值已经漂移时,例如同时存在几个相近字号,以及 8、16 旁边又出现 9px、14px 内边距,所触及的屏幕应回归其刻度,或回归
    token_convert.mjs
    根据现有值生成的 token 文件(参见全局使用一套 token 系统);app 会变得更一致,绝不能形成第二套系统。
  2. 保留行为,并把呈现彻底修好。 每个现有操作、字段、设置和信息架构都必须继续按原方式工作:不新增保存模型,不添加 app 原先没有的持久化,不用锚点伪装成标签页,不重命名操作(“Upgrade”应保持为“Upgrade”)。你可以彻底修复呈现,但过度保守的清理同样是失败的改动:用 app 自己的组件替换原始控件(其输入框、select、button;开关型偏好使用 switch),让每一组沿用 app 其他位置使用的容器和标签布局,将破坏性操作放入平静且明确分隔的区域,并使用常规场景下的 outlined button 或 destructive button;修改过于 shouty 的文案(“DELETE WORKSPACE”改为“Delete workspace”),并在含义不清的设置旁添加简短辅助文本。标准是:改动后的屏幕成为其 app 中最好看的屏幕。
    文案也属于呈现:把长段落缩减为 1 至 2 句,让首次使用操作明确表达行为(“Create your first project”,而不是“New project”);当用户需要做决定时,将指导或示例融入已有句子,而不是再增加一行。onboarding 或欢迎对话框应以居中的欢迎内容打开:在对话框表面放置品牌标记或一幅小插画,也可使用极浅的色调(绝不使用厚重的高饱和色带),配以友好标题和一句话。背景遮罩应在所有宽度下清晰压暗页面,约为 ink 颜色的 40% 至 50%,确保后方内容不争夺注意力。
    Checkbox 和 radio 必须采用品牌样式(圆角、选中时填充强调色并绘制 checkmark),绝不能使用浏览器默认样式。在手机上,简短问题及其 stepper 位于同一行。选项使用 tile,并配有一个来自 app 图标集的小图标、清晰的选中状态(色调加勾选);多选问题使用真正的多选控件;数字使用 stepper。页脚将主操作与次操作配对,主操作必须是真正的 button,而不是浅淡的链接。对话框保留可见的关闭按钮,焦点环只在键盘聚焦时出现(
    :focus-visible
    ),绝不能在对话框刚打开时就在控件上显示焦点环。产品和套餐名称必须严格使用项目所有者写下的形式。添加该类界面通常应具备的区块,除此之外不添加装饰。
    各屏幕的专项规则(重设计的个人资料、收藏、设置列表、空状态、定价及其他新界面)位于 surfaces;读取与正在修改的屏幕对应的部分。
  3. 使用项目自身的表达方式。 Tailwind 和 shadcn 项目使用 utilities 和现有组件,绝不在全局样式表中添加针对单个页面的规则块。普通 CSS 项目将样式放在组件旁边,并使用现有 token。使用 token 和已有变量,绝不新增硬编码 hex 值。
  4. 当屏幕形态发生变化时进行调研。 新界面(定价页、onboarding 流程、空状态),或要求修复整个屏幕观感的需求(“设置页很难看”“把仪表盘做得更好”),应在编辑前进行一次快速 Seenry 调研:调用
    research_design_brief
    ,传入请求、
    websites
    或
    apps
    family、指定屏幕名称的
    asset_query
    (设置、定价、团队成员等)以及 2 至 3 个结构性查询;然后对保留的参考执行一次
    compare_measurements
    。把领先产品在该屏幕上放置的内容及其实测间距和字体纳入改动,同时仍使用项目自身的组件。修复 bug、单个控件或一种状态时无需调研。除非项目所有者要求重设计,否则不要生成创意方案、进行三向探索、制作标志性组件、设计表或评审循环。
  5. 默认使用动效,并来自 token。 除非项目所有者明确不要动效,否则所触及屏幕上的每次状态变化都应使用 motion token 中的 transition:hover 和 press 使用
    --dur-1
    ;toggle、滑动指示器的 tab 和 segmented control 使用
    --dur-2
    ;dialog、sheet、menu、toast 和列表变化使用
    --dur-3
    ,进入时采用
    --ease-out
    ,离开时更快;加载状态使用 skeleton 交叉淡入内容;数字在原位变化。若 app 已有 motion library,例如 Framer Motion 或组件库自带的 transition,则使用它,否则使用 CSS。必须提供 reduced-motion 版本。这里只做界面动效:app 中不使用滚动场景或页面编排。
  6. 像评审者一样验证。 构建页面。在 1440 和 390 宽度下渲染改动后的屏幕,检查所触及的每种状态,并渲染一个未改动的屏幕,确认其他页面没有受到影响。运行
    node scripts/existing_check.mjs <url of the changed screen> --project .
    (约需一分钟):它会运行评审委员会、对改动文件执行 token lint、执行 motion scan,并在 100% 和手机宽度下进行产品设计评审。清除改动触及或引入的 blockers;对于具有 token 刻度的项目,还要清除改动文件中的每个直接输入值(对于没有刻度的旧样式表,沿用它已有的值,除非项目所有者要求,否则不要转换),然后一次性应用评审建议,优先处理最明显的问题。在测试中,正是这些建议将一个普通团队的屏幕提升到 Linear 级别,例如 13px 以上且对比度达到 4.5:1 的元文本、统一的控件高度、清晰的保存模型,以及手机上没有无意义空白。再运行一次,然后停止。
  7. 保持仓库整洁。 截图、说明和临时文件应放在项目之外,例如
    $TMPDIR/seenry-<project>/
    ,绝不能放入
    .seenry/
    或工作树。除非项目已经有
    DESIGN.md
    或项目所有者要求,否则不要创建它。diff 中只能包含产品改动。
用 3 至 4 句话汇报:改了什么、刻意保留了什么,以及项目所有者还需要决定什么。

One-line requests for a new site

新站点只有一行需求时

When the whole brief is one line ("landing page for my habit tracker", "I'm a wedding photographer, need a portfolio site"), the person expects a complete site they could publish today, not a restrained sketch, and they are waiting for it. Run the flow below in quick mode unless the person asks for more; aim to finish in about ten to fifteen minutes, as fast as any design skill, because the quality comes from the research, the idea and the rules, not from review loops (in testing, first builds already scored at leader level and long loops added 0–1 point). Preview on the dev server while you iterate and run the production build once at the end; when check.mjs lists blockers, fix every one of them before running it again rather than one per round: one
research_design_brief
call plus one
borrow_references
call, reading pixels only for the two strongest results; build three identity boards for
pick.mjs
(step 4; the pick is what gives the page its identity, so never skip it); start all imagery in one background batch right after the pick and build while it runs; and run
check.mjs --mode quick
: it clears the automatic blockers, asks the blind critic once, and you apply its fixes once and deliver with the score and level (pass 9, leader level 8, below leader level 7 or less). Use
--mode polish
(up to four critic rounds, stopping at leader level) when the person asks for polish or a production-ready page, and
--mode showcase
(the full gate with a second direction, an hour or more) only when they ask for a showcase, a portfolio piece or the best possible result. In quick mode, a score below leader level is reported as such with the critic's top gaps, never as finished work. The one-call research budget above is for quick mode only: in polish and showcase modes do all of step 2, which means pulling at least three category leaders by name (capture the missing ones live with
bar.mjs
), at least three leaders of the composition class (for software: Linear, Brex, Midday, Retool, Intercom, Metronome and the like), and their full pages, not only their heroes. Hold the result to these:
  • Include what that kind of site always has. App landing page: what the product is and who it is for in the first line, the product shown large and real, three to five features each shown rather than listed, proof, pricing when it is a paid product or the navigation mentions it, a closing call to action, footer. Portfolio: the person's name and strongest work first, galleries or case studies, an about section with a portrait, process or packages, kind words from clients, an inquiry form. Dashboard: believable populated data, working filters, every figure readable.
  • Every navigation link leads to something that exists on the page or in the build.
  • Restraint is not sparseness. Calm comes from hierarchy and spacing, never from leaving content out. Each section carries specific material at real size; a section that is mostly empty tint or a small mockup in a large field is unfinished.
  • Write as the owner. Copy is in their voice with realistic placeholders they can swap; stock imagery stands in for their work, so it carries no visible creator credits (those go on a credits page or footer link), and the page never names another person as its author.
  • The claim is specific and leads. The headline states this product's concrete promise with a noun, fact or mechanism that only this product can claim (set it as type, not as a giant standalone numeral) (for an invoicing tool: "Paid in 2 days, not 30"; for a bike shop: "Flats fixed while you wait"), never a mood any competitor could print ("A little warmth. Anywhere."). Never reuse an example from this file: write the claim from this brief. The most ownable idea is the first screen, not a strip further down.
  • Design the middle, do not list it. Each section has one dominant element at large scale (the product doing one thing, a photograph, one number, one quote) and clearly smaller support. Never three or four equal cards unless the content is a true set of equals; feature one and let the rest support it. Consecutive sections change composition (split, full-bleed image, dominant product moment, dense data, single quote, schedule): the same heading, paragraph and cards rhythm twice in a row reads as a template.
  • Proof proves the headline. Every feature visual shows the specific claim beside it working (the missed-day recovery screen, the schedule with real spots left, the before and after), not a generic dashboard or a mood photo.
  • One memorable move. Restraint alone reads as a competent template. The identity's graphic device and type voice are the move, carried from the hero to the footer at real scale. Everything else stays quiet so it can be remembered.
  • Its own identity. The accent and type come from this product's idea, never the default SaaS indigo, violet or blue, and never the common template of cream background, terracotta accent and italic serif accent words. Type comes from what the leaders use, measured from the kept references (see type): usually one refined neo-grotesk, tuned tight; untuned Inter at weight 700 is the tell, not Inter itself.
  • A decided identity, loud or quiet. Pages that win look decided, in one of two registers chosen from the brand's voice (or from the reference the person shows). Loud: one saturated or deep brand color at full strength in one or two large fields against near-black ink and neutral surfaces, and at least one dark or fully colored section. Quiet premium (calm brands, finance, wellness, software that sells trust; the register of Stripe, Linear and most refined SaaS): warm off-white and ink, no brand-color fields, photography or the product as the only color, a headline of modest size with its second line in the secondary text color, generous white space and soft containers, and pricing, FAQ and footer as calm and carefully made as the hero. Both registers keep readable text at 14px and up. When the person attaches or links a reference, follow its register; the identity step works inside it.
  • Write it as their real site. Use believable names, prices, hours and copy, and never print a note on the page that the content is sample, placeholder or yours to replace (check.mjs blocks it). Tell the owner what to swap in your summary and in
    DESIGN.md
    instead.
  • Consumer products need warmth. Habit, health, food, money, family and hobby apps are bought on feeling as much as features. Give the page one emotional anchor at real size: a photograph of the life moment the product serves, a full-bleed band in the brand color, or the product in a hand or a real setting. Vary section grounds (white, a tinted band, one dark or photographic band) instead of separating everything with hairlines.
  • Product visuals are designed screens in real devices. Never draw a phone or laptop from divs, and never put a table or spreadsheet inside one. Design the app screen as its own page to app standards, render it with
    scripts/mockup_screen.mjs
    , frame it with device mockups, and compose it with imagery (a tile row of art or photographs with the device across it, a device in a photograph, an angled pair, or UI cards over a painterly field).
  • Imagery first, even without a generator. Check the image route before building (
    image.mjs
    with one test prompt, or seenry-assets
    generate
    with an API key). When none works, say so in the report and art-direct one set from The Met instead, never a type-only page:
    python3 ../seenry-assets/scripts/assets.py art-set --style <family> --subject "<two or three subject words>" --count 8 --out img
    . Choose one family for the whole page from the brand's voice:
    impressionist
    (calm, warm, human: finance, wellness, hospitality, consumer apps),
    dutch
    (food, craft, objects, interiors),
    japanese
    (precise and graphic: software, tools, travel),
    drawings
    (quiet, editorial, architectural),
    american
    (open landscape and light),
    photographs
    (black-and-white documentary). It trims the museum frames and drops works whose light or color break the set; look at the set together and drop any that still do. Use the paintings the way the quiet kit does: cropped tight as color fields behind real product cards and the device, one per tile, never a framed museum picture, and credit them in the footer. Openverse photographs (
    assets.py images
    ) and product screens in device mockups fill the rest. The owner preferred this to every generated set.
  • Show the product, do not repeat it. One large product moment in the hero and at most two more, each showing something different (the daily check-in, the weekly view, a reminder). The same list or calendar appearing in several sections reads as padding. A landing page has no working forms other than sign-up or the waitlist; a try-it demo is a visual, not a second form competing with the call to action.
  • Landing-page type is larger than app type. Body 18, supporting copy 16 and nothing a visitor should read under 15 at 1440, including labels inside product mockups.
当整个 brief 只有一行时,例如“给我的习惯追踪器做一个落地页”“我是婚礼摄影师,需要一个作品集网站”,用户期待的是一个今天就能发布的完整网站,而不是克制的草图,并且正在等待结果。除非用户要求更多,否则按 quick 模式执行下面的流程;目标是在约 10 至 15 分钟内完成,与任何高效设计 skill 一样快,因为质量来自调研、创意和规则,而不是反复评审。在测试中,首次构建已经达到领先水平,漫长循环只增加了 0 至 1 分。迭代时在开发服务器上预览,并在最后运行一次生产构建。
当 check.mjs 列出 blockers 时,在再次运行前一次性修复全部问题,而不是每轮只修一个:执行一次
research_design_brief
和一次
borrow_references
,只读取两个最强结果的像素;为
pick.mjs
构建三个 identity board(第 4 步;选择结果决定页面的识别特征,因此绝不能跳过);选择完成后,立即将全部图像生成任务放入一个后台批次,并在其运行时继续构建;运行
check.mjs --mode quick
:它会清除自动 blockers,调用一次盲审,并应用一次其修复,然后交付评分和等级(通过 9、领先水平 8、低于领先水平 7 或更低)。用户要求 polish 或可上线页面时,使用
--mode polish
(最多 4 轮评审,达到领先水平即停止);只有用户要求 showcase、portfolio 作品或最佳效果时,才使用
--mode showcase
(完整门禁并包含第二种方向,通常需要一个多小时)。
quick 模式只有上述一次调研预算;在 polish 和 showcase 模式中必须完整执行第 2 步,这意味着按名称拉取至少 3 个该品类领先者(缺失的实时通过
bar.mjs
捕获),以及至少 3 个相同 composition class 的领先者(软件领域包括 Linear、Brex、Midday、Retool、Intercom、Metronome 等),并查看它们的完整页面,而不只是 hero。
最终结果必须满足以下要求:
  • 包含这类网站始终应有的内容。 App 落地页:第一行说明产品是什么以及面向谁;大尺寸真实展示产品;3 至 5 个功能以展示而非罗列的方式呈现;证据;付费产品或导航提到价格时提供定价;结尾 CTA;页脚。作品集:先展示姓名和最强作品;画廊或案例研究;带肖像的关于板块;流程或套餐;客户评价;咨询表单。仪表盘:可信且有内容的真实数据、可工作的筛选器,以及每个数字都清晰可读。
  • 每个导航链接都指向实际存在的内容,无论是在页面上还是在构建结果中。
  • 克制不等于稀疏。 平静来自层级和间距,绝不来自删除内容。每个区块都包含按真实尺寸呈现的具体材料;主要由空色块或小型 mockup 占据大片空间的区块尚未完成。
  • 以项目所有者的口吻写作。 文案采用其语气,并使用可替换的真实占位内容;图片素材代替其作品,因此不显示创作者署名,署名应放在 credits 页面或页脚链接中;页面绝不把另一个人写为作者。
  • 主张必须具体并具有主导性。 标题陈述产品具体的承诺,其中包含只有该产品才能提出的名词、事实或机制,并将其作为字体排版,而不是一个巨大的独立数字。例如发票工具可写“Paid in 2 days, not 30”,自行车店可写“Flats fixed while you wait”,绝不能写任何竞品也能印出的情绪化句子,例如“A little warmth. Anywhere.”。不要复用本文件中的示例,必须根据 brief 重新撰写。最具辨识度的创意应出现在首屏,而不是页面更下方的窄条区域。
  • 设计中段,而不是罗列中段。 每个区块都有一个按大尺度呈现的主导元素,例如正在完成某件事的产品、照片、一个数字或一段引语,并配以明显更小的辅助内容。除非内容确实是同级项目集合,否则不要使用 3 至 4 张完全相等的卡片;突出一项,其余作为支持。连续区块应改变 composition(分栏、全幅图片、主导产品瞬间、密集数据、单段引语、日程),连续两次使用相同的标题、段落和卡片节奏会显得像模板。
  • 证据必须证明标题。 每个功能视觉都展示标题所承诺的具体内容及其实际效果,例如错过一天后的恢复界面、仍有可用时段的日程、前后对比,而不是通用仪表盘或情绪照片。
  • 只有一个令人难忘的动作。 单靠克制只能显得像能力尚可的模板。识别体系中的图形装置和字体语气才是记忆点,应以真实尺度从 hero 延续到页脚。其余内容保持安静,使这个动作能够被记住。
  • 必须拥有自己的识别特征。 强调色和字体来自产品创意,绝不使用默认 SaaS 靛蓝、紫罗兰或蓝色,也避免常见的米色背景、赤陶色强调色和斜体衬线强调词这一模板组合。字体来自领先产品所使用的字体,并根据保留的参考进行实测(参见 type):通常是一种经过精细调节的新怪诞体;未调节的 Inter 700 才是问题所在,问题并非 Inter 本身。
  • 识别体系必须果断,无论张扬还是安静。 优秀页面会在两种状态中选择一种,并从品牌语气或用户提供的参考中确定状态。张扬: 一个高饱和或深色品牌色以完整强度出现在 1 至 2 个大面积色场中,与接近黑色的 ink 和中性表面形成对比,并至少包含一个深色或全彩区块。安静高级(适用于平静品牌、金融、健康、强调信任的软件,也是 Stripe、Linear 和多数精致 SaaS 的状态):使用温暖的米白和 ink,不使用品牌色大面积铺陈,让摄影或产品成为唯一的色彩;标题尺寸适中,第二行使用次级文字颜色;留白充足,容器柔和;定价、FAQ 和页脚也要像 hero 一样平静且精心制作。两种状态都要求可读文字不小于 14px。当用户附带或链接参考时,遵循其状态;识别体系步骤在该状态内部完成。
  • 把它写成用户真正的网站。 使用可信的名称、价格、时间和文案;绝不在页面上打印说明内容为示例、占位符或供用户替换的备注,check.mjs 会阻止此类内容。应在总结和
    DESIGN.md
    中告知用户需要替换哪些内容。
  • 消费级产品需要温度。 习惯、健康、食物、金钱、家庭和兴趣类 app 的购买决策在很大程度上取决于感受,而不只是功能。页面应提供一个按真实尺度呈现的情感锚点:一张展现产品所服务生活瞬间的照片、一条全幅品牌色带,或一件被拿在手中或处于真实场景中的产品。交替使用不同区块背景(白色、淡色带、深色或摄影背景),不要用发丝分隔线切开所有内容。
  • 产品视觉是真实设备中的设计屏幕。 绝不能用 div 绘制手机或笔记本电脑,也不要把表格或电子表格塞进设备中。将 app 屏幕作为独立页面按 app 标准设计,使用
    scripts/mockup_screen.mjs
    渲染,再通过 device mockups 装框,并与图像组合,例如图像瓦片行中横跨设备、照片中的设备、倾斜的一对设备,或浮在绘画感背景上的 UI 卡片。
  • 图像优先,即使没有生成器。 构建前检查图像路径(使用一个测试提示词运行
    image.mjs
    ,或使用带 API key 的 seenry-assets
    generate
    )。如果都不可用,应在报告中说明,并从 The Met 策划一组素材,绝不能做成纯文字页面:运行
    python3 ../seenry-assets/scripts/assets.py art-set --style <family> --subject "<two or three subject words>" --count 8 --out img
    。根据品牌语气为整页选择一个 family:
    impressionist
    (平静、温暖、人文,适用于金融、健康、招待和消费 app)、
    dutch
    (食物、手工、物品、室内空间)、
    japanese
    (精确且图形化,适用于软件、工具、旅行)、
    drawings
    (安静、编辑感、建筑感)、
    american
    (开阔风景与光线)、
    photographs
    (黑白纪实)。脚本会裁掉博物馆画框,并移除光线或颜色破坏整组一致性的作品;应将整组作品放在一起查看,并移除仍然不协调的作品。像 quiet kit 那样使用这些画作:紧密裁切后作为真实产品卡片和设备背后的色块,每个瓦片一张,绝不展示装框的博物馆画作,并在页脚署名。其余素材使用 Openverse 照片(
    assets.py images
    )和设备 mockup 中的产品屏幕。用户更偏好这种方式,而不是每一组都使用生成图。
  • 展示产品,但不要重复产品。 hero 中有一个大型产品瞬间,之后最多再有两个,每个展示不同内容,例如每日打卡、周视图和提醒。相同列表或日历在多个区块反复出现会显得只是填充。落地页除注册或 waitlist 外没有其他可工作的表单;try-it 演示只是视觉展示,不能成为与 CTA 竞争的第二个表单。
  • 落地页字号大于 app 字号。 正文为 18px,辅助文案为 16px;在 1440 宽度下,包括产品 mockup 内的标签在内,任何访客需要阅读的文字都不得小于 15px。

Taste

品味

Taste is trained, not invented: it comes from looking hard at the best work and asking why it feels right. Seenry gives you the library for that; use it every time.
  • Unseen details compound. Nobody notices a 1px hairline, a concentric corner, tabular figures or a 140ms hover on its own. Together they are the difference between "tidy" and "expensive". Do all of them.
  • Remove before you add. Every element must help someone read, choose or act. When a page feels plain, the fix is almost always better material, scale or spacing, not more decoration.
  • One idea per view, carried all the way. One dominant element, one owned detail, one signature motion moment. Everything else is quiet so those can speak.
  • Real over representational. Real product UI, real photography, real data and specific copy beat any illustration of them.
  • Motion is part of the design, not a finish. A page that does not respond feels unfinished however good the stills look.
品味是训练出来的,不是凭空发明的:它来自认真研究最优秀的作品,并追问它为何感觉正确。Seenry 为此提供了资料库;每次都应使用。
  • 看不出的细节会累积。 没人会单独注意 1px 发丝线、同心圆角、等宽数字或 140ms hover,但组合起来,它们就是“整洁”和“昂贵”之间的差别。全部做到。
  • 先减后加。 每个元素都必须帮助用户阅读、选择或行动。页面显得平淡时,解决方案几乎总是更好的材料、尺度或间距,而不是更多装饰。
  • 每个视图只有一个创意,并贯彻到底。 一个主导元素、一个自有细节、一个标志性动效瞬间。其余内容保持安静,让它们能够发声。
  • 真实优于象征。 真实产品 UI、真实摄影、真实数据和具体文案胜过它们的插画替身。
  • 动效是设计的一部分,而不是收尾。 页面没有响应,无论静态画面多好,都像尚未完成。

The flow

流程

  1. Brief (2 minutes). Audience, the one job of the surface, the real content, what is fixed. One sentence of intent.
  2. Research with current Seenry MCP. Prefer connected tools: load
    get_library_guide
    , then
    research_design_brief
    with the actual brief, an explicit reference family and up to three focused queries. Inspect actual returned pixels and read coverage, gaps, constraints and the source-backed decision rubric. For scripted access run
    node scripts/research.mjs --brief BRIEF.md --type <landing|product|dashboard|studio|pricing|app> --family <websites|sections|apps|branding|decks|motion> --terms "<up to three comma-separated queries>"
    . It uses
    SEENRY_PRO_KEY
    already configured in the environment; never ask for a secret in chat. The bounded script makes three tool calls, planned maximum 11 credits, and preserves results in
    .seenry/research/
    . Authentication, quota or tool errors stop the run. Without a script key it writes a clearly unresearched manual handoff; use connected MCP or permitted web research, not an invented pack.
    • Draft the idea before you look. Before the first research call, write step 3's claim, proof and five candidate ideas in
      .seenry/idea.md
      (ideas only: no palette, typeface or layout). Write the brief and queries from the product, the audience and the job the page does ("habit tracker app for people who quit streak apps", queries "habit tracker", "fitness app", "streak"), never from a look you already have in mind. The survey tells you what the category always does; it does not choose your color, type or composition.
    • Study the survey before choosing. The research result carries a contact sheet of up to eight candidates, one per product, with thumbnails. Look at every one and write two lists at the top of
      .seenry/refs/kept.md
      : conventions, what most of them do that helps people use the page (navigation, message order, where the action sits, pricing anatomy), which you meet; and clichés, what most of them do for identity (the same hue family, hero arrangement, mockup angle, type voice), of which you share at most one. Keep two or three screens for craft and say which lesson each sets (spacing, type detail, image finish, density). Use category words in queries ("analytics hero", "payments pricing", "meal kit onboarding"); the library matches each site's industry. If the category is still thin after that (fewer than five in-category candidates), also run
      scripts/bar.mjs
      on two or three category leaders' live sites and keep those as the craft bar; use the library only for structure. A weak survey (fewer than five candidates from this product's category, or ones you would not show the client) means a better query, not settling: try the category's other names and its nearest neighbours (habit tracker, then fitness app, journaling app, streak).
    • Then read deeper only where it pays: the two deep reads carry measured evidence; open a kept survey item with its
      inspect
      call when you need its pixels at full size.
    • Save what you kept as the bar, as decision cards. Put each kept reference's screen in
      .seenry/refs/
      (open it at full size with its
      inspect
      call and save the image; the research script already saved survey thumbnails under
      .seenry/research/img/
      ) and write
      .seenry/refs/kept.md
      with one card per file: the job that screen does; the decision it makes (message order, how it proves the claim, density, rhythm, where the eye lands first); its measured numbers (headline and body size, radius, control padding and brand color, from the research result's
      measured
      block,
      compare_measurements
      or
      get_tokens
      ); the craft lesson you will meet or beat; and the one thing you will deliberately not do because it is this category's cliché. A studio studies to decide, not to trace.
    • Study the middle of the page too, not only the hero. After the survey, run one more search for the page's most important body section (features and proof, pricing, schedule, work, menu) with
      search_sections
      or a sections-family
      research_design_brief
      , keep the one or two that compose it best, and give each a decision card: how it makes one thing dominant, how it varies from the section before it, and how its visual proves the claim.
    • Borrow from outside the category. Call
      borrow_references
      with the job your leading idea must do and the category to leave out (a habit tracker whose idea is "a streak that forgives" might find scoreboards, almanacs or learning-app streak charts). Keep one, inspect it and give it a card. The ownable move comes from here and from the idea, never from the category survey.
    • Keep one studio-grade reference in the bar. Besides category leaders, save one studio site or a frame from a rebrand film to
      .seenry/refs/
      with its card in
      kept.md
      , so the critic judges the page against studio work, not only against the category's conventions.
    • Give references different jobs. Category references set the conventions and the craft bar; the outside reference feeds the idea. The hero composition, color world and display type come from the chosen idea and must not match the category's most common arrangement, and no section reproduces a single reference's arrangement, imagery treatment or signature device. check.mjs shows the kept screens to the blind critic: the page passes when it reaches their craft class (reference fit 7 or more) and copies none of them.
    • Name the category's best and compose in their class. Write down at least three of the best brands in this exact category by name (independent watchmaking: Laurent Ferrier, Akrivia, NOMOS; invoicing: the two or three leaders, not whatever matched the word) and pull them by name (
      list_sites {q: "<brand>"}
      ,
      search_designs {q: "<brand>"}
      or a named
      research_design_brief
      query), not by category word. The library does not hold every brand: when a leader is missing, capture its live site with
      node scripts/bar.mjs --type <landing|product> --sites <domain>,<domain>
      (bot checks are skipped, never bypassed) and keep those screens in
      .seenry/research/bar/
      as the bar. Never settle for whatever matched the category word because the leaders were not indexed. Record in
      kept.md
      the composition class they share: the object owns the frame (luxury goods, hardware, food, hospitality), a product moment at real scale (software), an editorial or type-led page (media, studios, culture), a dense working surface (data tools). The hero is built in that class with its own idea; the leaders set the class, the average site's arrangement is what to avoid. A software split (headline left, product boxed in a rounded card right, tabs or toasts around it) is never the composition for a physical or luxury product. The critic scores
      category_fit
      against exactly this.
    • Read
      pack.md
      and
      evidence.json
      , inspect one or two task-relevant sources at full size, and save inspected craft targets to
      .seenry/refs/
      for comparison. Adjacent mobile references do not establish desktop product fit. The
      apps
      family contains captured mobile apps; choose websites/sections for web surfaces unless a mobile analogy is intentional.
    • In
      DESIGN.md
      , list the references you kept and the ones you set aside, explain what each kept source proves, what you adapt and which relationships remain unverified. The design is your own: take patterns, never copy a page. The final summary credits the kept references by name. Query matching and numerical critic scores do not certify taste.
    • Measure before you set type, radius and spacing. Call
      compare_measurements
      on 2 to 4 of the references you chose (5 credits) for their shared headline and body sizes, radii and control padding, or
      get_tokens
      on one page for its colors and families. Record them in
      DESIGN.md
      and use them as floors and ceilings for reading and control craft only (body size and line height, control height and padding, radius proportion, section spacing; the research result's
      measured.floors
      ). Display size, headline scale, palette and composition are never averaged: the identity sets them, and going past the measured headline range is expected when the idea calls for it. Without MCP, use benchmarks.
    • For complete flows, split-page captures, measured design context, motion and PDF rules follow current MCP research. Study recordings only when relevant motion evidence is needed.
  3. Find this brand's idea. Follow design thinking: write the product's claim, proof, moment and material; generate at least five ideas with different designer moves (make the claim literal, let them do it now, proof inside the language, before and after, a physical truth, the detail that proves care, take something away, change the unit); score them on truth, clarity, distinctiveness, restraint and buildability; choose one and carry it through hero, signature moment, imagery, copy and one detail. Save it as
    .seenry/idea.md
    . Kits and references are how to build the idea, never the idea; two different briefs should never end up with the same signature. Then turn the idea into form: write
    .seenry/identity.md
    and its board, following Identity first. The idea is the claim; the identity is how it looks, and a claim set in a default layout is still a template.
  4. Explore three identities, then pick blind. The identity boards are the exploration: there is no separate first-screen sketch round. Build three identity boards, quickly (about ten minutes for all three; they are sketches that decide the direction, and the drawn layer and motion score are written briefly on them and built fully in the page), from your three highest-scoring ideas in
    .seenry/idea.md
    (
    .seenry/explore/a.html
    ,
    b.html
    ,
    c.html
    ), each following Identity first with its own type voice, color world, device and image treatment, each fitting one 1440×900 screen with its two posters (the hero and the hardest ordinary section). With Seenry MCP, at most one follows the category conventions as the safe control and one is built on the outside-category reference. For an app or software product whose voice is not loud, the page is built from the quiet premium kit (the owner's reference standard; the blind pick favored bolder boards and the owner rated those 7/10), so the three boards differ in the imagery, the app screen's idea and the copy, not in the layout or the register. When the person attaches or links a reference, follow its register and level closely but never its layout one to one: change the hero composition and at least two sections (the kit lists alternatives), and the owner rejected an exact copy even when it looked good. They must differ in what the visitor sees first (a working product moment, the claim made literal, a single photograph, type alone), not only in arrangement, and none may repeat an identity in
    ~/.config/seenry/history.json
    . Run
    node scripts/pick.mjs .seenry/explore/a.html .seenry/explore/b.html .seenry/explore/c.html --brief <brief> --refs .seenry/refs/<a>,<b>
    , copy the winner to
    .seenry/identity.html
    , write
    .seenry/identity.md
    from it and record it at once with
    node scripts/history.mjs
    (so builds running beside this one can avoid it), fold in what the pick says to take from the others, and record the chosen idea in
    idea.md
    . The winning board's hero poster becomes the first screen. Studios never ship their first composition; neither does Seenry.
  5. Direction. The winning identity from
    .seenry/identity.md
    (rewrite it if the pick changed it): type voice, color world, device, image treatment, voice line and motion behavior, plus the radius family and the composition model. Pick the obvious premium answer before a clever one. For a new or changed identity, also follow
    seenry-branding
    (its skill) and its project guidelines.
  6. Motion spec. Read seenry-motion now. When reference motion is relevant, retrieve and play the selected recordings (signed links expire), pull frames around their most-movement window with
    python3 ../seenry-motion/scripts/video_frames.py
    , and write
    .seenry/motion.md
    : for each moving thing, the trigger, what moves, duration, easing or spring, stagger, interruption and reduced-motion behavior, and which reference it came from. Include the signature moment and every in-place change (numbers, filters, add-to-bag).
  7. Material, in the background. Start image generation right after the pick and keep building while it runs: write the jobs file from the identity's image treatment and run
    node scripts/image.mjs --batch jobs.json --variants 3 --brand "<brand>" --background
    , which returns at once and generates while you build; build the page with the final file names, and check.mjs waits for the images before it reviews (
    image.mjs --wait
    waits by hand). A page that waits for its photographs wastes five to twelve minutes. Photography and imagery via seenry-assets, art-directed and passed through
    photo_check.mjs
    (see Imagery in the standard). Illustration and ambient visuals per Craft below.
  8. Build on the floor. New app screens can start from the product kit; established products retain their component and motion system. Implement
    .seenry/motion.md
    with that system, or use motion.css and motion.js when a plain page needs a starting point. Do not load a second runtime merely to satisfy this step; use the compatible components and purposeful signature moment described below. Set font, neutrals and accent from step 3.
  9. Edit like a studio, then the craft pass, then check. Before the gate, edit the page the way a studio creative director would, because over-density is now the most common gap between Seenry and studio work. Cut the copy by about a third: every section says one thing once, in one or two short blocks, and a section that does not earn its place goes. The first screen carries one message: the headline, one supporting line and one action, about 45 words at most outside the navigation; facts, captions, badges and secondary links move below it. Captions are one short line (18 words or fewer) and only where they add something the image cannot say. Secondary text gets room: at least 15px at 1440, line height 1.5 or more, and clearly more space between groups than inside them. When in doubt, remove: a calmer page with fewer, larger things reads as studio work, a rich page with everything in it reads as an agency. review_board flags crowded first screens, pages over about 700 words and long captions. Craft pass at full size, then check. Studios judge at 100%, section by section; the critic sees the page at half scale. Before the gate, render each section at 1440 (
    node scripts/review_board.mjs <url> --out $TMPDIR/seenry-craft
    writes the full-size first screen; screenshot the rest with Playwright at full size) and fix what only shows up close: optical alignment of type to images and rules, consistent spacing steps between and inside sections, headline line breaks and rag, image crops that cut the subject, and controls that do not share one height and radius. check.mjs also runs the detail critic (
    scripts/detail_critic.mjs
    ), a fresh model that reviews each section at full 1440 size for craft only and returns fixes tied to an element, in px; apply them with the main critic's fixes, except any that would shrink the identity's scale, mute its color field or remove its device: tidiness never outranks the identity. In polish and showcase modes a page does not pass below 8 on craft; in quick mode the fixes are advice. Then run
    node scripts/check.mjs <file or url> --brief <brief file> --mode quick
    by default (one critic round;
    --mode polish
    or
    --mode showcase
    when the person asks for more, as in the one-line section). The rest of this step describes the full showcase gate. It verifies the research pack, references, motion spec and
    DESIGN.md
    exist, checks slop, readability, radius and interaction evidence, sends photographs through the photo check, then asks a blind critic, a fresh model that sees only the screenshots, the brief and your reference screens, to score the page, and runs the motion judge, which samples eligible controls, records their transitions, measures durations, easing, animated properties, layout shift and reduced motion, and scores purpose, timing, spatial logic, smoothness and consistency. Apply every design and motion fix it prints and run it again until
    PASS
    (critic 9+ and every declared web-motion criterion and reviewed interaction row at 9+, with complete captured-label coverage and no reported motion violations). Scores are heuristic review signals, not competitor superiority claims. This applies only to the interactions actually captured; untested components remain unverified, and native-video legacy results do not certify the web per-criterion bar. The final result must be a checked version: if you edit after the last round, check.mjs runs one more verification round. On
    LAST ROUND
    , make the one root-level change it asks for; in
    --mode showcase
    , on
    STOP
    or
    STOPPED
    below the target, the concept is the problem, not the polish (this is not optional: never skip it because the critic rated the idea well, and never stop to ask whether to do it; in one-shot and headless sessions nobody can answer, so build it): go back to step 4, build the page on a different idea from
    idea.md
    (a different first thing the visitor sees, not a re-layout), and run
    check.mjs --new-direction
    once, which archives the first direction's rounds and gives the new one a fresh budget. Only if the second direction also stops, return the better of the two with an unresolved status and its remaining failed or unverified criteria. A best-so-far result is not a pass; unavailable judging or an exhausted repair budget must not become acceptance. Never finish on your own opinion of the page: in testing, self-review rated 9 what blind review rated 6–7. Native apps (SwiftUI, UIKit, React Native, Flutter) use the same gate on simulator output:
    node scripts/check.mjs --screens home.png,detail.png,sheet.png --video rec.mov --brief <brief>
    , with screenshots in flow order and a screen recording of the interactions (
    xcrun simctl io booted recordVideo rec.mov
    , or
    adb shell screenrecord
    ); the critic scores the screens against the bar and motion_video.mjs judges the recording.
  10. Review and deliver. For a second opinion on states and accessibility use seenry-review. Write the "Brand guidelines" section of
    DESIGN.md
    and give the report below. The design sheet is optional and comes last (sheet).
For changes inside an existing app, follow Inside an existing project instead of this flow.
  1. Brief(2 分钟)。 受众、界面的唯一任务、真实内容、不可变内容。用一句话陈述意图。
  2. 使用当前 Seenry MCP 调研。 优先使用已连接的工具:先加载
    get_library_guide
    ,再使用
    research_design_brief
    传入真实 brief、明确的参考 family 和最多 3 个聚焦查询。检查实际返回的像素,并阅读 coverage、gaps、constraints 以及有来源支撑的决策规则。需要脚本访问时,运行
    node scripts/research.mjs --brief BRIEF.md --type <landing|product|dashboard|studio|pricing|app> --family <websites|sections|apps|branding|decks|motion> --terms "<up to three comma-separated queries>"
    。它使用环境中已配置的
    SEENRY_PRO_KEY
    ;绝不要在聊天中索要 secret。该受限脚本执行 3 次工具调用,计划上限为 11 credits,并将结果保存在
    .seenry/research/
    。遇到身份验证、配额或工具错误时停止运行。没有脚本 key 时,它会输出一份清晰标明未调研的 manual handoff;使用已连接的 MCP 或允许的 web 调研,绝不能虚构调研资料。
    • 先起草创意,再查看参考。 第一次调研前,在
      .seenry/idea.md
      中写下第 3 步的主张、证据和 5 个候选创意,只写创意,不写色板、字体或布局。brief 和查询应来自产品、受众及页面任务,例如“面向不依赖 streak app 的习惯追踪器 app”,查询使用“habit tracker”“fitness app”“streak”,绝不能从已经想好的视觉风格出发。调研用于说明该品类始终会做什么,而不是替你选择颜色、字体或 composition。
    • 选择前先研究 survey。 调研结果包含最多 8 个候选产品,每个一张缩略图组成 contact sheet。逐一查看,并在
      .seenry/refs/kept.md
      顶部写两份清单:conventions,即多数产品为帮助用户使用页面而采用的共同做法,包括导航、消息顺序、操作位置和定价页结构,以及本项目将满足哪些;clichés,即多数产品在识别体系上采用的常见套路,包括相同色相、hero 布局、mockup 角度和字体语气,以及本项目最多共享其中哪一项。保留 2 至 3 个用于研究工艺的屏幕,并说明每个参考教授了哪一点,例如间距、字体细节、图像质感和密度。查询中使用品类词汇,例如“analytics hero”“payments pricing”“meal kit onboarding”;资料库会匹配对应行业。如果该品类在调研结果中仍不足,即同品类候选少于 5 个,还应对 2 至 3 个品类领先者的实时站点运行
      scripts/bar.mjs
      ,并将其作为工艺标杆;只使用资料库确定结构。调研结果薄弱意味着需要更好的查询,而不是将就:尝试该品类的其他名称及相近领域,例如 habit tracker、fitness app、journaling app、streak。
    • 之后只在有价值的地方深入阅读。 两次深度阅读应提供实测证据;需要以全尺寸查看像素时,对保留的 survey 项目调用
      inspect
      。
    • 将保留内容保存为标杆和决策卡。 将每个保留参考的屏幕放入
      .seenry/refs/
      ,以全尺寸打开并保存图像;调研脚本已将 survey 缩略图保存到
      .seenry/research/img/
      。在
      .seenry/refs/kept.md
      中为每个文件写一张卡:该屏幕的任务;它所做的决策,包括消息顺序、主张证明方式、密度、节奏和视觉落点;实测数字,包括标题与正文字号、圆角、控件内边距和品牌色,来源为调研结果的
      measured
      块、
      compare_measurements
      或
      get_tokens
      ;本项目将达到或超越的工艺要点;以及一项因属于该品类陈词滥调而明确不采用的做法。工作室研究是为了做决策,而不是临摹。
    • 也要研究页面中段,而不只看 hero。 survey 完成后,再针对页面最重要的正文区块进行一次搜索,例如 features and proof、pricing、schedule、work 或 menu,使用
      search_sections
      或 sections family 的
      research_design_brief
      。保留 composition 最佳的一到两个,并为每个写决策卡:它如何让一件事成为主导、如何与前一区块形成差异,以及视觉如何证明标题。
    • 向品类之外借鉴。 调用
      borrow_references
      ,传入主导创意必须完成的任务,以及需要跳出的品类。例如,“a streak that forgives”习惯追踪器可以参考记分板、年鉴或学习 app 的 streak 图表。保留其中一个,检查全尺寸图像并写决策卡。真正独有的动作来自这里和自身创意,绝不能直接来自品类 survey。
    • 标杆中保留一个工作室级参考。 除品类领先者外,还要把一个工作室网站或品牌重塑影片中的一帧保存到
      .seenry/refs/
      ,并在
      kept.md
      中附上卡片,使评审者以工作室作品而不只是品类惯例判断页面。
    • 为参考分配不同任务。 品类参考用于确定惯例和工艺标杆;外部参考用于提供创意。hero composition、色彩世界和 display 字体来自所选创意,不得匹配品类中最常见的布局,任何区块也不得完整复现某个参考的布局、图像处理或标志性装置。check.mjs 会向盲审展示保留的屏幕;当页面达到其工艺等级(参考契合度 7 分或更高)且没有复制任何参考时,才会通过。
    • 说出该品类最佳品牌,并按其等级进行创作。 至少按名称写下该确切品类中最优秀的 3 个品牌,例如独立制表领域的 Laurent Ferrier、Akrivia、NOMOS,发票工具领域真正的领先者,而不是搜索关键词碰巧返回的品牌;按名称拉取它们,例如
      list_sites {q: "<brand>"}
      、
      search_designs {q: "<brand>"}
      ,或使用品牌名称作为
      research_design_brief
      查询。资料库并未收录所有品牌;领先者缺失时,运行
      node scripts/bar.mjs --type <landing|product> --sites <domain>,<domain>
      捕获其实时站点,将屏幕保存在
      .seenry/research/bar/
      中作为标杆,绝不能绕过 bot 检查。绝不能因为按品类词搜索匹配到了一些结果就接受它们。在
      kept.md
      中记录它们共同的 composition class:对象主导画框(奢侈品、硬件、食物、招待),真实尺度的产品瞬间(软件),编辑式或字体主导页面(媒体、工作室、文化),或密集工作界面(数据工具)。hero 按该 class 构建,并加入自己的创意;领先者定义等级,而应避免的是平均网站的布局。软件常见的分栏形式,即左侧标题、右侧圆角产品卡片、周围带 tab 或 toast,绝不能成为实体产品或奢侈品的 composition。评审者依据这一点评分
      category_fit
      。
    • 阅读
      pack.md
      和
      evidence.json
      ,以全尺寸检查 1 至 2 个与任务相关的来源,并将检查过的工艺目标保存到
      .seenry/refs/
      中用于比较。相邻的移动端参考不能证明桌面端产品适配度。
      apps
      family 包含捕获的移动 app;针对 Web 界面应选择 websites/sections,除非有意使用移动端类比。
    • 在
      DESIGN.md
      中列出保留和搁置的参考,说明每个保留来源证明什么、本项目借鉴什么,以及哪些关系尚未验证。设计必须属于你自己:借鉴模式,绝不复制页面。最终总结应按名称注明保留的参考。查询匹配和数字评分不能证明品味。
    • 先测量,再设置字体、圆角和间距。 对所选的 2 至 4 个参考调用
      compare_measurements
      (5 credits),获取共同的标题和正文字号、圆角与控件内边距,或对一个页面调用
      get_tokens
      获取颜色和字体家族。记录到
      DESIGN.md
      ,并将其作为阅读和控件工艺的下限与上限,包括正文字号和行高、控件高度和内边距、圆角比例、区块间距,即调研结果中的
      measured.floors
      。display 字号、标题尺度、色板和 composition 绝不取平均值:这些由识别体系决定,当创意需要时,超过实测标题范围是预期结果。没有 MCP 时,使用 benchmarks。
    • 完整流程、分页截图捕获、实测设计上下文、动效和 PDF 规则参见 current MCP research。只在需要动效证据时研究录屏。
  3. 找出这个品牌的创意。 遵循 design thinking:写出产品的主张、证据、瞬间和材料;至少生成 5 个具有不同设计动作的创意,例如让主张字面化、让用户立刻体验、把证据放进语言、呈现前后对比、展示物理事实、展示体现用心的细节、拿走某个东西、改变度量单位;按真实性、清晰度、独特性、克制程度和可实现性评分;选择一个,并将其贯彻到 hero、标志性瞬间、图像、文案和一个细节中。保存为
    .seenry/idea.md
    。组件包和参考用于实现创意,而不是创意本身;两个不同 brief 绝不能得到相同的标志性设计。然后将创意转化为形式:编写
    .seenry/identity.md
    及其设计板,遵循先设计识别体系:工作室方法。创意是主张;识别体系决定外观,而把主张放进默认布局仍然只是模板。
  4. 探索三种识别体系,然后盲选。 识别体系设计板就是探索过程,没有单独的首屏草图轮次。快速构建三个 identity board,三个约 10 分钟完成;它们是决定方向的草图,绘制层和动效分数只写在设计板上,之后在页面中完整实现。根据
    .seenry/idea.md
    中评分最高的三个创意创建三个设计板(
    .seenry/explore/a.html
    、
    b.html
    、
    c.html
    ),每个都遵循先设计识别体系:工作室方法,并拥有自己的字体语气、色彩世界、设备和图像处理;每个适配一个 1440×900 屏幕,其中包含两张 poster:hero 和最难的常规区块。使用 Seenry MCP 时,最多一个遵循品类惯例作为安全对照,另一个基于品类外参考构建。对于语气不张扬的 app 或软件产品,页面基于 quiet premium kit 构建,它是项目所有者的参考标准;盲选更偏好大胆的设计板,项目所有者给出的评分是 7/10,因此三个设计板应在图像、app 屏幕创意和文案上不同,而不只是布局或状态不同。当用户附带或链接参考时,应紧密遵循其状态和水平,但绝不能逐项照搬布局;改变 hero composition 以及至少两个区块,组件包会列出替代方案,而且项目所有者曾拒绝仅仅“看起来不错”的精确复制。三个设计板必须在访客首先看到的内容上不同,例如有效的产品瞬间、被字面化的主张、单张照片或纯字体排版,并且任何一个都不得重复
    ~/.config/seenry/history.json
    中的识别体系。运行
    node scripts/pick.mjs .seenry/explore/a.html .seenry/explore/b.html .seenry/explore/c.html --brief <brief> --refs .seenry/refs/<a>,<b>
    ,将获胜者复制为
    .seenry/identity.html
    ,据此编写
    .seenry/identity.md
    ,并立即使用
    node scripts/history.mjs
    记录,以便并行构建的其他任务避开它;吸收选择结果建议借鉴的其他设计板元素,并将所选创意记录到
    idea.md
    。获胜设计板的 hero poster 成为网站首屏。工作室从不直接交付第一个 composition,Seenry 也一样。
  5. Direction。 使用
    .seenry/identity.md
    中获胜的识别体系;如果选择结果有所改变,则重写它。记录字体语气、色彩世界、设备、图像处理、voice line 和动效行为,以及圆角家族与 composition model。先选择显而易见的高级方案,而不是聪明但牵强的方案。对于新建或改变的识别体系,还要遵循
    seenry-branding
    (其 skill)及项目指南。
  6. 动效规格。 现在阅读 seenry-motion。参考动效 relevant 时,获取并播放所选录屏,签名链接会过期;使用
    python3 ../seenry-motion/scripts/video_frames.py
    提取运动量最大时段附近的帧;编写
    .seenry/motion.md
    :对每个运动元素记录触发条件、什么在运动、时长、easing 或 spring、stagger、中断行为和 reduced-motion 行为,以及它来自哪个参考。必须包含标志性瞬间和所有原位变化,包括数字、筛选器和加入购物袋。
  7. 在后台处理素材。 选择完成后立即启动图像生成,并在运行时继续构建:根据识别体系的图像处理方式编写 jobs 文件,然后运行
    node scripts/image.mjs --batch jobs.json --variants 3 --brand "<brand>" --background
    ,它会立即返回并在后台生成;使用最终文件名构建页面,check.mjs 会等待图片完成后才评审(
    image.mjs --wait
    用于手动等待)。等待照片的页面会浪费 5 至 12 分钟。摄影和图像使用 seenry-assets,经过策划并通过
    photo_check.mjs
    (参见标准中的图像部分)。插画和环境视觉遵循下文 Craft 部分。
  8. 在质量底线上构建。 新 app 屏幕可以从 product kit 开始;成熟产品保留其组件和动效系统。使用该系统实现
    .seenry/motion.md
    ,普通页面需要起步资源时使用 motion.css 和 motion.js。不要仅为满足此步骤而加载第二套 runtime;使用兼容组件以及下文描述的有目的标志性瞬间。根据第 3 步设置字体、中性色和强调色。
  9. 先以工作室方式编辑,再做工艺检查,然后运行门禁。 门禁之前,像工作室创意总监那样编辑页面,因为过度密集如今是 Seenry 与工作室作品之间最常见的差距。文案缩减约三分之一:每个区块只说一次一件事,使用 1 至 2 个短段落,不值得存在的区块直接删除。首屏只传递一条信息:标题、一行辅助文案和一个操作,导航之外最多约 45 个词;事实、说明、badge 和次级链接移到下方。Caption 最多 18 个词,并且只在图片无法表达的信息时才出现。次级文案要有足够空间:1440 宽度下至少 15px,行高至少 1.5,组之间的空间明显大于组内部空间。犹豫时,删掉它;更少、更大的元素会显得像工作室作品,而塞满一切的丰富页面会显得像代理公司。review_board 会标记拥挤的首屏、超过约 700 词的页面以及过长 caption。
    先按全尺寸完成工艺检查,再运行门禁。 工作室会按 100% 尺寸逐区块评审,而评审者只看到半尺寸页面。门禁前,在 1440 宽度下渲染每个区块(
    node scripts/review_board.mjs <url> --out $TMPDIR/seenry-craft
    会写出全尺寸首屏;其余区块使用 Playwright 以全尺寸截图),修复只有在近距离才会显现的问题:字体与图片及规则线的光学对齐、区块内外一致的间距步进、标题断行与 rag、裁切主体不合理的图片,以及高度和圆角不一致的控件。check.mjs 还会运行 detail critic(
    scripts/detail_critic.mjs
    ),这是一个全新的模型,只在完整 1440 尺寸下逐区块评审工艺,并返回绑定到元素、以 px 为单位的修复建议;将这些建议与主评审修复一起应用,但不得因此缩小识别体系的尺度、削弱其色彩场或移除其设备:整洁永远不能凌驾于识别体系之上。在 polish 和 showcase 模式中,工艺分低于 8 都不能通过;在 quick 模式中,这些建议仅作参考。
    然后默认运行
    node scripts/check.mjs <file or url> --brief <brief file> --mode quick
    (一轮评审;用户要求更多时使用
    --mode polish
    或
    --mode showcase
    ,如“新建站点只有一行需求”部分所述)。本步骤其余部分描述完整 showcase 门禁。它会验证调研资料包、参考、动效规格和
    DESIGN.md
    是否存在,检查 slop、可读性、圆角和交互证据,让照片通过 photo check,然后调用盲审。盲审是一个全新的模型,只能看到截图、brief 和参考屏幕,它会为页面评分,并运行 motion judge。motion judge 会采样符合条件的控件、记录其 transition、测量时长、easing、动画属性、布局偏移和 reduced motion,并从目的、时机、空间逻辑、流畅性和一致性方面评分。
    应用它打印出的所有设计和动效修复,并重复运行,直到达到
    PASS
    (评审分数 9 分以上,所有声明的 Web 动效标准和已评审的交互行均达到 9 分以上,捕获的标签覆盖完整,且没有报告动效违规)。评分只是启发式评审信号,不代表优于竞品。它只适用于实际捕获的交互;未经测试的组件仍属未验证,旧版 native video 结果也不能证明达到逐项 Web 标准。最终结果必须是经过检查的版本;如果最后一次门禁后继续编辑,则 check.mjs 会再运行一轮验证。出现
    LAST ROUND
    时,完成它要求的唯一根级改动;在
    --mode showcase
    中,如果出现
    STOP
    或
    STOPPED
    且未达到目标,说明问题在概念而不在打磨,这一点没有选择余地,绝不能跳过,也不能停下来询问是否继续,因为在一轮式和无人值守会话中没有人能回答,所以必须直接构建:返回第 4 步,基于
    idea.md
    中另一个创意构建页面,改变访客首先看到的内容,而不只是重新布局;运行一次
    check.mjs --new-direction
    ,它会归档第一方向的多轮结果,并为新方向提供新的预算。只有第二种方向也停止时,才返回两者中更好的一个,并明确标记未解决状态及剩余失败或未验证的标准。目前最好的结果不等于通过;无法评审或修复预算耗尽绝不能被视作验收。绝不能依据自己的页面意见结束工作:在测试中,自我评审曾给 9 分,而盲审只给出 6 至 7 分。
    原生 app(SwiftUI、UIKit、React Native、Flutter)使用相同门禁检查模拟器输出:
    node scripts/check.mjs --screens home.png,detail.png,sheet.png --video rec.mov --brief <brief>
    ,按操作流程顺序提供截图,并提供交互录屏(
    xcrun simctl io booted recordVideo rec.mov
    或
    adb shell screenrecord
    );评审者根据标杆为屏幕评分,motion_video.mjs 则评估录屏。
  10. 评审并交付。 需要关于状态和无障碍的第二意见时,使用 seenry-review。在
    DESIGN.md
    中编写“Brand guidelines”部分,并给出下述报告。设计表是可选的,并且最后才做(sheet)。
对于现有 app 内的改动,应遵循在现有项目中工作,而不是本流程。

Identity first: the studio method

先设计识别体系:工作室方法

Studios do not lay out a page and then pick colors. They design an identity, a few parts used with total conviction, and the website is one application of it. Look at any rebrand in Seenry (Sommerro, Wise, Murray's Cheese, Transavia, Toca Boca): a truth about the brand, one typographic voice set large, one color used as a full field, one graphic device that comes from the truth, one image treatment and a line in the brand's voice. Every touchpoint is built from those parts, so the brand is recognizable with the logo covered. AI pages, Seenry's included until now, do the opposite: a correct layout with a palette applied. Clean and correct is a 6; a designed identity is what makes a 9.
Before any layout, write
.seenry/identity.md
and render it as
.seenry/identity.html
, one screen like the opening frames of a rebrand film:
  1. Truth. The one real thing this brand is or comes from (the building it occupies, a timestamp that proves who said what, the hour the bakery opens), taken from the brief, never invented history.
  2. Visual idea. How the truth becomes form, not copy: a typographic device (letters cut by a rule, a stacked or split wordmark, a ligature), a grid (a ledger, a timetable, a contact sheet), a crop language (always tight, always cut by the frame), a material (paper, film grain, glass, enamel) or a behavior (things arrive in the order they happened). Write it so a designer could apply it to a poster with no website in sight.
  3. Typographic voice and range. The family (usually one) chosen from the measured type of the kept references and the tiers in art direction, tuned the way they tune it; the text face stays quiet. Put three candidates on the board and keep one. Then give it range, the way an editorial designer would: a scale of five or six distinct levels (display, section display, lead or pull quote, body, caption, and an annotation voice such as small caps, tabular figures or the mono for data), plus the moves each level is allowed (a phrase set large in the text face, a hanging caption, an index or margin note, a run-in heading, a measured number with its unit set small). One treatment repeated down the page reads as monotonous even when it is strong.
  4. Register and color world. Start
    identity.md
    with
    Register: quiet premium
    or
    Register: loud
    ; the review board holds a quiet page to its rules (the first screen led by a photograph or painting, three or more image moments, no saturated brand bands, no visual shown twice). One hero color plus ink and paper, named for where it comes from. Loud brands use it as a full field; calm, premium brands (Aesop, Apple, a kiln studio) may keep it restrained and let photography, type and composition carry the identity. A recognizable identity does not have to be loud: restraint done with conviction is an identity too.
  5. One graphic device from the visual idea that repeats across the page: a mark, a pattern, a rule system, a frame, a cut, a stamp. Never an asterisk, sparkle, star or flower. Every appearance carries information (a date, a measurement, a label, a route); a device repeated as a divider or filler reads as decoration.
  6. Image concept and treatment. What the imagery says, plus one surprising angle that is not the category's first picture (an unexpected scale, crop, object or staging; a kiln studio shows a single plate edge-on at macro, not another shelf of bowls). Then one look for every image (crop, light, grade, grain and framing), applied in code as well as in the prompt: a CSS or canvas treatment (duotone, grade, grain overlay, cut-out) that every image passes through so the set reads as one shoot. At least one image works with the type or device (overlapping, masked, cut out), not only framed. Studios use generated images too; theirs look directed because of the concept and the treatment, not the generator. Every generated image carries it in its prompt. Golden-hour warmth and moody mist are the generator's defaults and judges now see them on every AI page; choose the light from the brand's truth instead (flat overcast, hard noon sun, on-camera flash, clean studio seamless, night under sodium light, an archival scan) and say why.
  7. Voice line. One short line in the brand's voice that could sit alone on a poster.
  8. Motion score. The page is choreographed like a film, not animated component by component. Blind studio judges scored pages with tidy 0.5s fade-ups on every block at 3–5 out of 10 for motion while everything else scored 8.5–9: that is the gap between a good agency and a top studio. Page choreography runs on its own clock, separate from interface motion (hover, tabs, dialogs stay at 140–280ms): entrances and reveals take 600–1400ms with one expo-out curve, and scenes are scrubbed to scroll. Write the score in
    identity.md
    under a
    ## Motion
    heading and build all of it:
    • Entrance (done by 1.2s, in order). The subject arrives first and with scale: the photograph or product unmasks (
      clip-path
      inset to 0 over about 1s) while settling from
      scale(1.06)
      to 1; then the headline by line (each line rising 24–40px inside an overflow mask, 80–120ms apart); then the supporting line and the action; the navigation last. The headline is fully readable by 0.8s and nothing that names the product arrives after 1.2s (judges mark down entrances that withhold the message). Never everything at once.
    • Two or three held scenes. A section 160–250vh tall with a
      position: sticky
      stage (or GSAP ScrollTrigger
      pin
      +
      scrub
      ) holds while the thing that proves the idea visibly transforms: layers separate, an image changes framing from the whole to the detail, a drawing builds and a band of light or data travels through it, a diagram or number resolves. Map the scene to a 0–1 progress with a reading hold before release (scroll choreography). Filter or opacity shifts alone are not a scene.
    • The device travels. The identity's device or drawing draws itself in as each section reaches it (
      stroke-dashoffset
      or a mask on
      animation-timeline: view()
      ), and links the sections it crosses.
    • Images arrive, text stays readable. Large images reveal by mask or framing change as they enter; body copy and rows stay at full opacity (no faint text arriving late).
    • One idle loop at most, when it shows the product's own behavior. The fastest robust way is the bundled scene (
      scene.css
      +
      scene.js
      , no library): copy both into the project, mark a tall section
      data-scene
      with a
      data-scene-stage
      , and write the choreography in CSS from its
      --p
      progress; its recipes (whole to detail, layers separate, a drawing builds, a row travels, a number resolves) and its
      data-enter
      entrance cover most pages, already with the reduced-motion version. Otherwise build with CSS scroll-driven animations (
      animation-timeline: view()
      /
      scroll()
      with an
      animation-range
      ) and the View Transitions API, or GSAP ScrollTrigger (
      https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js
      and
      .../dist/ScrollTrigger.min.js
      , free for all uses); keep a complete reduced-motion version: write the resting CSS as the final state and let animations run from the start state (so a drawing or image is never left hidden), and under
      prefers-reduced-motion: reduce
      drop the pins and the scenes' extra scroll height so each section closes up to its natural height. The review's full-page still is taken in that version, so blank travel or an undrawn layer shows there as empty space and stay under a 10% CPU budget.
      check.mjs
      films the entrance and a scroll and a choreography critic scores it; apply its fixes in the same round.
  9. Drawn layer. An illustration system drawn from the device, as hand-written SVG in one stroke weight and style (profile drawings, diagrams, marks, maps), used in at least two sections and drawn in on scroll. It is where a page gets its bespoke feel; see Craft: illustration.
The board shows the wordmark, the type scale with all its levels in use (one short passage that sets display, lead, body, caption and annotation together), the color world in its real proportions, the device, one treated image, one drawing from the drawn layer, the motion score as a short storyboard, and two posters made only from these parts: the hero, and the page's hardest ordinary section (pricing, FAQ, security or the team) designed in the same system, because blind judges found every page held its idea in the hero and fell back to stock bands below it. If the poster could belong to a competitor, the identity is not done. Study at least two identity presentations in Seenry first (
search_designs {family: "branding"}
; the rebrand films show one system across signage, print, packaging and web: download the video and pull frames with
python3 ../seenry-motion/scripts/video_frames.py
) and one studio site (
list_sites {q: "studio"}
), for how few parts a strong identity uses. Build your own; never take another brand's mark, face or device. Do not repeat yourself either. Run
node scripts/history.mjs --list
first: it prints the display face, hero color and device of the last identities built on this machine. Fit comes first: choose the identity that fits this brand best, then make sure it is not a copy of a recent one, never the same hue family and kind of device together; a face may repeat when it fits (two finance apps can share a fine grotesk), so when it is close, change the color or the device, never downgrade the type. Two pages from Seenry should not look like siblings, but variety never outranks fit. The examples in this file and in references are there to explain a principle, never to be reproduced.
Then the page is one application of the identity:
  • Ordinary components are designed, not defaulted. Judges who scored hero and sections 9 marked the page down for the parts every site has: product and pricing cards, forms, tables, the footer. Design each in the identity: its own composition from the device and grid (a price set like the brand's label, a form laid out like its ticket or order slip), field labels, table cells, timetables and metadata at 15px+ in full-contrast ink (every judge marked down "tiny utility text"), one control height and radius family, visible hover, focus and error states, and a footer that is a closing poster in the system, not four link columns. If a component could drop into any SaaS template unchanged, redesign it.
  • Phone keeps the proposition and the way around. The first phone screen shows the subject cropped to what identifies it (the label, the face, the building), the headline and the action; the navigation stays reachable as a menu button.
  • Borrow a structure, not a look. Choose one composition model from a studio site or category leader you inspected and write its structure in
    .seenry/idea.md
    from its full page, not its hero: the grid (columns, gutters, margins), the type scale (display, section and body sizes and their ratios), how sections alternate in scale and density, and how it crops images. Build on those measurements. Taking a reference's structure and filling it with this identity is how designers learn; copying its content, imagery or device is not.
  • The subject leads. When the brand has a real place, object or product, the first screen shows it large, full-bleed or nearly, with the type set on or beside it; color fields and type support the subject rather than replace it. Type-only or color-field heroes are for brands with nothing to show.
  • The board's poster is the first screen. Build the hero by scaling the poster from
    identity.html
    up to the full screen: the same type at the same confidence, the color field, the image crop and the device, with the navigation and one action added. In testing, the boards were studio-grade and the pages lost them by falling back to a web hero; the critic now sees the board and scores a page weaker than its own board as identity 6. One statement, one visual: the display type and one image, object or product moment at full confidence: the visual full-bleed or owning most of the screen, or the type itself as the image. Supporting copy is one line and the action is one button. Forms, fact rows, captions and secondary proof go below the first screen (a booking or search field stays only when it is the product, as on a travel site).
  • Avoid Seenry's own defaults. These have become recognizable as generated: a text column on the left with a photograph filling the right half; a giant numeral as the hero device (a count, a time, a date) unless the number is the brand's truth; a centered headline over a boxed product card; the same type everywhere with no tuning (default tracking, bold headlines). Use one only when the identity makes the case, and say why in
    DESIGN.md
    .
  • The system runs to the footer. Pricing, FAQ, security, testimonials and the closing band use the identity's type voice, field color and device as fully as the hero (a pricing table set in the device's grid, an FAQ indexed the brand's way, a closing band that is the board's second poster). A page whose second half could belong to any site is unfinished.
  • Typographic range in the middle. Every section below the first screen uses at least two levels of the scale in one composition, and neighbouring sections lead with different moves: a pull quote set large in the text face, then a section led by a dense captioned grid, then one led by a single measured number with its annotation, then an editorial two-column passage with a margin note. Change scale sharply inside a section (a 64px line beside 15px captions) instead of stepping everything one size down. Keep the display face for the statements it was chosen for; let the text face, weight, size and the annotation voice carry the variety. Italic accent words and eyebrows stay out; range comes from scale, rhythm and placement.
  • Compose sections as posters in the same system. Each section is one confident composition built from the identity's parts (the display type set as image, the color field, the device, a treated image cropped hard), the way a rebrand's applications are, not a heading, a paragraph and a module. Web conventions stay only where they are controls: navigation, buttons, forms, product cards and pricing. A section that could sit on any site with the colors changed is unfinished.
工作室不会先完成页面布局,再选择颜色。它们会设计一套识别体系、少数几个被坚定使用的组成部分,而网站只是这套体系的一次应用。查看 Seenry 中的任何品牌重塑案例,例如 Sommerro、Wise、Murray's Cheese、Transavia、Toca Boca:都有一个关于品牌的真实事实、一种被大尺度使用的字体语气、一个作为完整色场使用的颜色、一个源于该事实的图形装置、一种图像处理,以及一句品牌自己的话。每个触点都由这些部分构建,因此即使遮住 logo,品牌仍然可识别。AI 页面,包括 Seenry 此前生成的页面,通常恰好相反:先得到正确布局,再为它套上色板。干净且正确只能得 6 分;经过设计的识别体系才能得到 9 分。
开始任何布局前,编写
.seenry/identity.md
并将其渲染为
.seenry/identity.html
,其内容像品牌重塑影片的开场画面:
  1. Truth。 这个品牌真正是或源自什么,例如它所在的建筑、证明某人说过某句话的时间戳、面包店开门的时间;内容来自 brief,绝不虚构历史。
  2. 视觉创意。 Truth 如何转化为形式,而不是文案,例如字体装置(被规则切开的字母、堆叠或拆分的 wordmark、连字)、网格(账本、时刻表、contact sheet)、裁切语言(始终紧凑、始终被画框切断)、材质(纸张、胶片颗粒、玻璃、搪瓷)或行为(事物按照实际发生顺序抵达)。应将其写成即使脱离网站,设计师也能据此制作 poster 的形式。
  3. 字体语气与范围。 从保留参考的实测字体以及 art direction 中选择字体家族,通常只使用一种,并像领先团队那样调节;正文字体保持安静。在设计板上放置 3 个候选并保留一个。然后像编辑设计师那样赋予其范围:5 至 6 个明确层级,包括 display、section display、lead 或 pull quote、body、caption,以及 annotation voice,例如 small caps、tabular figures 或用于数据的 mono;还要说明每个层级允许采用的排版动作,例如以正文字体大尺度设置短语、悬挂 caption、索引或页边注、run-in heading、将测量数字与较小单位并列。整页重复一种处理,即使很有力量,也会显得单调。
  4. 状态与色彩世界。 在
    identity.md
    开头写明
    Register: quiet premium
    或
    Register: loud
    。评审委员会会按其规则约束安静页面,包括首屏由照片或画作主导、至少 3 个图像瞬间、没有饱和品牌色带,以及视觉内容不得重复。一个 hero 颜色,加上 ink 和 paper,并根据其来源命名。张扬品牌将其作为完整色场;平静、高级的品牌,例如 Aesop、Apple 或陶瓷工作室,可以保持克制,让摄影、字体和 composition 承担识别特征。可识别的识别体系不必张扬;坚定地克制同样是一种识别体系。
  5. 一个图形装置。 它源于视觉创意,并在整页重复,例如标记、图案、规则系统、画框、切口、印章。绝不使用星号、闪光、星星或花朵。每次出现都必须携带信息,例如日期、测量值、标签或路线;仅仅作为分隔线或填充物重复的装置只是装饰。
  6. 图像概念与处理。 图像表达什么,以及一个出乎意料的角度,即不是该品类第一张图片的视角,例如窑炉工作室以微距展示单个盘子的边缘,而不是再拍一架子碗。然后为所有图片确立一种观感,包括裁切、光线、调色、颗粒和构图,并在代码与提示词中同时应用:每张图片都经过同一套 CSS 或 canvas 处理,例如双色调、调色、颗粒叠加或抠图,使整组看起来像同一次拍摄。至少一张图片应与字体或装置发生关系,例如重叠、遮罩或抠出,而不只是装框。工作室也使用生成图像;其效果显得经过导演,是因为概念和处理,而不是生成器。每张生成图像的提示词都必须包含它。生成器默认的黄金时刻暖光和朦胧薄雾如今会出现在每个 AI 页面上,因此应根据品牌事实选择光线,例如平坦阴天、正午硬光、机顶闪光、干净影棚无缝背景、钠灯下的夜晚或档案扫描,并解释原因。
  7. Voice line。 一句品牌自己的短句,单独放在 poster 上也成立。
  8. 动效得分。 页面应像电影一样编排,而不是逐个组件做动画。盲审工作室评委给整齐的 0.5 秒逐块淡入页面打出 3 至 5 分(满分 10),而其他方面达到 8.5 至 9 分的页面则获得高分;这就是普通代理公司与顶级工作室之间的差距。页面编排使用独立时钟,与界面动效分开,例如 hover、tab 和 dialog 保持在 140 至 280ms;进入与揭示使用 600 至 1400ms 和一条 expo-out 曲线,场景随滚动擦除推进。将得分写入
    identity.md
    的
    ## Motion
    部分,并完整实现:
    • Entrance(1.2 秒内按顺序完成)。 主体最先抵达,并通过尺度建立存在感:照片或产品以
      clip-path
      inset 从 0 展开,约 1 秒,同时从
      scale(1.06)
      收敛到 1;随后标题按行出现,每行在 overflow mask 内上升 24 至 40px,间隔 80 至 120ms;接着是辅助文案和操作;导航最后出现。标题应在 0.8 秒内完全可读,任何标识产品名称的内容都不得在 1.2 秒后才出现,因为评委 会因此扣分。绝不让所有内容同时出现。
    • 2 至 3 个停留场景。 一个高 160 至 250vh 的区块使用
      position: sticky
      stage,或 GSAP ScrollTrigger
      pin
      加
      scrub
      ,并在停留期间让证明创意的内容发生明显变化,例如各层分离、图片从全景变为细节、图画逐步绘制、光带或数据穿过区块、图表或数字得到解析。将场景映射到 0 至 1 的进度,并在释放前保留阅读停顿(滚动编排)。仅改变 filter 或 opacity 不算场景。
    • 装置贯穿全页。 识别体系的装置或图画在各区块抵达时自行绘制,可使用
      stroke-dashoffset
      或
      animation-timeline: view()
      上的遮罩,并连接它跨越的区块。
    • 图像进入,正文保持可读。 大图进入时通过遮罩或构图变化揭示;正文和列表行保持完整不透明度,不能让浅色文字延迟出现。
    • 最多一个空闲循环。 只有在它展示产品自身行为时才使用。
    最快且稳健的方法是内置的 scene(
    scene.css
    加
    scene.js
    ,无需库):将两者复制到项目,把高区块标记为
    data-seenry-scene
    并使用
    data-seenry-scene-stage
    ,按照其
    --p
    进度用 CSS 编写编排;其配方涵盖整体到细节、层次分离、图画绘制、列表行进和数字解析,其
    data-enter
    入口覆盖大多数页面,并已包含 reduced-motion 版本。否则,使用 CSS scroll-driven animations(
    animation-timeline: view()
    /
    scroll()
    加
    animation-range
    )和 View Transitions API,或 GSAP ScrollTrigger(
    https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js
    和
    .../dist/ScrollTrigger.min.js
    ,免费用于所有用途)。必须提供完整的 reduced-motion 版本:将静止 CSS 写成最终状态,并让动画从起始状态运行,因此图画或图片永远不会遗留为隐藏状态;在
    prefers-reduced-motion: reduce
    下移除 pin 和场景额外滚动高度,让每个区块回到自然高度。评审的全页静态截图会在该版本中拍摄,因此空白滚动或未绘制图层会显示为空,并应保持在 10% CPU 预算以下。check.mjs 会录制入口、滚动和编排,编排评审者为其评分;应在同一轮应用修复。
  9. 绘制层。 从装置发展出一套插画系统,以统一笔画粗细和风格手写 SVG,例如个人资料图画、图表和标记,并至少用于两个区块,在滚动时绘制完成。这是页面获得定制感的地方,参见 Craft:插画与环境视觉。
设计板展示 wordmark、所有层级实际投入使用的字体尺度,其中一段短文本同时设置 display、lead、body、caption 和 annotation;按真实比例展示色彩世界;装置;一张经过处理的图片;绘制层中的一张图画;以简短 storyboard 呈现的动效得分;以及仅由这些部分制作的两张 poster:hero,以及页面中最难的常规区块,例如 pricing、FAQ、security 或 team,并使用同一系统设计,因为盲审发现许多页面只在 hero 中坚持创意,之后就退回通用的分层色带。如果 poster 可以属于某个竞争对手,说明识别体系尚未完成。
先研究 Seenry 中至少 2 个识别体系演示(
search_designs {family: "branding"}
;品牌重塑影片展示同一系统如何应用于招牌、印刷、包装和 Web:下载视频并使用
python3 ../seenry-motion/scripts/video_frames.py
提取帧),以及 1 个工作室网站(
list_sites {q: "studio"}
),观察优秀识别体系仅使用少数哪些组成部分。构建自己的体系,绝不搬用其他品牌的标记、字体或装置。
也不要重复自己。 首先运行
node scripts/history.mjs --list
,它会打印本机最近构建的识别体系所使用的 display 字体、hero 颜色和装置。适配优先:选择最符合该品牌的识别体系,同时确保它不是近期方案的复制,绝不能同时使用相同色相家族和相同类型的装置;字体在适配时可以重复,例如两个金融 app 可以共用一种精细 grotesk,因此接近时应改变颜色或装置,绝不能为了差异而降低字体质量。两个 Seenry 页面不应像是一对兄弟姐妹,但多样性永远不能凌驾于适配之上。本文件及 reference 中的示例用于解释原则,绝不能被复现。
随后,页面是识别体系的一次应用:
  • 普通组件也要经过设计,而不是使用默认样式。 给 hero 和各区块打 9 分的评委,却会因每个网站都有的部分而扣分,例如产品和定价卡片、表单、表格和页脚。每项都应在识别体系中设计:从装置和网格形成自己的 composition,例如像品牌标签一样设置价格,像 ticket 或 order slip 一样布局表单;字段标签、表格单元格、时刻表和元数据至少 15px,并使用完整对比度的 ink;控件高度统一,圆角家族统一;具有可见的 hover、focus 和 error 状态;页脚是系统中的收尾 poster,而不是四列链接。若某个组件无需修改即可放入任意 SaaS 模板,就必须重新设计。
  • 手机端保留主张和路径。 手机首屏展示可识别主体的裁切画面,例如标签、面孔或建筑,并保留标题和操作;导航通过菜单按钮保持可达。
  • 借鉴结构,而不是外观。 从检查过的某个工作室网站或品类领先者中选择一个 composition model,并依据其完整页面而非 hero,在
    .seenry/idea.md
    中写下结构,包括网格列数、gutter、边距、字体尺度、display 与 section 和正文的字号及比例、区块如何交替改变尺度和密度,以及如何裁切图片。基于这些实测数据构建。借鉴参考的结构并用自身识别体系填充,是设计师的学习方式;复制其内容、图像或装置则不是。
  • 主体占据主导。 当品牌拥有真实场所、物体或产品时,首屏应大尺寸、近乎全幅地展示它,并将字体设置在其上或旁边;色场和字体支持主体,而不是取代主体。纯文字或纯色场 hero 只适用于没有实体可展示的品牌。
  • 设计板上的 poster 就是首屏。 将 hero 从
    identity.html
    放大到完整屏幕,保持相同字体、信心、色彩场、图片裁切和装置,并加入导航和一个操作。在测试中,设计板达到工作室级,而页面退回普通 Web hero 后便失去设计板水准;现在的评审者会同时看到设计板,如果页面弱于自己的设计板,识别特征只能得 6 分。一个陈述、一个视觉:display 字体和一张图片、物体或产品瞬间,以完整信心呈现;视觉应全幅或占据屏幕大部分,或者字体本身成为图像。辅助文案只有一行,操作只有一个按钮。表单、事实行、caption 和次级证据放在首屏下方,只有在产品本身就是预订或搜索对象时,例如旅游网站,才保留搜索或预订字段。
  • 避免 Seenry 自身的默认风格。 这些风格已变得很容易被识别为生成内容:左侧文字列加右侧半幅照片;巨大的数字作为 hero 装置(数量、时间或日期),除非该数字本身就是品牌事实;居中的标题叠在盒装产品卡片上;整页使用同一种未经调节的字体,例如默认 tracking 和粗体标题。只有识别体系确实需要时才使用,并要在
    DESIGN.md
    中说明原因。
  • 系统必须延续到页脚。 Pricing、FAQ、security、testimonial 和收尾色带应像 hero 一样充分使用识别体系的字体语气、字段颜色和装置,例如价格表使用装置的网格排版,FAQ 使用品牌自己的索引方式,收尾色带成为设计板的第二张 poster。页面后半部分如果可以属于任何网站,就尚未完成。
  • 中段也要有字体尺度范围。 首屏以下的每个区块都应在同一 composition 中至少使用两个尺度层级,相邻区块则以不同动作引导,例如大尺度设置 pull quote,随后由带 caption 的密集网格引导,再由一个带注释的测量数字引导,最后是带页边注的编辑式双栏段落。要在区块内部显著改变尺度,例如 64px 标题旁边放 15px caption,而不是每个层级只比前一个小一号。display 字体只用于它被选中的陈述;让正文字体、字重、字号和 annotation voice 承担变化。不要使用斜体强调词和 eyebrow;范围来自尺度、节奏和位置。
  • 将区块构造成同一系统中的 poster。 每个区块都是使用识别体系各部分构建的自信 composition,例如把 display 字体设置成图像、使用色彩场、使用装置、使用经过处理且裁切强烈的图片,就像品牌重塑的各类应用一样,而不是一个标题、一段文字和一个通用模块。Web 惯例只保留在真正属于控件的地方,例如导航、按钮、表单、产品卡片和定价。如果某个区块仅替换颜色后就能放在任何网站上,就尚未完成。

The standard

标准

Leading teams look premium for one root reason: they ranked the job, then removed everything that does not serve it. Calm is the visible result. The reasons behind each rule are in premium.
Never ship these (check.mjs blocks most of them):
  • Eyebrows by reflex: a short small line above a title, in any case ("Good to know", "Your neighborhood yoga studio" over the h1). Cut it; the title says it, and card facts such as duration or level go under the title. Uppercase letter-spaced labels are slop anywhere.
  • Numbered labels: "01 /", "(001)", "No. 03", "Step 01". Numbers only where order is real, as plain figures.
  • The exception is a label or marker system that is the identity's own device, the way a studio uses one: one consistent marker or index that comes from this brand's idea on every section, in sentence case, set with the same care as the headlines. Mark its elements
    data-seenry-device="<name>"
    ; review_board then treats it as a system and flags it when it appears fewer than three times. Uppercase letter-spaced labels stay out.
  • Weights of 700 or more in UI, or more than three weights on a page.
  • Italic serif accent words in headlines; trendy default faces used for flavor (Instrument Serif, Fraunces, Playfair, Space Grotesk, Clash Display).
  • The default AI palettes: cream + terracotta or orange, plum + peach, navy + lime, forest green + cream as a costume, purple gradients.
  • Clip-art imagery: sunset circles, vinyl records, flat SVG product stand-ins, tilted floating cards with sticker badges, gradient blobs, glows.
  • Colored KPI hero cards with rings or stripes, a decorative icon tile in every card (icons that help people recognize an option or a section are fine), a card per row, saturated pill badges down a column.
  • Generic slogans ("X is better together", "Built for the way you Y"), fake stats, lorem.
  • Text people must read under 13px, or in a light grey that fails contrast.
  • Template furniture: rows of example chips, four-up icon feature grids, logo walls of nine or more marks, outlined mini-cards repeated down a section. Show one clear example, three strong points, or the six marks people recognize.
  • Framework default colors as the brand: Tailwind blue-600/indigo-500, violet-600, emerald-500, orange-500 on near-black. Derive the accent from the brand or its material and correct it in OKLCH (below).
  • One-sided borders as decoration: an accent rail down the left edge of a card, quote or callout (
    border-left: 3px solid
    ), or a selected tab, filter or link marked with
    border-bottom
    on an element with a corner radius, so the line bends at its ends. Separate cards by surface tone and spacing; draw a tab indicator as its own straight bar (check.mjs blocks both).
  • Text symbols standing in for icons or a logo: an asterisk, sparkle, star or emoji as the brand mark, Unicode arrows (↗ → ←), check marks or bullets typed as characters inside buttons and links. An asterisk, sparkle, star, burst or flower is the default AI logo whether it is typed or drawn as SVG, and so are decorative ✳ ✦ ✧ scattered as ornaments; never use one. Logos are a wordmark set in the brand type, or a mark drawn from the product's own idea; icons come from one real icon set as SVG (Lucide, Phosphor or Tabler) at a consistent size and stroke (check.mjs blocks typed symbols).
  • A short rule or dash in front of a label ("— A notebook that thinks with you", a 20px line before an eyebrow). The label stands alone, in sentence case, or is cut.
  • Colored dots in front of text ("● Active", "● Paid", status pills with a leading dot). A dot is only right when it is the whole message: a live or recording indicator, online presence on an avatar, an unread marker in a list; mark those with
    data-seenry-dot="live|presence|unread"
    (check.mjs blocks any other dot before text).
  • "Many" drawn as a cloud or wall of tiny chips, domains, logos or dots (it turns the claim into decoration), and production notes in the page body ("these marks are invented", "demo data", "placeholder"); a one-line disclosure in the footer is fine.
  • Placeholder art: blurred gradient blobs, CSS gradients or code-drawn shapes standing in for album covers, product photos or avatars.
The details live in the standard; read it before building, and apply all of it. In short:
  • Color. Neutral roles (canvas, surface, rule, three text levels) in one temperature; one action color; the identity's hero color at full strength in one or two fields, never pale tints as section grounds. Build it in OKLCH with
    scripts/palette.py
    .
  • Type. The identity's display voice at poster scale, a quiet text face; 2–3 weights, nothing readable under 15px at 1440 (paragraphs 16, short labels 14).
  • Radius and elevation. One radius family from the brand; control radius at most 25% of its height or a full pill; concentric nesting; separate by space and tone, shadows only on overlays.
  • Scale. Use the whole 1440 canvas; controls 44–48px; the primary action visible in the first screen.
  • Proof at real scale. Product UI and diagrams render at real size, never shrunken; proof text at least 15px.
  • Composition. Every section one large thing at real scale, each composed differently, five to seven sections, 120–160px apart; one focal moment per demo; replace what you remove with stronger material.
  • Imagery. Art-directed with the identity's treatment, best of three, nothing under 7 ships; software shows the product on a stage; people photography at most once.
  • Copy. Plain, specific, short, in the owner's voice.
  • Motion. Purposeful, 120–240ms for UI, springs for movement, interruptible, reduced-motion respected; the identity's motion behavior at the signature moment.
  • Phone. The first phone screen shows the hero visual (product, photograph or display type as the image) with the headline and one action; announcement bars and secondary buttons go below it (review_board blocks a phone hero with no visual). Recompose, do not squeeze; type never crosses a face; nothing clips.
领先团队之所以显得高级,根本原因只有一个:他们先对任务排序,然后删除所有无法服务任务的内容。平静只是可见的结果。每条规则背后的原因见 premium。
绝不能交付以下内容(check.mjs 会阻止其中大多数):
  • 反射式 eyebrow:无论大小写,都在标题上方放一行短小文字,例如“Good to know”或“Your neighborhood yoga studio”置于 h1 上方。删掉它,标题本身已经表达清楚,卡片事实如时长或难度应放在标题下。大写并增加 letter-spacing 的标签在任何位置都属于 slop。
  • 数字标签:“01 /”“(001)”“No. 03”“Step 01”。只有在顺序真实存在时才使用数字,并采用普通数字形式。
  • 例外是标签或标记系统本身构成识别体系装置的情况,例如工作室使用的一套标记或索引,应从品牌创意出发贯穿每个区块,采用 sentence case,并像标题一样认真设置。将元素标记为
    data-seenry-device="<name>"
    ,review_board 会将其视为系统,并在出现少于 3 次时发出警告。大写并增加 letter-spacing 的标签仍被禁止。
  • UI 中字重达到 700 或更高,或者整页使用超过 3 种字重。
  • 标题中的斜体衬线强调词;仅为了增加味道而使用流行默认字体,例如 Instrument Serif、Fraunces、Playfair、Space Grotesk、Clash Display。
  • 默认 AI 色板:米色加赤陶色或橙色、李子色加桃色、海军蓝加青柠色、森林绿加米色这类装束,以及紫色渐变。
  • 剪贴画式图像:落日圆、乙烯基唱片、扁平 SVG 产品占位图、贴有 badge 的倾斜悬浮卡片、渐变色块、发光效果。
  • 彩色 KPI hero 卡片配圆环或条纹,每张卡片都放一个纯装饰图标 tile(帮助用户识别选项或区块的图标没问题),每行一张卡片,纵向排列饱和 pill badge。
  • 泛化口号,例如“X is better together”“Built for the way you Y”,虚假数据、lorem ipsum。
  • 用户必须阅读小于 13px 的文字,或使用无法通过对比度要求的浅灰色。
  • 模板化陈设:一行行示例 chip、每行 4 个图标的功能网格、包含 9 个以上标记的 logo 墙、反复出现的 outlined mini-card。只展示一个清晰示例、3 个强要点,或用户认识的 6 个标记。
  • 将框架默认颜色当作品牌色:在接近黑色的背景上使用 Tailwind blue-600/indigo-500、violet-600、emerald-500、orange-500。应从品牌或材质推导强调色,并使用 OKLCH 校正,参见下文。
  • 仅单侧边框作为装饰,例如卡片、引语或 callout 左侧的
    border-left: 3px solid
    ,或在带圆角的 tab、筛选器或链接上使用
    border-bottom
    ,导致线条在末端弯折。应通过表面色调和间距分隔卡片;tab 指示器应绘制为独立直线(check.mjs 会同时阻止两者)。
  • 用文本符号代替图标或 logo,例如将星号、闪光、星星或 emoji 作为品牌标记,在按钮和链接中直接输入 Unicode 箭头(↗ → ←)、勾号或项目符号。星号、闪光、星星、爆发图形或花朵是默认 AI logo,无论以文字还是 SVG 绘制都一样,装饰性的 ✳ ✦ ✧ 也不得使用。Logo 应是使用品牌字体设置的 wordmark,或从产品自身创意绘制的标记;图标应来自同一套真实 SVG 图标库,例如 Lucide、Phosphor 或 Tabler,并保持尺寸和笔画一致(check.mjs 会阻止文本符号)。
  • 标签前的短线或破折号,例如“— A notebook that thinks with you”,或在 eyebrow 前放 20px 线条。标签应独立存在并采用 sentence case,或者被裁切融入设计。
  • 文字前的彩色圆点,例如“● Active”“● Paid”,以及带前置圆点的状态 pill。只有圆点本身就是完整信息时才适合,例如直播或录制指示器、头像的在线状态、列表中的未读标记;将这些标记为
    data-seenry-dot="live|presence|unread"
    ,check.mjs 会阻止其他文字前置圆点。
  • 将“many”表现为云团或大量微小 chip、域名、logo 和圆点,这会让主张沦为装饰;页面正文中也不得出现制作说明,例如“these marks are invented”“demo data”“placeholder”,页脚中的一行披露则可以。
  • 占位图像:模糊渐变色块、用于代替专辑封面、产品照片或头像的 CSS 渐变或代码绘制形状。
详细规则位于标准,构建前必须阅读并完整应用。概括如下:
  • 颜色。 中性角色,包括 canvas、surface、rule 和 3 个文字层级,保持同一色温;使用一个操作色;识别体系的 hero 颜色以完整强度出现在 1 至 2 个色场中,绝不以浅色调作为区块背景。使用
    scripts/palette.py
    在 OKLCH 中构建。
  • 字体。 识别体系的 display voice 达到 poster 尺度,正文字体保持安静;使用 2 至 3 种字重,1440 宽度下任何可读文字不得小于 15px,正文 16px,短标签 14px。
  • 圆角与高度。 从品牌推导一套圆角家族;控件圆角不超过高度的 25%,或使用 full pill;嵌套圆角保持同心;通过间距和色调分隔,只有 overlay 使用阴影。
  • 尺度。 使用完整的 1440 画布;控件高度 44 至 48px;主操作在首屏可见。
  • 真实尺度的证据。 产品 UI 和图表按真实尺寸呈现,绝不缩小;证据文字至少 15px。
  • Composition。 每个区块在真实尺度下有一个大型主体,各区块采用不同 composition,共有 5 至 7 个区块,间距 120 至 160px;每个演示只有一个视觉焦点;删除的内容应替换为更有力的材料。
  • 图像。 根据识别体系处理并策划,选出最佳 3 张,不发布少于 7 张的结果;软件应在舞台上展示产品;人物摄影最多出现一次。
  • 文案。 平实、具体、简短,采用项目所有者的语气。
  • 动效。 有明确目的,UI 使用 120 至 240ms,移动使用 spring,支持中断并尊重 reduced motion;标志性瞬间体现识别体系的动效行为。
  • 手机端。 首屏展示 hero 视觉,包括产品、照片或作为图像的 display 字体,并保留标题和一个操作;公告栏和次级按钮移到下方,review_board 会阻止没有视觉的手机 hero。必须重新构图,而不是简单压缩;字体不能与面孔重叠,也不得裁切。

Components

组件

Do not hand-roll common components. Copy the core kit (
seenry-ui.css
+
seenry-ui.js
: buttons, fields, select, checkbox, radio, switch, segmented control, tabs, menu, tooltip, dialog, sheet, toast, accordion, badge and status, avatars, cards, sortable and filterable table, pagination, empty state, stat strip, breadcrumb, kbd, skeleton, command menu) into the project, set its tokens from the direction, and restyle only through tokens. Open its
gallery.html
to see every state in light and dark. In React, Vue or Svelte projects, use the README's snippets or the project's own library (Radix, Base UI, shadcn) styled to the same tokens; never ship two component systems.
Any interactive component the kits do not have (hold to confirm, slide to confirm, a status island, a morphing button, a reorderable list, a scrubber, a gauge, anything with states and motion): before writing code, fill in the component brief from interaction craft (job, one idea, state graph, geometry, motion score with reasons, interruption rule, input contract, accessible result, reduced motion, runtime budget, demo, must-not-happen) and save it as
.seenry/components/<name>.md
; build to it, then review the result with that guide's checklist.
不要自行实现常见组件。将 core kit(
seenry-ui.css
加
seenry-ui.js
,包含 button、field、select、checkbox、radio、switch、segmented control、tab、menu、tooltip、dialog、sheet、toast、accordion、badge 和 status、avatar、card、可排序和可筛选 table、pagination、empty state、stat strip、breadcrumb、kbd、skeleton、command menu)复制到项目中,根据方向设置 token,并只通过 token 重新设置样式。打开其
gallery.html
查看浅色和深色模式下的所有状态。在 React、Vue 或 Svelte 项目中,使用 README 的代码片段或项目自身的库,例如 Radix、Base UI、shadcn,并使用相同 token 设置样式;绝不能交付两套组件系统。
对于组件包中不存在的任何交互组件,例如长按确认、滑动确认、状态岛、变形按钮、可重排列表、scrubber、gauge,以及任何具有状态和动效的组件:编写代码前,先根据 interaction craft 填写组件 brief,包括任务、单一创意、状态图、几何结构、带理由的动效得分、中断规则、输入契约、无障碍结果、reduced motion、runtime 预算、演示和禁止事项,并保存为
.seenry/components/<name>.md
;按照 brief 构建,然后使用该指南的检查清单评审结果。

Transitions (chosen for the interaction)

Transition(根据交互选择)

Make state changes understandable with the existing motion system. For a compatible plain page, Seenry Transitions (
seenry-transitions.css
+
.js
) is an optional implementation: apply by attribute (
data-st="modal"
,
data-st="number"
…) or the small JS API. Its tokens come from production motion, measured frame by frame from real products: curves E enter
cubic-bezier(.16,1,.3,1)
, M move
(.4,0,.2,1)
, F fade
(.2,0,.2,1)
, X leave
(.4,0,1,1)
; durations 0 / 80 / 120 / 160 / 180 / 240 / 280ms chosen by distance × size × frequency, never one duration everywhere. Anything the hand moves or that retargets often (indicators, sheets, switches, dialogs) runs on the kit's springs (
--st-spring-snappy
,
-smooth
,
-gentle
,
-bouncy
,
-thumb
: SwiftUI-style response and bounce baked into CSS
linear()
), so it reverses from wherever it is; exact values and text never overshoot. Apply the frequency, keyboard and reduced-motion decisions above to each recipe; an appropriate instant state does not need decorative movement. When motion is warranted, choose by situation:
  • Modals, sheets, menus and popovers use motion and dismissal appropriate to their job. Menus and popovers stay related to their trigger; a directly expanding card can preserve a source-point return control; a confirmation dialog keeps its safe Cancel action and appropriate Escape behavior. Do not add a Close or X button solely because a surface is a dialog. Bottom sheets may follow the finger and dismiss on distance or flick; a search button opens into its command palette; a card expands into its detail with cover and title travelling.
  • Every tab set and segmented control: a shared indicator that relocates; keyboard selection instant.
  • A value change that benefits from animation: only changed digits move in the value's direction, with stable numeric alignment. Frequent or keyboard-driven updates can stay instant; blur remains optional and respects reduction.
  • For an animated content swap (tab panels, segmented views, filters or before/after), preserve the accepted state and any outgoing paint needed to finish or reverse smoothly. Keeping layers mounted is one option, not a semantic requirement. Inactive content must not remain focusable or exposed as an active panel; apply
    hidden
    , inertness or removal at a lifecycle boundary that preserves the chosen transition, and guard stale completion. Avoid blank frames, double paint and exposed duplicate content. The motion skill's "From 8 to 9" lists what the judge checks.
  • Every async action: the control morphs in place within one reserved footprint (label swap, spinner, success check drawn), acknowledgement before any ornament; copy-to-clipboard rolls to "Copied" and back.
  • Every form error: a bounded 3px shake on the field frame plus a persistent message.
  • Every list change: surviving rows relocate, removed rows fade before they collapse, latest state wins.
  • Every loading state: skeletons in reserved geometry that cross-fade to content on readiness; AI thinking and streaming states from the kit, never dots.
  • Page and view navigation: side-by-side in the direction of travel, or a View Transition. Richer interactive components (slide to confirm, hold to delete, status island, combobox, date range, reorderable list, waveform player and more) come from the interaction kit, restyled to the project tokens; anything not in it follows the component brief in interaction craft.
使用现有动效系统,让状态变化易于理解。对于兼容的普通页面,Seenry Transitions(
seenry-transitions.css
加
.js
)是一种可选实现:通过属性应用,例如
data-st="modal"
、
data-st="number"
,或使用小型 JS API。其 token 来自 production motion,通过逐帧测量真实产品得出:曲线 E enter 为
cubic-bezier(.16,1,.3,1)
、M move 为
(.4,0,.2,1)
、F fade 为
(.2,0,.2,1)
、X leave 为
(.4,0,1,1)
;时长 0、80、120、160、180、240、280ms,根据距离、尺寸和频率选择,绝不能所有地方都使用同一时长。
由手移动或经常重新定位的元素,例如指示器、sheet、switch 和 dialog,使用组件包中的 spring(
--st-spring-snappy
、
-smooth
、
-gentle
、
-bouncy
、
-thumb
),以 SwiftUI 风格响应和回弹直接烘焙进 CSS
linear()
,使其可从当前状态反向执行;精确值和文字绝不能过冲。按照上述频率、键盘和 reduced-motion 决策处理每个配方;适当的即时状态不需要装饰性运动。需要动效时,按场景选择:
  • Modal、sheet、menu 和 popover 使用符合其任务的运动与关闭方式。Menu 和 popover 始终与触发器保持关联;直接展开的卡片可以保留从源点返回的控制方式;确认对话框保留安全的 Cancel 操作,并提供恰当的 Escape 行为。不要仅因为界面是 dialog 就额外添加 Close 或 X 按钮。Bottom sheet 可以跟随手指,并按距离或 flick 关闭;search 按钮打开 command palette;卡片展开到详情时,封面和标题随之移动。
  • 每组 tab 和 segmented control 都使用共享指示器进行位置迁移;键盘选择即时生效。
  • 对适合动画的值变化,只让发生变化的数字沿其方向移动,同时保持数字对齐。频繁或由键盘驱动的更新可以保持即时;blur 仍为可选项,并尊重 reduced motion。
  • 对动画内容切换,例如 tab panel、segmented view、筛选器或前后对比,保留已接受状态,以及完成或平滑反向所需的离场绘制。保持各层挂载是一种选择,但不是语义要求。非活动内容不得继续可聚焦,也不得暴露为活动 panel;应在生命周期边界使用
    hidden
    、inert 或移除,并保护状态防止过期完成。避免空白帧、双重绘制和重复内容暴露。motion skill 的“From 8 to 9” 列出了评审者检查的项目。
  • 每个异步操作:控件在预留空间中原位变形,包括标签替换、spinner、绘制成功标记;先给出确认,再添加装饰;复制到剪贴板后滚动显示“Copied”,随后恢复。
  • 每个表单错误:字段边框进行幅度受限的 3px 抖动,并保留持续可见的消息。
  • 每个列表变化:保留的行重新定位,被删除的行先淡出再收起,最新状态优先。
  • 每个加载状态:使用预留几何尺寸中的 skeleton,并在就绪后交叉淡入内容;使用组件包中的 AI 思考和流式状态,绝不使用圆点。
  • 页面和视图导航:并排沿移动方向过渡,或使用 View Transition。
更丰富的交互组件,例如滑动确认、长按删除、状态岛、combobox、日期范围、可重排列表、波形播放器和更多功能,来自 interaction kit,并使用项目 token 重新设置样式;组件包中不存在的任何交互组件均遵循 interaction craft 中的组件 brief。

The signature moment (always, on Seenry's own initiative)

标志性瞬间(始终由 Seenry 主动完成)

Every new page or redesign Seenry builds gets one crafted, creative component that makes the product's behavior or the brand's idea visible (not edits inside an existing app). Do not ask whether to add it; choosing it is part of the design. The signature comes from the idea chosen in step 3, not from a menu. When the page makes one big claim, one strong move is often the claim made visible: show it literally, in the product's own unit and at a size people read, with a pause control for anything that loops longer than 5 seconds. "Many" is never a cloud of tiny chips, domains, logos or dots: show three to five readable instances and the one result they become; if a visitor cannot read it, it is decoration. A large editorial statement with the brand's proof set inline (logos, marks, an icon for the promise, one action button) is available as the statement component when the idea calls for it. Otherwise start from the signature kit and its "Choosing the signature moment" guide: product demo player (a cursor clicks and types inside the real UI), line illustration draw-in, ambient field, scroll story (a sticky visual that changes with each step, scrubbed by scroll), live numbers, logo marquee, compare slider, case-study card with hover preview. Adapt it to the brand (content, color, drawing, timing from
.seenry/motion.md
) so no two pages look alike, or build an original one when the brief has a better idea. One per page, placed where it explains the most (usually the first screen or the product section), with
data-seenry-signature="<name>"
on its root element (check.mjs looks for it); it has a complete still state and never blocks reading.
An idle loop may show the product doing its one job, step by step in the order it really happens, at most one per page, with a 4–6s period, paused on hover and off for reduced motion. Design it from this product's own behavior; never reuse a loop seen on another page or in a reference.
Seenry 构建的每个新页面或重设计,都会有一个精心制作的创意组件,用来展示产品行为或品牌创意;现有 app 内的修改除外。无需询问是否添加,选择本身就是设计的一部分。标志性瞬间来自第 3 步选定的创意,而不是来自菜单。当页面只有一个宏大主张时,一个有力动作通常就是让主张变得可见:使用产品自身的单位,以用户能够阅读的尺寸字面展示它;任何循环超过 5 秒的组件都应提供暂停控制。“Many”绝不能表现为大量微小 chip、域名、logo 或圆点:应展示 3 至 5 个可读实例,以及它们最终形成的结果;如果访客无法阅读,它就只是装饰。
当创意需要时,可以使用大尺度编辑式陈述,将品牌证据内联展示,例如 logo、标记、承诺图标和一个操作按钮,参见 statement component。否则,从 signature kit 及其“Choosing the signature moment”指南开始:产品演示播放器,即光标在真实 UI 中点击和输入;线条插画绘制;环境场;随滚动擦除的 scroll story;实时数字;logo marquee;对比滑块;带 hover 预览的案例卡片。根据品牌调整其内容、颜色、图形和
.seenry/motion.md
中的时间安排,确保没有两个页面看起来相同;如果 brief 有更好的创意,则构建原创组件。每页一个,通常放在最能解释它的位置,例如首屏或产品区块,并在根元素上设置
data-seenry-signature="<name>"
,check.mjs 会查找它;它必须具有完整的静止状态,且绝不阻碍阅读。
空闲循环可以展示产品完成其唯一任务的全过程,按照实际发生顺序逐步呈现,每页最多一个,周期 4 至 6 秒,hover 时暂停,并在 reduced motion 下关闭。它应来自产品自身行为,绝不能复用其他页面或参考中见过的循环。

Craft: illustration and ambient visuals

Craft:插画与环境视觉

Independent studios separate themselves with a drawn visual language, and every new site gets one (the identity's drawn layer), built from its device:
  • One system, not assets. Pick one language and use it everywhere: monoline isometric or orthographic line drawings (1–1.5px strokes in text-2 on the surface color, one accent at most), or precise product diagrams built from real UI parts. Write it as SVG by hand or with code, on the 8px grid, with consistent angles (30° isometric) and stroke weights; never mix flat icons, 3D clay and line art.
  • Explain, do not decorate. Each drawing shows the thing it sits beside: the service's structure, the product's flow, the data's shape. Abstract blobs, gradients and generic "tech" swirls are slop.
  • Ambient canvas. A slow field, grid or line animation behind a first screen or a closing section may carry the brand's movement: start from
    seenry-motion
    's signal field, boundary trace and image reveal and adapt; keep it under 10% CPU, pause offscreen with
    IntersectionObserver
    , stop for reduced motion, and never put text on moving pixels.
  • Bento and feature cards. Give each card one drawing that shows its feature, all in one hairline isometric language. When a figure of hairline (MIT,
    npm i @lucasmarkes/hairline
    , React or plain DOM) fits the feature, use it:
    exploded
    or
    phone
    for an app in layers,
    terminal
    or
    branches
    for developer tools,
    plot
    or
    phosphor
    for data,
    cabinet
    ,
    router
    or
    patch
    for infrastructure,
    vault
    or
    padlock
    for security,
    elevator
    for scale,
    riffle
    for a stack of items,
    keyboard
    ,
    laptop
    and
    drawer
    for what they are. Theme it to the page with its CSS variables (
    --hairline-plate
    set to the card's background,
    --hairline-hi
    ,
    --hairline-edge
    ,
    --hairline-mid
    ,
    --hairline-lo
    ), one figure per card, and keep its read-out outside the drawing. When none fits, draw your own in the same language (with the
    hairline-create
    skill if it is installed): rounded solids drawn as a silhouette plus one dim inner crease, never twelve box edges; the stroke is the only highlight (one bright edge says where to look, no fills, glows or shadows); a composed, uneven rest pose that holds up as a still; no words, digits or icons inside the figure; motion on springs that sleeps offscreen and settles at once for reduced motion.
  • Draw-in, not fly-in. Line illustrations reveal by stroke (
    stroke-dashoffset
    ) or a mask sweep in 600–900ms when first visible, once.
  • Portraits and people: real photographs, or one consistent illustrated style for the whole set (same line weight, same crop, same background); never mixed.
独立工作室通过独有的绘制视觉语言与其他团队区分,每个新站点都需要一套这样的语言,也就是识别体系的绘制层,并从装置发展而来:
  • 一套系统,而不是零散素材。 选择一种语言并贯穿全页:单线等距或正交线稿,文字为 text-2、surface 色背景,笔画 1 至 1.5px,最多一个强调色;或者使用真实 UI 部件构建精确产品图。以代码或手写 SVG 绘制在 8px 网格上,保持角度一致,例如 30° 等距投影,并统一笔画粗细;绝不能混用扁平图标、3D clay 和线稿。
  • 用于解释,而非装饰。 每张图画都展示其旁边内容所涉及的事物,例如服务结构、产品流程和数据形态。抽象色块、渐变和泛化的“科技”旋涡都属于 slop。
  • 环境画布。 首屏或收尾区块背后的缓慢场、网格或线条动画可以承载品牌运动:从 seenry-motion 的 signal field、boundary trace 和 image reveal 开始并调整;CPU 占用保持在 10% 以下,使用
    IntersectionObserver
    在离屏时暂停,reduced motion 时停止,绝不在运动像素上放文字。
  • Bento 和功能卡片。 每张卡片配一张展示其功能的图画,全部使用同一套发丝线等距语言。如果 hairline(MIT,
    npm i @lucasmarkes/hairline
    ,React 或普通 DOM)的某个 figure 适合该功能,则使用它:分层结构用
    exploded
    或
    phone
    ,开发工具用
    terminal
    或
    branches
    ,数据用
    plot
    或
    phosphor
    ,基础设施用
    cabinet
    、
    router
    或
    patch
    ,安全用
    vault
    或
    padlock
    ,缩放用
    elevator
    ,堆叠项目用
    riffle
    ,键盘、笔记本和抽屉分别使用
    keyboard
    、
    laptop
    和
    drawer
    。使用其 CSS 变量设置主题,例如用
    --hairline-plate
    设置卡片背景,并设置
    --hairline-hi
    、
    --hairline-edge
    、
    --hairline-mid
    、
    --hairline-lo
    ;每张卡片只放一个 figure,读数放在图画之外。若没有适合的 figure,则使用
    hairline-create
    skill(如果已安装)在同一语言中自行绘制:圆角实体使用剪影加一处微弱内折线,绝不能画出 12 条盒边;只用笔画产生高光,一条明亮边缘用于指示视觉焦点,不使用填充、发光或阴影;采用有意识的不均匀静止姿态,即使作为静态画面也成立;figure 内不放文字、数字或图标;使用 spring 动效,离屏时休眠,并在 reduced motion 下直接稳定到最终状态。
  • 绘制进入,而不是飞入。 线稿首次可见时,通过
    stroke-dashoffset
    或遮罩扫描,在 600 至 900ms 内绘制一次。
  • 肖像和人物: 使用真实照片,或为整组人物使用一种一致的插画风格,保持相同笔画、裁切和背景;绝不能混用。

Grid and alignment

网格与对齐

4px base, 8px layout values, spacing
4 8 12 16 24 32 48 64 96 128
. Align ink, not boxes: a title's cap height meets the media's top edge, icons sit on the text keyline; edges are exact or at least 8px apart (alignment, optical). Components have at most 3 sizes and 3 weights (components); pages share one shell (pages).
以 4px 为基础,布局值使用 8px,间距为
4 8 12 16 24 32 48 64 96 128
。对齐 ink,而不是盒子:标题 cap height 与媒体顶边对齐,图标位于文字 keyline 上;边缘必须精确重合,或至少相隔 8px(对齐、光学对齐)。组件最多有 3 种尺寸和 3 种字重(组件);页面共享一个 shell(页面)。

Guides

指南

NeedRead
Why leading teams choose their colors, radii, weights and density; premium, clean, elegant rulespremium
Concept, directions, type voice, palette origin, signature component, generated-page defaultsart direction
Tokens, grid, spacing, radius, elevation, starter CSSsystem
Exploring compositions inside a fixed frame, studio critiqueexploration
Constructing and speccing components, anatomiescomponents
Page shells, section archetypes, page templatespages
Font choice by product type, scale, tracking, numeralstypography
Palette roles, dark mode, contrastcolor
Keylines, ink-level alignment, optical inset, proportionalignment
Optical centering, size compensation, side bearing, icon nudgesoptical
Optical corrections, icons, hit areas, statescraft
Headlines, labels, errors, empty stateswriting
Which library to use instead of hand-rolling a componentlibraries
Phone browser quirks: viewport units, tap, zoom, safe areasmobile web
Keyboard, semantics, zoom, reduced motionaccessibility
Choosing material; sourcing and generating itimagery and
seenry-assets
Seenry MCP recipes and offline researchresearch
The design sheet: rationale, research, anatomy, guidelinessheet
Measured evidence from leading product sitesbenchmarks
Libraries and frameworks by design targetstack
AI tells and their fixesanti-slop
Faithfully reproducing a supplied designreplication
Use
seenry-assets
for images, icons and fonts,
seenry-motion
for transitions and interaction,
seenry-apps
for native mobile,
seenry-branding
for identity systems,
seenry-review
for audits, diffs and stress tests.
需求阅读
领先团队为何选择颜色、圆角、字重和密度;高级、干净、优雅规则premium
概念、方向、字体语气、色板来源、标志性组件、生成页面默认风格art direction
Token、网格、间距、圆角、高度、starter CSSsystem
在固定画框中探索 composition、工作室评审exploration
构建和定义组件、组件结构components
页面 shell、区块类型、页面模板pages
按产品类型选择字体、尺度、tracking、数字typography
色板角色、深色模式、对比度color
Keyline、ink 层级对齐、光学内缩、比例alignment
光学居中、尺寸补偿、side bearing、icon nudgeoptical
光学修正、图标、点击区域、状态craft
标题、标签、错误、空状态writing
应使用哪个库,而不是自行实现组件libraries
手机浏览器怪癖、viewport 单位、点击、缩放、安全区域mobile web
键盘、语义、缩放、reduced motionaccessibility
选择材质;素材采购与生成imagery 和
seenry-assets
Seenry MCP 配方与离线调研research
设计表:理由、调研、结构、指南sheet
领先产品站点的实测证据benchmarks
按设计目标选择库和框架stack
AI 痕迹及其修复方式anti-slop
忠实复现提供的设计replication
使用
seenry-assets
获取图片、图标和字体,使用
seenry-motion
处理 transition 和交互,使用
seenry-apps
构建原生移动端,使用
seenry-branding
构建识别体系,使用
seenry-review
执行审计、diff 和压力测试。

Tools

工具

  • Core components, transitions, interaction components, signature components and the statement: copyable, token-driven, accessible, light and dark, each with a gallery.
  • Research pack: bounded scripted research (credit balance, library guide, one
    research_design_brief
    , at most 11 credits) saved with its images and evidence into
    .seenry/research/
    .
  • Bar: without Seenry MCP, captures category leaders' live first screens (desktop, or phone for apps) as the critic's bar and starts a pack to complete by hand.
  • Screens and motion from video: the review board and motion judge for native apps and anything filmed instead of clicked;
    check.mjs --screens … --video …
    runs both.
  • Pick: renders several first-screen compositions side by side at desktop and phone and has a fresh model choose one blind against the references.
  • Check: the finishing gate. Runs the review board, blocks on slop, then the blind critic against the reference screens; prints PASS or the fixes to apply.
  • Image generation: photographs through the Codex CLI's image model from any host; single or batched.
  • Motion judge: samples eligible controls, records their transitions and a rapid double click, measures animations (properties, durations, easing), layout shift, long frames and reduced motion, blocks hard violations and scores the motion blind.
  • Photo check: a blind art director scores each image for its slot against the references and writes a better prompt for anything under 8.
  • Blind critic: a fresh Codex or Claude process scores the page against the references with the premium standard and returns ranked fixes.
  • Review board: the page at review scale beside the references, plus craft blockers the grid audit cannot see (legibility at scale, eyebrows, numbering, weights, font loading, figure spacing, phone clipping, fixed overlays, motion coverage). Run it every review round.
  • Product kit and motion floor: the starting quality floor for app screens and interaction.
  • Page audit: one command for any project (URL or HTML file) at several widths; runs the system and optical audits and prints fixable findings. Needs Playwright.
  • Optical audit: rasterizes icons to measure ink; reports off-center icon buttons (including asymmetric shapes), icons missing their label's cap-height center, labels not centered in controls, unbalanced icon-side padding and headline side bearing, each with a CSS nudge.
  • Motion scan: reads the project's CSS, HTML, scripts and Tailwind classes and checks every duration, delay, easing and animated property against the motion tokens, plus
    transition: all
    , layout-property transitions, stagger steps and a missing reduced-motion branch, in well under a second and without a browser.
    check.mjs
    runs it every round; run it yourself after any motion change.
  • System audit: counts rendered font sizes, weights, families, radii, shadows and colors; lists off-grid padding, gaps and margins; flags non-concentric corners, wrapped control labels and components over 3 sizes or weights; per component, measures ink-level alignment (cap tops, baselines, drawn glyphs, media edges): near-miss edges, media anchors and optical insets. Run it on every screenshot pass.
  • Design sheet and anatomy capture: the end-of-task deliverable, styled like seenry.design.
  • Exploration sheet: renders variant files side by side at real widths for critique.
  • Grid overlay: development-only columns, gutter and 8px checks.
  • Palette: OKLCH ramps from one brand color, two-tier tokens for light and dark, and WCAG + APCA measurement of every pair;
    --check FG BG
    for one pair.
  • Starter tokens and DESIGN.md template.
  • Text collisions, control geometry, visual inventory, token contrast, contrast check.
  • Core components、transitions、interaction components、signature components 和 statement:可复制、由 token 驱动、无障碍,并支持浅色和深色,每个都有 gallery。
  • Research pack:受限脚本调研,使用 credit balance、library guide、一次
    research_design_brief
    ,最多 11 credits,并将图像和证据保存到
    .seenry/research/
    。
  • Bar:在没有 Seenry MCP 时,捕获品类领先者的实时首屏,桌面端或移动 app 使用手机端,作为评审标杆,并启动需要手动补全的资料包。
  • Screens 和 motion from video:用于原生 app 和所有通过录屏而非点击检查的内容;
    check.mjs --screens … --video …
    会运行两者。
  • Pick:在桌面端和手机端并排渲染多个首屏 composition,并让一个全新模型对照参考进行盲选。
  • Check:收尾门禁。运行评审委员会,阻止 slop,然后根据参考屏幕调用盲审;输出 PASS 或需要应用的修复。
  • Image generation:从任意主机通过 Codex CLI 的图像模型生成照片,支持单张或批量。
  • Motion judge:采样符合条件的控件,记录 transition 和快速双击,测量动画属性、时长、easing、布局偏移、长帧和 reduced motion,阻止严重违规并对动效进行盲审评分。
  • Photo check:盲审艺术指导根据参考为每张图片评分,并为低于 8 分的图片改写更好的提示词。
  • Blind critic:全新的 Codex 或 Claude 进程根据参考和高级标准为页面评分,并返回按优先级排列的修复。
  • Review board:以评审尺度并列展示页面与参考,并执行网格审计无法发现的工艺 blockers,包括缩放后可读性、eyebrow、编号、字重、字体加载、图形间距、手机裁切、固定 overlay 和动效覆盖。每轮都要运行。
  • Product kit 和 motion floor:app 屏幕与交互的起始质量底线。
  • Page audit:一个命令即可在多个宽度下审计任意项目中的 URL 或 HTML 文件;运行系统和光学审计并输出可修复问题。需要 Playwright。
  • Optical audit:将图标栅格化以测量 ink;报告未居中的图标按钮,包括不对称形状、图标缺少标签 cap-height 居中、标签未在控件中居中、不对称的图标侧内边距,以及标题 side bearing,每项都给出 CSS 微调建议。
  • Motion scan:读取项目的 CSS、HTML、脚本和 Tailwind class,检查每个时长、delay、easing 和动画属性是否使用 motion token,同时检查
    transition: all
    、布局属性 transition、stagger 步进和缺失的 reduced-motion 分支;耗时远少于一秒。check.mjs 每轮都会运行;任何动效改动后也应自行运行。
  • System audit:统计渲染后的字号、字重、字体家族、圆角、阴影和颜色;列出偏离网格的 padding、gap 和 margin;标记非同心圆角、换行的控件标签,以及超过 3 种尺寸或字重的组件;逐组件测量 ink 层级对齐,包括 cap top、baseline、绘制字形和媒体边缘,并报告接近但未命中的边缘、媒体锚点和光学内缩。每次截图检查都要运行。
  • Design sheet 和 anatomy capture:任务最终交付物,样式与 seenry.design 一致。
  • Exploration sheet:按真实宽度并排渲染变体文件以供评审。
  • Grid overlay:仅开发时使用的列、gutter 和 8px 检查工具。
  • Palette:从一个品牌颜色生成 OKLCH ramp,为浅色和深色提供两级 token,并测量每一对颜色的 WCAG 与 APCA;用法为
    --check FG BG
    。
  • Starter tokens 和 DESIGN.md template。
  • Text collisions、control geometry、visual inventory、token contrast、contrast check。

Report

报告

Lead with a brand guidelines summary the user can read without opening anything, then the paths:
Idea:      <the chosen idea in one sentence, the claim and proof it comes from, and where it shows on the page>
Bar:       <the 3 reference screens and the five lines on why they look premium>
Direction: <intent in one sentence>
Type:      <family and weights by role; why>
Palette:   <name hex role> · … ; temperature and why
Radius:    <family by role>; elevation rule
Imagery:   <what the images are and how they were made>
Owned detail: <the one detail this brand owns>
Rules:     3–5 testable do/don't lines for future work
Critic:    <round-by-round blind scores from check.mjs, e.g. 6 → 7 → 8 → 9> and what moved it
Motion:    <motion judge score, durations and curves used, the signature moment>
Verified:  <widths, interactions, contrast>; not verified: <…>
Write the same guidelines into
DESIGN.md
under "Brand guidelines". State the critic's final score, never a self-score.
先给出用户无需打开其他文件就能阅读的品牌指南摘要,然后列出路径:
Idea:      <一句话说明所选创意、主张及其证据来源,以及它出现在页面的哪个位置>
Bar:       <3 个参考屏幕,以及它们显得高级的五个原因>
Direction: <用一句话说明意图>
Type:      <字体家族、各角色字重,以及选择原因>
Palette:   <名称 hex 角色> · … ;色温及原因
Radius:    <按角色划分的圆角家族>;高度规则
Imagery:   <图片内容及制作方式>
Owned detail: <该品牌拥有的一个细节>
Rules:     <未来工作可测试的 3 至 5 条 do/don't 规则>
Critic:    <check.mjs 每轮盲审得分,例如 6 → 7 → 8 → 9,以及具体提升因素>
Motion:    <motion judge 得分、所用时长和曲线、标志性瞬间>
Verified:  <已验证的宽度、交互和对比度>;未验证:<…>
将相同指南写入
DESIGN.md
的“Brand guidelines”部分。说明评审者的最终得分,绝不提供自评分。