visual-recap

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Visual recap

可视化回顾

A one-page HTML recap of a period of work: a card per project, each with a drawing of what changed, a headline that names the outcome, and short bullets the reader can check off. Cards sit in a row on a wide screen and become rows on a phone.
render.py
owns the page; you write
notes.md
, then
recap.json
.
用一页 HTML 回顾一段时间内的工作:每个项目一张卡片,每张卡片都有一幅展示变化内容的图、一个点明成果的标题,以及可供读者逐项核对的简短要点。卡片在宽屏上横向排成一行,在手机上则纵向排列为多行。
render.py
负责渲染页面;你编写
notes.md
,然后编写
recap.json
。

1. Set the scope

1. 确定时间范围

The scope is the first of these that holds:
  1. A period the request names: "today", "this week", "October", a date range.
  2. A period the conversation is about: when the recap is asked for while discussing, say, this week's work, the scope is this week. What the conversation already gathered goes into
    notes.md
    , and the sources fill in the rest.
  3. This session's work: when the conversation is the work itself, the recap covers what was done in it. The conversation is the source; step 2 reads it in place of the user's sources.
  4. Nothing yet: in a session with no work to recap, ask which period.
When two of these fit, such as a session that did work and also discussed this week, ask which one, naming both with their dates.
Resolve a period to a start and end in the user's local time zone; every later step reads only that window. Open your reply with the scope in one line, such as "Recapping this week, Nov 9 to 15", so the user can redirect it.
按以下优先级,选择第一个适用的时间范围:
  1. 请求中指定的时间段:“今天”“本周”“10 月”或某个日期范围。
  2. 对话讨论的时间段:当用户在讨论例如本周工作时要求生成回顾,时间范围就是本周。对话中已经收集到的信息写入
    notes.md
    ,其余内容由各个来源补齐。
  3. 本次会话中的工作:如果对话本身就是工作内容,回顾应涵盖其中完成的工作。对话就是信息来源;此时第 2 步改为读取对话,而不是读取用户提供的来源。
  4. 暂时没有内容:如果会话中没有可回顾的工作,询问要回顾哪个时间段。
如果其中两项都适用,例如本次会话既完成了工作,又讨论了本周工作,应询问用户选择哪一个,并同时注明两个时间范围的日期。
将选定的时间范围解析为用户本地时区中的起止时间;后续每一步只能读取该时间窗口内的内容。回复的第一行应写明时间范围,例如“回顾本周,11 月 9 日至 15 日”,以便用户重新指定。

2. Gather into notes.md

2. 汇总到 notes.md

For a session recap, write
notes.md
from the conversation and go to step 3. For a period, find the sources in the user's instructions, under a heading such as "Visual recap sources". When there is none, ask once where their work leaves a trace (code hosting, an issue tracker, a task app, notes, agent sessions) and offer the line they could save to their instructions for next time.
Read each source over the period and write what it shows into
notes.md
, grouped by project, each outcome with the link or file that shows it:
markdown
undefined
如果是会话回顾,根据对话编写
notes.md
,然后进入第 3 步。如果要回顾一段时间,则在用户说明中查找相关来源,它们可能位于“Visual recap sources”这样的标题下。如果未列出任何来源,应询问用户一次:他们的工作痕迹保存在哪里(代码托管平台、问题跟踪器、任务应用、笔记、Agent 会话),并提供一句可保存到用户说明中、供下次使用的话。
阅读每个来源在该时间段内的内容,将结果按项目分组写入
notes.md
,每项成果都附上能够证明它的链接或文件:
markdown
undefined

SAM3

SAM3


`sources/` has a guide per source: `github.md`, `sessions.md`, `poleway.md`. Read the ones the user named; read any other source the same way, outcomes with links. When no source is reachable, run `sources/interview.md`. A `notes.md` the user hands you, or one written on another machine, is merged in as another source.

Leave out personal work (health, family, errands) unless the user asks for it. Done when every source the user named is read or reported as unreachable.

`sources/` 中为每种来源提供了一份指南:`github.md`、`sessions.md`、`poleway.md`。读取用户指定的指南;对于其他来源,也采用相同方式阅读,记录带链接的成果。如果没有可访问的来源,运行 `sources/interview.md`。如果用户提供 `notes.md`,或该文件是在另一台机器上编写的,则将其作为另一个来源合并进来。

排除个人事务(健康、家庭、跑腿等),除非用户明确要求。完成标准:用户指定的每个来源都已读取,或已报告无法访问。

3. Check every number

3. 核对每一个数字

A comment or session claim is a lead, not a fact. For each count, PR, version and benchmark in
notes.md
, look at the source it cites, and correct or drop what it doesn't show. Done when every number has a source you looked at.
评论或会话中的说法只是线索,不是事实。对于
notes.md
中的每个计数、PR、版本和基准测试,查看其引用的来源;来源无法证明的内容应更正或删除。当每个数字都有你实际查看过的来源作为依据后,本步骤完成。

4. Write the cards

4. 编写卡片

One card per project, most important first. Aim for 3 or 4; one or two is fine when that is all the period holds, such as a session recap. A fifth narrows every card on a wide screen, so merge or drop the least important instead. Match the card to the period: a day's card is what moved that day; a week's or month's card is the outcome of the whole stretch, such as "v0.7.0 released, 2× faster on CUDA", with the steps behind it left to the bullets.
json
{"title": "Nov 11 update", "subtitle": "Wednesday · four projects",
 "cards": [{"area": "SAM3", "tint": "sage",
   "headline": "Fused attention: 93 → 68 ms per frame",
   "bullets": ["14 sam3-onnx PRs merged", "<b>6 ms</b> behind PyTorch on an RTX 3080 Ti", "v0.7.0 after video parity checks"],
   "svg": "<svg viewBox=\"0 0 200 200\" aria-hidden=\"true\">...</svg>",
   "css": "optional, for custom motion"}]}
  • title
    names the period:
    Nov 11 update
    ,
    Week of Nov 9
    ,
    November 2026
    .
    subtitle
    adds the weekday or date range and the project count, such as
    Wednesday · four projects
    .
  • area
    : the project name.
  • tint
    :
    sand
    ,
    sage
    ,
    mist
    ,
    clay
    or
    stone
    , each card a different one.
  • headline
    : the outcome, with its number when there is one.
  • bullets
    : 3 to 5 things a teammate could check, each under 8 words. Wrap at most one number per bullet in
    <b>
    .
examples/2026-11-11.json
is a finished daily recap.
每个项目一张卡片,重要的排在前面。目标是 3 或 4 张;如果整个时间段只有这些内容,1 或 2 张也可以。第 5 张会压缩宽屏上每张卡片的宽度,因此应合并或删除最不重要的项目,而不是硬塞进去。卡片应与时间段相匹配:一天回顾的卡片展示当天推进的事项;一周或一个月的卡片展示整段时间的成果,例如“v0.7.0 已发布,在 CUDA 上快 2 倍”,具体步骤则放在要点中。
json
{"title": "Nov 11 update", "subtitle": "Wednesday · four projects",
 "cards": [{"area": "SAM3", "tint": "sage",
   "headline": "Fused attention: 93 → 68 ms per frame",
   "bullets": ["14 sam3-onnx PRs merged", "<b>6 ms</b> behind PyTorch on an RTX 3080 Ti", "v0.7.0 after video parity checks"],
   "svg": "<svg viewBox=\"0 0 200 200\" aria-hidden=\"true\">...</svg>",
   "css": "optional, for custom motion"}]}
  • title
    标注时间段,例如:
    Nov 11 update
    、
    Week of Nov 9
    、
    November 2026
    。
  • subtitle
    补充星期或日期范围以及项目数量,例如
    Wednesday · four projects
    。
  • area
    :项目名称。
  • tint
    :
    sand
    、
    sage
    、
    mist
    、
    clay
    或
    stone
    ,每张卡片使用不同的色调。
  • headline
    :成果;如果有数字,应包含在标题中。
  • bullets
    :列出 3 到 5 项队友可以核对的内容,每条控制在 8 个词以内。每条要点最多用一个
    <b>
    标签包裹一个数字。
examples/2026-11-11.json
是一份已完成的每日回顾。

5. Draw

5. 绘图

Read
DRAWING.md
, then draw one SVG per card.
读取
DRAWING.md
,然后为每张卡片绘制一幅 SVG。

6. Render and look

6. 渲染并检查

sh
python3 render.py recap.json -o <out>.html --shots <dir>
It rejects a malformed card with the field to fix. Open
<dir>/shots.png
, the desktop and phone layouts in their final frame, and go through the checklist in
DRAWING.md
for every drawing. Redraw and render again until every drawing passes.
sh
python3 render.py recap.json -o <out>.html --shots <dir>
如果卡片格式有误,它会拒绝生成并指出需要修复的字段。打开
<dir>/shots.png
,检查最终画面中的桌面端和手机端布局,并按照
DRAWING.md
中的检查清单逐项检查每幅图。重新绘制并再次渲染,直到每幅图都通过检查。

7. Share

7. 分享

Share the HTML as the user's instructions say for HTML files, and reply with the link and the card headlines.
按照用户针对 HTML 文件的说明分享 HTML,并在回复中提供链接和各卡片的标题。