10 KiB
章节开发指引(每章开发必读)
这是视频,不是 PPT
正在做的是视频网页 —— 讲者点击 + 口播 + 录屏发出去给观众看。 判断每一步做对没有,标准非常朴素:
- 不像 PPT —— 观众感觉是在看视频,不是在看翻页幻灯(页面中不得包含页眉页脚,突出主视觉元素)
- 看起来舒服 —— 配色、字体、节奏都让人放松,不得出现大量的纯文字、不得出现字体太小的文字
- 有视觉冲击 —— 画面在演事情,不只是文字堆砌,不得一次性全部罗列所有元素,关键元素随进度逐步推进展现
必须用 CSS / SVG / Canvas / JS 大胆绘制视觉演示
这是底线。
每一章都至少要有 1~2 处"动起来的图 / 演示元素"。 整章只有纯文字 = 验收不过 = 回去重做。
视频感最强的来源 —— 用户看见了被讲解的东西在屏幕上演给他看:
- 数字在递增 / 横条在生长 / 排名在交换
- 流程节点依次点亮 / 连线自绘
- 对比被一刀切开 / 聚光灯扫过 / 形状在变形
- 粒子聚拢成形 / 噪声背景流动 / 字符雨下落
- 模拟终端交互
- 模拟 AI 对话窗口
- 模拟文件目录树
怎么组合发挥都行 —— 但每章必须用,不允许整章纯文字。
逐步揭示,禁止一次全展示
整页内容由全局 step 计数器驱动 —— 点击空白处或按 → 键推进
一步。设计每一步时心里要默念:这一步演什么,下一步演什么。
最重要的一条:
当口播在说"第一是 X、第二是 Y、第三是 Z"这种清单 / 列表时, 严禁一个 step 把 X / Y / Z 全部 stagger 上来。
正确做法:
- 一项 = 一个 step
- X 只在它自己的 step 里独自亮起
- 讲到 Y 时,X 灰化保留作上下文 + Y 亮起
- 讲到 Z 时,X / Y 都灰化 + Z 亮起
判断标准:讲者会一个一个念出来吗?会 → 必须逐个揭示。
内容取舍:抓重点,不要原文搬运
视频是音 + 画:
- 口播负责把信息线性讲清楚
- 画面负责把节拍重点放大、节奏感拉出来
每个 step 屏幕上只挂这个节拍最值得放大的 1~3 个东西 —— 一个 hero 标语 / 一个数字 / 一组对比 + 必要的视觉演示。
不要试图把原文每个字都搬上去。那是论文阅读,不是视频。
双源:节奏跟口播稿,细节回原文章
节奏 / 顺序 / 节拍切分 跟
script.md口播稿 —— 关键顺序不能乱。 画面细节 / 数据 / 引用 / 案例 回article.md原文章抽。
outline.md 已经在每章首段抽了「信息池」做参考。但实现章节时
也必须回去翻 article.md 本章对应段落 —— 那里有比口播稿多得多的
细节(具体数字、引用原话、案例维度、出处时间)。把这些挂到画面上,
让画面信息密度 > 口播信息密度。
如果你只用了口播稿的内容做章节 —— 屏幕等于把口播打字打了一遍 —— 那就是 PPT,不是视频。
章节实现一定要回原始文章抽细节,不要嫌麻烦。
字体 / 配色 / 动画 / 留白 —— 视频演示基本审美
视频观众离屏幕远、注意力浮动,所以:
- 字号要大 —— hero 文字至少 80px 起,远观也能看清
- 留白要多 —— 舞台四边都要让出大留白,画面不要塞满
- 配色要舒服 —— 颜色和字体家族必须用主题 token(保证换主题不破); 字号 / 间距 / 时长这些章节按内容自由发挥(详见下方「代码层最小约束」)
- 动画要舒服 + 炫酷 —— 出现得干净利落,停下来不抢戏;炫酷靠 设计巧思(内容驱动的演示动画),不靠速度暴力或密集闪烁
避免 AI 味
AI 生成的网页有几种共有的"视觉指纹",全部不要:
- 紫粉 / 蓝紫对角渐变背景
- 圆角卡片 + 彩色左边框装饰
- 渐变按钮 + 大圆角药丸
- emoji 当图标用
- 假数据 / 假 logo / 假"X 万用户"
- 整章 N 步用同一种入场动画(全场 fade / 全场 blur)
- 每步都挂 ken burns / 光晕呼吸 / 持续闪烁
- 每屏右下角都挂 mono 角标 / 序号
缺的东西承认缺 —— 用 placeholder 占位卡(一张写着"image · 16:9 描述"的卡片,按真实比例留位)。不要用 emoji 凑、不要找无关图凑、 不要编数字。没有就承认没有,比 fake 强一百倍。
框架已经搭好的部分(理解就好,不需重写)
- 16:9 固定舞台:内容设计在 1920×1080 上,外层 transform scale 缩到任何视口,外围 letterbox 留黑 —— 没有响应式断点
- 舞台居中 + 大留白:上下左右四边都让出至少 80px 的安全区
- 隐形进度条:屏幕底部默认完全透明,鼠标悬到底部边缘才出现, 支持点击跳转章节(录屏时摄像头看不到任何 chrome 控件)
- 全局 step 驱动:点击舞台空白处 / 键盘 ←/→ 推进;章节是
step的纯函数,没有定时器、没有命令式状态
代码层最小约束
不能踩的红线,其它怎么写都行:
必须用 token(换主题不破的底线)
- 颜色:
--shell/--surface/--surface-2/--surface-3/--text/--text-2/--text-mute/--text-faint/--rule/--accent/--accent-soft/--accent-glow—— 禁硬编码 hex / rgb / 颜色名 - 字体家族:
--font-display-cn/--font-display-en/--font-body/--font-mono—— 禁硬编码字体名 - 主题性格签名通过 primitive class 自动接入,不要在章节 CSS 里
重定义它们:
.hero-num(hero 数字风格 —— 主题决定衬线 / 等宽 / 粗黑).rule(分割线 —— 主题决定 1px 实线 / 4px 实线 / 2px 虚线).card(卡片 —— 主题决定圆角 + 阴影性格).stage-frame(舞台底色 / 圆角 / 阴影 / 装饰图案 / vignette 全自动,章节什么都不用做)
可硬编码 / 可 token,按内容自由(解锁章节自由设计)
- 字号:想要 80px 就写 80px,想用
var(--t-h1)也行 - 间距 / padding / margin:按画面节奏写具体值
- 动画时长 / 缓动 / keyframe:按动画意图写具体值
(节奏气质参考
theme.json的mood—— 慢主题别写 200ms 的快动画) - 边框宽度 / 非性格圆角 / 字距:随手写
- gap / grid 布局尺寸:按画面构图写
其它工程红线
- 不用
setTimeout/setInterval驱动动画 —— 用 CSS keyframes - 章节内的可交互元素(按钮 / 自定义控件)加
data-no-advance, 否则点了会被舞台误推进 step - 章节代码物理隔离:每章独立文件夹、独立 CSS 类前缀,不跨章 import
- 每章必须有
narrations.ts(与<Chapter>.tsx同目录):- 数组长度 = 章节代码里
if (step === N)出现的最大 N + 1 - 每个元素 = 一个 string,该 step 要播的口播文本(来自
script.md对应段,语义一致——可微调标点 / 断句以适配 TTS,但不能漏关键短语) - 完全无音频的过场 step 用空串
"",Auto 模式会按字数估时撑过 - 这是音频合成 + Auto 模式自动推进的唯一真相源,写错或漏写 会让录屏对不上嘴
- 数组长度 = 章节代码里
- 动画时长必须 ≤ 该 step 的口播时长——Auto 模式严格按音频结束推进,
没有"等动画跑完"的兜底。动画太长 → 三选一:写更长口播 / 拆 step
/ 调动画速度。详细机制见
AUDIO.md
完工自检(写完每章强制执行,不可跳过)
⚠️ 硬性流程:章节实现完成后必须走完下面的自检 → 修复 → 汇报 三步。禁止"实现完成 → 直接汇报给用户"。
执行方式(按能力降级):
- 优先 Agent Teams:开一个独立的 reviewer agent,传入本章代码路径
- 本文件 Part「完工自检」清单,让它逐项核查 + 出结论(哪几条 pass / 哪几条 fail + 证据)。
- 其次 subAgent:当前 agent 没有 Teams 能力但能开 subagent,用 subagent 走同样的流程。
- 都没有:当前 agent 自己严格逐项核查,不允许目测一遍就放行。
拿到自检结论后:先按 fail 项改完代码,然后再向用户汇报"做完 了 + 自检结论 + 改了什么"。直接拿原始结论汇报但不修复 = 违规。
写完一章 + 在浏览器点完一遍后逐项过:
- 每章至少 1~2 处 CSS / SVG / Canvas / JS 视觉演示 —— 没有 = 回去补
- 不同 step 的主导动作不一样 —— 全章一种动画 = 回去重做
- 字号大、留白舒服、配色舒服
- 清单 / 列表逐个揭示,1 项 = 1 step
- 画面信息比口播稿多(回了原文章抽细节挂上来)
- 没有紫粉渐变 / 圆角彩色边框 / emoji / 假数据 / 假 logo
- 缺的素材用 placeholder,不是 fake
- 颜色和字体家族全部走 token(无硬编码 hex / 字体名);hero 数字 / 卡片 / 分割线 / 舞台用 primitive class 接入主题性格 —— 这两条不 达标 = 换主题就破
- 章节交付时主动告诉用户:"本章还缺这些素材"
- 禁止出现小号字体,大量纯文字(出现后必须回去改)
- 禁止出现任何形式的页眉页脚,仅展示关键内容(出现后必须回去改)
npx tsc --noEmit通过 —— 不通过禁止汇报"做完了"- 章节代码物理隔离:独立 CSS 类前缀(
.cd-/.mg-/ ...), 未跨章 import,未修改chapters.ts之外的共享文件 narrations.ts存在且narrations.length=== 章节代码里if (step === N)用到的最大 N + 1(不一致 = Auto 模式录屏会错位)- 每条 narration 文本与
script.md对应段落语义一致(关键短语 / 数字 / 引用全部保留,可为 TTS 微调标点断句)—— 录屏画外音应当能被 观众听成同一段稿子 - 每个 step 的视觉动画时长 ≤ 口播时长(口播
字数 ÷ 4≈ 秒数)—— 超出会被 Auto 模式当场切断,动画演到一半就跳下一步
任一未过 → 回去改。不要"先放着以后修"。