From a0de9d3d8662c684b92026c522a752e642c94e44 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 18 May 2026 11:19:26 +0800 Subject: [PATCH] docs: add home open source card copy follow-up PRD --- prd-home-open-source-card-copy-followup.md | 395 +++++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 prd-home-open-source-card-copy-followup.md diff --git a/prd-home-open-source-card-copy-followup.md b/prd-home-open-source-card-copy-followup.md new file mode 100644 index 0000000..073ccba --- /dev/null +++ b/prd-home-open-source-card-copy-followup.md @@ -0,0 +1,395 @@ +# Home 页开源贡献卡片文案与层级优化 Follow-up PRD + +## 背景 + +在 `https://www.ephron.ren/` 首页新增“开源贡献”板块后,线上实际呈现已可用,但从阅读体验看,当前卡片仍有两个小问题: + +1. **主次信息层级不够自然** + - 当前卡片把“项目 / 仓库名称”作为主标题 + - 把“贡献角色 / 一句话说明”作为副标题 + - 但首页扫读场景下,用户更想先看到“你贡献了什么”,而不是先看仓库名 + +2. **按钮文案固定为 `查看贡献`,语义偏泛** + - 无法区分是在看 PR、仓库、提交还是主页 + - 后台当前只能改 link,不能改按钮文案 + +本 PRD 是一个**很小的 follow-up**,只解决这两个问题: +- 优化开源贡献卡片的标题层级 +- 增加按钮文案可后台配置能力 + +不改其他 home 区块,不做视觉重构。 + +--- + +## 目标 + +### 产品目标 +让“开源贡献”卡片更符合首页阅读习惯: +- 第一眼先看到**具体贡献成果** +- 第二眼再看到**项目 / 仓库归属** +- 按钮文本能表达链接实际含义 + +### 技术目标 +在不破坏已有 `open_source` 数据结构兼容性的前提下,补充一项可选字段并微调现有文案语义。 + +--- + +## 问题定义 + +### 1. 当前标题层级问题 + +当前模板结构为: + +- `title` → 大标题 +- `role` → 副标题 + +而当前线上实际数据更偏向: +- `title = 项目 / 仓库名称` +- `role = 贡献角色 / 一句话说明` + +这会导致: +- 用户先看到“仓库名” +- 后看到“具体贡献点” + +对于首页扫读来说,信息顺序不够自然。 + +### 2. 当前按钮文案问题 + +当前前台按钮固定写死为: + +```jinja2 +查看贡献 +``` + +问题: +- 语义过泛 +- 不能针对不同链接类型定制 +- 后台不可改 + +--- + +## 设计原则 + +### 原则 1:成果优先,出处次之 +开源贡献卡片应优先展示: +- 你做了什么 +- 贡献结果是什么 + +而不是先展示: +- 仓库路径 / 项目名 + +### 原则 2:保持最小改动 +这次不推翻 `open_source` 区块设计,不重做 UI,只做: +- 数据语义调整建议 +- 一个可选字段扩展 +- 模板微调 + +### 原则 3:兼容历史数据 +旧数据里如果没有新增字段,页面仍必须正常渲染。 + +--- + +## 方案设计 + +## 一、调整开源贡献卡片的主次信息语义 + +### 建议语义 +建议将 `open_source` 条目的字段语义明确为: + +- `title` + - 用于展示**贡献成果摘要 / 一句话核心贡献** + - 这是卡片主标题 +- `role` + - 用于展示**项目名 / 仓库名 / 贡献归属 / 类型补充** + - 这是卡片副标题 + +### 推荐示例 + +将原来类似: + +```json +{ + "title": "NousResearch/hermes-agent", + "role": "Open-source bug fix:Xiaomi MiMo reasoning_content 兼容性修复" +} +``` + +调整为: + +```json +{ + "title": "Xiaomi MiMo reasoning_content 兼容性修复", + "role": "NousResearch/hermes-agent" +} +``` + +### 为什么不建议只在模板里互换 `title` / `role` + +不建议简单把模板渲染位置对调,而保留原字段语义不变。原因: + +1. **字段语义会更混乱** + - `title` 名字天然更适合主标题 + - `role` 更适合作为补充说明 + +2. **后台编辑心智会更差** + - 管理页如果继续写“项目 / 仓库名称”对应 `title` + - 但前台实际把它渲染成副标题 + - 会让编辑者产生混乱 + +### 结论 +**保持模板结构不变,但调整后台字段文案与数据填写语义。** + +也就是: +- `title` 字段改成“贡献摘要 / 主标题” +- `role` 字段改成“项目 / 仓库名称(可选)” + +--- + +## 二、增加按钮文案可编辑字段 + +### 新增字段 +在 `open_source` 每条记录中新增: + +```json +"link_label": "查看 PR" +``` + +### 字段含义 +- `link_label` + - 对应卡片底部跳转按钮的显示文本 + - 可选字段 + +### 示例完整结构 + +```json +{ + "title": "Xiaomi MiMo reasoning_content 兼容性修复", + "role": "NousResearch/hermes-agent", + "date": "2026.05", + "bullets": [ + "修复 MiMo 在 Hermes Agent 中的 reasoning_content 兼容问题", + "补充验证与使用说明" + ], + "tags": ["Python", "Hermes", "Open Source"], + "link": "https://github.com/NousResearch/hermes-agent/pull/25358", + "link_label": "查看 PR", + "is_draft": false +} +``` + +--- + +## 前台改造要求 + +### 必改文件 +- `home/templates/index.html` + +### 当前逻辑 +当前逻辑固定为: + +```jinja2 +{% if item.link %} +查看贡献 +{% endif %} +``` + +### 目标逻辑 +改为: + +```jinja2 +{% if item.link %} +{{ item.link_label or '查看贡献' }} +{% endif %} +``` + +### 行为要求 +- 如果配置了 `link_label`,显示自定义文案 +- 如果没配置 `link_label`,回退为 `查看贡献` +- 如果没有 `link`,按钮不显示 + +--- + +## 后台改造要求 + +### 必改文件 +- `home/templates/admin/index.html` + +### 一、调整已有字段标签文案 + +当前开源贡献项建议调整为: + +#### 现有字段标签 +- `项目 / 仓库名称` +- `贡献角色 / 一句话说明` + +#### 调整后建议 +- `贡献摘要 / 主标题` +- `项目 / 仓库名称(可选)` + +### 调整原因 +这样后台文案能和前台真实展示语义一致: +- 第一项是主标题 +- 第二项是副标题/归属信息 + +### 二、新增按钮文案输入项 +在开源贡献编辑项中新增一个输入框: + +- 标签:`按钮文案(可选)` +- placeholder:`例如:查看 PR / 查看仓库 / 查看提交 / 了解详情` +- 字段:`link_label` + +### 建议位置 +建议放在: +- `外部链接(link)` 输入框下方 + +因为这两个字段强相关。 + +### JS 要求 +需要同步更新: +- `renderOpenSource()` +- `addOpenSource()` +- `updateOpenSource()` +- `collectFormData()` + +其中新增默认结构建议: + +```js +{ + title: '', + role: '', + date: '', + bullets: [], + tags: [], + link: '', + link_label: '', + is_draft: true +} +``` + +--- + +## 服务层兼容要求 + +### 必改文件 +- `home/src/services/content.py` + +### 要求 +这次**不需要复杂迁移逻辑**,因为: +- `link_label` 是可选字段 +- 前台模板有默认回退 `查看贡献` + +因此服务层只需要保证: +- 旧数据没有 `link_label` 时仍可正常使用 + +### 可选做法 +如果你希望数据结构更整齐,可以在 normalize 时为 `open_source` 每条记录补: + +```python +item.setdefault("link_label", "") +``` + +但这不是强制项。 + +--- + +## 数据调整要求 + +### 对现有开源贡献数据的建议 +当前已发布的数据建议同步调整填写语义: + +- 把当前用于“仓库名”的内容,放到 `role` +- 把当前用于“一句话贡献说明”的内容,放到 `title` + +### 注意 +这不是 schema breaking change,属于内容重排。 + +--- + +## 测试要求 + +### 必改文件 +- `home/tests/test_admin_permissions.py` + 或对应 Home 测试文件 + +### 至少补 3 类测试 + +#### 1. 后台编辑页出现新输入项 +验证: +- 开源贡献编辑区出现 `link_label` 对应输入项 +- 页面中能找到“按钮文案”相关标签或字段 + +#### 2. 前台使用自定义按钮文案 +当 `open_source` 条目包含: + +```json +"link": "https://...", +"link_label": "查看 PR" +``` + +应验证首页显示: +- `查看 PR` +- 不再只是固定 `查看贡献` + +#### 3. 未配置按钮文案时回退默认值 +当 `link` 存在但 `link_label` 缺失或为空时:首页仍显示: +- `查看贡献` + +### 可选补充 +如果有对后台字段标签文案的 UI 测试,可以同步验证: +- “贡献摘要 / 主标题” +- “项目 / 仓库名称(可选)” + +--- + +## 验收标准 + +### 前台 +1. 开源贡献卡片仍正常显示 +2. 按钮文案支持按条目自定义 +3. 未配置自定义文案时,回退 `查看贡献` +4. 不影响无 link 条目隐藏按钮的逻辑 + +### 后台 +1. 开源贡献编辑区新增“按钮文案(可选)”输入项 +2. 开源贡献前两项字段文案已调整为更符合主次语义的表述 +3. 保存草稿、发布、回显正常 + +### 内容层面 +1. 开源贡献卡片主标题优先展示“贡献摘要” +2. 副标题展示“项目 / 仓库名称”或归属信息 + +### 兼容性 +1. 旧数据没有 `link_label` 时页面不报错 +2. 历史卡片仍可正常显示 + +--- + +## 非目标 + +本次 follow-up 不包含: +- 新增按钮样式类型(primary / secondary / ghost) +- 为不同链接自动推断文案 +- 改造开源贡献卡片整体视觉样式 +- 重新设计 open_source schema 的其他字段 +- 批量自动迁移历史开源贡献数据 + +--- + +## 实施顺序建议 + +1. 先改后台编辑文案与 `link_label` 输入项 +2. 更新前台模板按钮回退逻辑 +3. 如有需要,再更新当前线上那条开源贡献内容的数据语义 +4. 最后补测试 + +--- + +## 结论 + +这是一个很小但值得做的 follow-up。 + +它不改变“开源贡献”板块的整体架构,只做两件事: +- 让卡片第一眼先表达“贡献成果” +- 让按钮文案可后台配置,不再被固定为 `查看贡献` + +这样可以明显提升首页阅读体验,同时保持改动面最小。 \ No newline at end of file