Back to skills
SKILL.md
Xin Ideas
ASecurity灵感收集与多维度体检 + 可落地拆解工具。当用户抛出新想法/灵感、希望先记录并评估(而非立即实现)时使用:对想法做十维评价(解决的问题/目标用户/实用性/市场价值/竞品分析/变现可能/技术方案/可扩展性/实现计划/实现可行性)并 1-10 打分。其中「解决的问题」须明确是真实痛点还是想象问题;「市场价值」须论述市场运营与推广的可行性、难度与代价;「实现可行性」要求客观列出落地所需的技术能力与配套资源(硬件/数据/资质/渠道/人力),并明确成本与代价依据;同时给出好处/坏处、可能遇到的问题与应对、分阶段落地路线图、要避免的坑、成功失败判据与成本投入,生成精美 HTML 详情页(.xin-ideas/ideas/idea_<时间戳>.html)与卡片列表页(.xin-ideas/index.html,支持搜索、排序、点击跳转)。**默认对每个灵感都做完整十维打分**,不做区分;只有用户明确说「不要打分」「先记着」「只记一下」时才走轻量记录(不打分)。触发词与场景:「收集灵感」「记个想法」「灵感库」「xin-ideas」「记一笔」「做个灵感评估」「把想法存一下」「给这个想法打个分」。本...
- 2 stars
- 0 votes
- 0 copies
- 0 views
- Added September 23, 2026
Security analysis
100/100Pro scans all 9 files and shows the line behind each finding
npx -y skills add oscar-wang-xin/xin-ideas --skill xin-ideas --agent claude-codeAre you the author of Xin Ideas?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/oscar-wang-xin-xin-ideas)---
name: xin-ideas
description: 灵感收集与多维度体检 + 可落地拆解工具。当用户抛出新想法/灵感、希望先记录并评估(而非立即实现)时使用:对想法做十维评价(解决的问题/目标用户/实用性/市场价值/竞品分析/变现可能/技术方案/可扩展性/实现计划/实现可行性)并 1-10 打分。其中「解决的问题」须明确是真实痛点还是想象问题;「市场价值」须论述市场运营与推广的可行性、难度与代价;「实现可行性」要求客观列出落地所需的技术能力与配套资源(硬件/数据/资质/渠道/人力),并明确成本与代价依据;同时给出好处/坏处、可能遇到的问题与应对、分阶段落地路线图、要避免的坑、成功失败判据与成本投入,生成精美 HTML 详情页(.xin-ideas/ideas/idea_<时间戳>.html)与卡片列表页(.xin-ideas/index.html,支持搜索、排序、点击跳转)。**默认对每个灵感都做完整十维打分**,不做区分;只有用户明确说「不要打分」「先记着」「只记一下」时才走轻量记录(不打分)。触发词与场景:「收集灵感」「记个想法」「灵感库」「xin-ideas」「记一笔」「做个灵感评估」「把想法存一下」「给这个想法打个分」。本 skill 只做评估与归档,不实现想法。
---
# xin-ideas · 灵感体检与可落地拆解
把想法抛进来,先体检、后动手。**每个灵感默认都产出一份「十维评分(含「实现可行性」「目标用户」,要求客观列出落地所需技术能力与配套资源,并区分真实痛点与想象问题、论述市场推广可行性)+ 可落地拆解」的精美 HTML 详情页**——不区分、不先问、不当场省流程;并在卡片列表页形成可检索、可排序、可跳转的卡片墙。只有你明确说「不要打分」时,才只记一张「未评分」的轻量卡。
**核心原则:拆解必须具体、可落地、能量化。禁止只写方向、概念、大词。** 每一条都要能回答「具体做什么、拿什么衡量、花多少」。
## 存储结构(统一 .xin-ideas 目录,可整体备份/迁移)
所有产物都收在**一个 `.xin-ideas` 目录**里——列表页与明细页全在里面,将来整目录拷走即可备份/迁移:
```
<baseDir>/
.xin-ideas/
index.html ← 卡片列表页(唯一入口,所有灵感卡片都在这)
ideas/
idea_<时间戳>.html ← 每个灵感一个明细页
```
- `<baseDir>` 是**承载 `.xin-ideas` 的根目录**,记录在 **skill 根目录的 `config.json`**:`{ "baseDir": "<绝对路径>" }`。
- 时间戳格式:`YYYYMMDD_HHMMSS`(用 `date +%Y%m%d_%H%M%S` 取本地时间)。
- 明细页的 `file` 字段是**相对 `index.html` 的路径**,即 `ideas/idea_<时间戳>.html`(不再是 `.xin-ideas/idea_...`)。
- 明细页顶部「← 返回灵感库」链接指向 `../index.html`(模板已内置,无需改)。
- 当前 baseDir:见 `config.json`;`baseDir` 为空时按下面「首次使用」流程询问用户。
## 防覆盖与容错(铁律 · 2026-09-14 定)
**永远不要清空、重建、覆盖一个已经存在的灵感墙。原有灵感一条都不能丢。** 写入一律走「增量」路径,由 `scripts/upsert-idea.js` 兜底;严禁用「复制模板覆盖 index.html」这种省事做法。
三条硬规则:
1. **明细页不覆盖**:`ideas/idea_<时间戳>.html` 已存在时**拒绝写入**,改用一个新的时间戳;确需覆盖才加 `--force`,且脚本会先把旧文件备份成 `<文件>.bak`。绝不静默冲掉别人的灵感。
- **若要「更新已有卡片」(原卡内容保留、只做增补)**:必须显式传 `--ts <该卡片文件名里的完整时间戳>` 并加 `--force`,否则**会新建一张重复卡而不是覆盖原卡**。陷阱在于 `normTs()` 只精确到分钟——`IDEA.ts = "2026-09-13 17:58"` 会被归一化成 `20260913_175800`,而实际文件名可能是 `idea_20260913_175854.html`(带秒),两者对不上。**正确做法:先 `ls ideas/` 拿到真实文件名,把 `idea_` 与 `.html` 之间的整串原样传给 `--ts`。**
- 更新前先把原 IDEA 完整导出(`eval('('+匹配到的对象+')')` 覆盖回写会丢字段),只增补、逐字段保留原有内容;更新后核对 `index.html` 的条数**没有增加**(增加即说明误建了重复卡,应删掉新文件并从 `.bak` 恢复)。
2. **索引增量合并**:`index.html` 已存在且结构一致 → 只往 `IDEAS` 数组**追加/更新**条目,原有条目的顺序与内容保持不动(老卡片位置不变)。
3. **结构不一致 → 备份后重建**:`index.html` 存在但**不是当前模板结构**(缺 `a.c-link`,或 `IDEAS` 数组解析不出来)→ 先把原文件备份为 **`index.html.bak`**;若 `.bak` 已存在,改用 `index.html.bak.<时间戳>`,**绝不覆盖已有备份**。然后用当前模板重建索引,把旧索引能解析到的条目 **+ `ideas/` 目录下所有明细页里的灵感**全部恢复进新索引。
**为什么能保证不丢**:**明细页是权威数据源**。每个灵感的完整数据都存在自己的 `ideas/idea_<时间戳>.html` 里,`index.html` 只是它的投影。所以哪怕索引被写坏、被清空、格式不认识,也能从 `ideas/` 目录逐条扫描重建出来;索引里漏掉的明细页会被**自动补回**(回归测试第 7 项就断言了这条)。
- `index.html.bak` 是保险绳,**不要删**、不要当成正式文件。
- 每次写完后如果 `IDEAS` 条数比写入前**少**,就是丢了内容 —— 立即停下、回退,不要继续。
### 写入工具:scripts/upsert-idea.js
```bash
node scripts/upsert-idea.js --base "<baseDir>" --detail <idea.json> [--ts YYYYMMDD_HHMMSS]
node scripts/upsert-idea.js --base "<baseDir>" --entry <entry.json>
node scripts/upsert-idea.js --base "<baseDir>" --rebuild # 扫描 ideas/ 重建索引(不新增内容)
node scripts/upsert-idea.js --base "<baseDir>" --sync-pages # 存量明细页对齐到当前 detail.html 模板
node scripts/upsert-idea.js --base "<baseDir>" --status # 快速体检:列出 404 条目与孤儿明细页
node scripts/health-check.js [--baseline] # 完整体检(只读):结构 + 原话同步 + 字段 + 基线增量
# 通用参数:--dry-run 预览不落盘 / --force 允许覆盖明细页(覆盖前自动备份)
```
- `--base` 省略时读 `config.json` 的 `baseDir`;两处都没有则退出码 2 并打印 `NEED_BASE_DIR` → 按下面「首次使用」流程询问用户。
- **推荐做法**:把完整 IDEA 对象写成临时 JSON,用 `--detail` 一次完成「生成明细页 + 合并索引」。脚本用 `JSON.stringify` 落盘,天然把字符串里的换行转义成 `\n`,**不会再写出裸换行导致 JS 语法错误**(历史上踩过这个坑)。
- 退出码非 0 就是没写成,别当作成功继续往下走。
- **改了 `assets/templates/detail.html` 之后,别忘了同步存量明细页**:跑 `--sync-pages`,它会用「当前模板外壳 + 本页原有 IDEA 数据」重建每个明细页,IDEA 数据逐字保留,改动前先备份为 `.bak`,已是最新的自动跳过(幂等)。索引页侧的模板改动则由 `--rebuild` 负责(同样先备份 `index.html.bak`)。
### 首次使用:位置未指定时必须弹窗询问
每次执行**先读 `config.json`**,按下面分支处理:
1. 若 `config.json` 存在且 `baseDir` 非空 → 直接用 `<baseDir>/.xin-ideas/`,**不再询问**。
2. **若 `config.json` 不存在,或 `baseDir` 为空(= 首次使用、位置未指定)→ 必须弹出提示询问用户把 `.xin-ideas` 建在哪**:
- **提示的默认选项 = 「本 skill 安装所在目录」**(选它则灵感墙落在 `<skill 安装目录>/.xin-ideas/`)。
- 用户也可填入任意其它目录(如某个工作区)。
- 拿到答案后:创建 `<baseDir>/.xin-ideas/` 与 `<baseDir>/.xin-ideas/ideas/`,并把 `baseDir` 写回 `config.json`,下次不再问。
- 用选项式询问(AskUserQuestion 或等价的确认提示),把「skill 安装目录」作为第一个(推荐)选项。
## 文件规范
- 所有产出统一 **UTF-8 + LF 换行**。宿主机是 Windows 时,写文件务必带 `newline=''`(或显式 `newline='\n'`)——Python 文本模式默认会把 `\n` 转成 CRLF,模板是 LF、产物是 CRLF,同一条链上就不一致了。
- 工作区根目录与 skill 目录各带一份 `.gitattributes`(`* text=auto eol=lf` + 二进制标记),作为 git 纳管时的兜底;新增二进制产物类型时记得往里补一行。
- 改动 `assets/templates/` 下的模板后,先跑 `node scripts/smoke-test.js` 回归:它在最小 DOM 桩上验证「字段缺失/类型不对时不崩、页面不出现 undefined」。退出码非 0 就回退,别把坏模板发出去。
- 改动 `scripts/upsert-idea.js`(写入合并器)后,跑 `node scripts/test-upsert.js` 回归:验证「不覆盖、不丢内容」——含结构不一致时的备份重建、`.bak` 不被覆盖、明细页拒绝覆盖、孤儿明细页补回、`--sync-pages` / `--sync-index` 同步后数据逐字不变等 34 项断言。两套测试都绿再交。
- **日常巡检用 `node scripts/health-check.js --baseline`(只读脚本,绝不改动任何文件)**:核对 ①明细页与索引条数 1:1 ②id 与标题互相对得上 ③无失效引用 / 孤儿 ④原话 `origin` 两侧同步 ⑤字段完整性;带 `--baseline` 时再对比工作区根目录的基线快照 `_baseline.json`,报出新增、消失、老页面被动过的条目。**注意别拿「索引 score」(录入时独立存的展示分,1 位小数)和「明细页十维均分」(原始分)硬比——差 0.05 内属正常取整,历史上据此误判过一轮。** 硬错误只看前三项。发现「索引有原话、明细页缺 origin」这类不同步时,把索引里的原话补回明细页 IDEA 即可(纯新增一行,先备份、后校验原字段逐字未变)。
## 工作流
**写入模式(2026-09-14 定)——默认全评,例外才轻量:**
| 模式 | 何时用 | 产出 |
|------|--------|------|
| **完整体检(默认)** | 只要用户没明说不要打分,一律走这条 | 十维评分(原八维 + 实现可行性 + 目标用户)+ `details` + `feasibility` 可行性专项评估 + 好处/代价 + 路线图 + 判据 + 成本;明细页出雷达图与评分卡 |
| **轻量记录(例外)** | 用户明确说「不要打分 / 先记着 / 只记一下 / 别评了」 | 只填 `title`/`ts`/`tags`/`summary`/`origin`;`scores` 留空(`{}`),其余拆解字段全部留空。明细页自动隐藏雷达图与评分卡、改为「未评分」说明;列表页该卡显示灰色「未评」徽标,不参与分数排序与统计 |
判定口诀:**「没说不要 = 要打分」**。拿不准时就按默认(打分)执行,**不要反问用户"要不要打分"**——那是把选择成本推回给他。真想省事他会自己说。
### 0. 先查重(撞车检查 · 必做,2026-09-14 定)
落新卡之前,**先读一遍墙上现有卡片的标题与摘要**(一条命令即可):
```bash
node -e "const fs=require('fs');const s=fs.readFileSync('<baseDir>/.xin-ideas/index.html','utf8');const m=s.match(/const IDEAS = (\[[\s\S]*?\n\]);/);eval('('+m[1]+')').forEach((e,i)=>console.log((i+1)+'. ['+e.id+'] '+e.score+' '+e.title+' —— '+e.summary));"
```
判断三档:
| 情况 | 处理 |
|------|------|
| **无关** | 走正常流程,新建卡 |
| **部分重叠(<50%)** | 新建卡,但在 `summary`/`details` 里点明与哪张卡相关、分工是什么 |
| **高度重合(≥50%)** | **不新建重复卡**,改为「更新已有卡」:把新增量并进去(原内容逐字保留)、必要时重评分,并**如实告知用户"这条你 X 月 X 日记过,这是同一件事的新说法,我把增量并进去了"** |
要点:**不要把用户的重复灵感和稀泥糊过去,也不要默默多挂一张卡**——墙上出现两张近似的卡,用户会怪你没查重。查出来就直接说,并给出「合并 / 分拆」的选项(默认合并)。
### 1. 接收想法
从用户消息中提取灵感核心(一句话能讲清它在解决什么)。**同时一字不差地捕获用户抛出的「构思原话」(origin)**——这是用户原话,写入 `IDEA.origin` 与 `IDEAS[].origin`,用于详情页展示、列表页悬停提示,也是下次回看时还原当时思路的锚点;若用户未给原话则留空(留空则对应板块/提示自动隐藏)。
信息不足时先复述要点并合理假设,**竞品与市场务必联网核实**(遵循「批量并行联网查、撞车即弃」原则),不凭记忆硬写。
### 2. 十维评分(默认执行 · 1-10 整数,每维附一段评价)
> 仅当用户明确说「不要打分」时才跳过本节,走「轻量记录」(`scores` 留空)。
综合评分 = 十维均值(保留一位小数)。**历史条目只有 8 或 9 维也正常**,页面自动识别、不会报「维度数异常」;新灵感一律评满 10 维。
| 维度 | 评估要点 |
|------|----------|
| 解决的问题 | 痛点是否真实、紧迫、被广泛感知;必须区分「真实痛点(用户痛到愿意付费/改变)」还是「想象的问题(自嗨、没人 Care)」,后者不给高分 |
| 实用性 | 在日常/工作场景中可被使用的程度与频率 |
| 市场价值 | 目标人群规模、付费意愿、市场阶段;并论述市场运营与推广可行性——触达渠道、冷启动/获客难度、推广代价(是否需销售体系/地推/买量、获客成本量级)、能否自传播 |
| 目标用户 | 是否清晰定义了使用/付费对象:角色、场景、规模、付费能力与决策权。画像模糊或目标用户根本不会买单,给低分 |
| 竞品分析 | 已有玩家、其短板、本想法的差异化与壁垒(空白/强壁垒给高分) |
| 变现可能 | 变现路径清晰度与可行性(订阅/一次性/渠道替卖等) |
| 技术方案 | 实现思路与关键技术选型的可行性 |
| 可扩展性 | 未来可延展的方向、复用与组合空间 |
| 实现计划 | 能否拆成 MVP→加载背书→放大 的分阶段步骤 |
| **实现可行性** | **客观评判要落地需要什么样的技术能力与配套资源(硬件/数据/资质/渠道/人力),门槛高不高、合理代价内能否做出来。这是 §2.5 结构化评估的基础,也直接决定 §3 的 `cost` 数字** |
评级:≥8.5 S / ≥7.5 A / ≥6.5 B / ≥5.5 C / 其余 D。
### 2.5 实现可行性专项评估(完整体检必填 · 结构化,2026-09-15 新增)
第 9 维「实现可行性」不能只给一个分,必须落到**客观清单**上——这也是衡量成本、实现费用与代价的重要依据。在 `IDEA.feasibility` 对象里填四项:
- **tech(所需技术能力)**:逐条列实现要会/要自研/要外采的技能栈与工具(如 Python 后端、容器化、MiniPC 硬件选型、LIMS 集成、ACMG 变异分类、OCR 模型微调)。能分清「已有 / 需学 / 需外采」最好。
- **resources(配套资源)**:硬件库存、数据集、资质证照(软著 / 医疗器械备案)、渠道、人力预算等。把「没有就做不了」的硬资源单列出来。
- **verdict(可行性结论)**:一句话——`当前可直接做` / `需先补齐某项资源` / `暂不具备条件`。
- **cost_basis(成本与代价依据)**:把上面的「能力 + 资源」折算成费用 / 人日 / 周期的逻辑(如「硬件 0.5–2 万 + 自研 15 人日 + 现成数据 ¥0 额外」)。**这一条就是 §3 `cost` 字段里精力/时间/金钱数字的来历,两者必须能互相印证,不能各写各的。**
> 写不出 tech/resources 的灵感,其「实现可行性」分数不应给高——可行性评估本身就是逼自己把「想做」和「能做」分开。
### 3. 可落地拆解(必填,全部产出)
逐项填写,标准是「照着这份拆解,另一人也能开工」:
- **pros 好处**:具体收益,尽量算账(省下多少时间/多少钱、减少多少返工、带来什么可度量的价值)。避免「提升效率」这类空话。
- **cons 坏处与代价**:真实成本与副作用(时间、金钱、精力、机会成本、维护负担、可能的负面后果),要敢说难处。
- **risks 可能遇到的问题**:每条是 `{问题, 应对}`。问题要具体到场景(如「微信对公众号正文有反爬验证」),应对要可执行(如「用 X 方案绕过 / 退而求其次抓备用源」)。
- **roadmap 落地路线图**:分阶段(如 第0步·验证 → 第1步·MVP → 第2步·自用跑通 → 第3步·加载背书/放大)。每阶段给出 `目标 goal`、`可执行动作 steps[]`、`完成标志 done`。动作要是能直接动手做的事。
- **avoid 要避免的坑**:最容易犯且代价高的错误,一条条列清(如「别一上来就追求通用,先垂直自用」)。
- **metrics 成功/失败判据**:`{指标, 成功线, 止损线}`。必须是可在过程中随时评判的量化标准(数字、时间点、完成度),让「该继续还是该停」一眼可判。
- **cost 成本投入**:`{effort:{v,n}, time:{v,n}, money:{v,n}, other}` —— 精力(人日)、时间(周期)、金钱(量级/预算)、其它代价(机会成本等)。**这些数字必须能从 §2.5 的 `feasibility.cost_basis` 里找到依据**,两者互相印证,不能各写各的。
- **prompts 参考提示词**:`[{label:"用途", text:"可直接复制的优化提示词"}]` —— 一组「想把这个 idea 更好地落地时,可以直接喂给 AI 用」的提示词:每条一个用途标签 + 一段可直接复制使用的完整提示词(含占位符,用户替换成自己的真实情况即可)。明细页会在**最后**渲染成「参考提示词」栏,每条带「复制」按钮;留空则整块隐藏。建议每条灵感补 3-4 条(如:需求拆解 / 竞品调研 / 技术选型 / 低成本验证)。
### 4. 生成明细页(增量写入:先查是否已存在)
**首选走合并器**——把完整 IDEA 对象写入临时 JSON,一次完成「生成明细页 + 合并索引」:
```bash
node scripts/upsert-idea.js --base "<baseDir>" --detail "<baseDir>/_tmp_idea.json" --ts <时间戳>
```
目标文件已存在时它会**拒绝覆盖**并退出码非 0(换个时间戳或显式 `--force`);用完删掉临时 JSON。
**脚本不可用时手工生成**(务必守住「不覆盖」):
1. 确认 `<baseDir>/.xin-ideas/ideas` 目录(不存在先建);**若 `idea_<时间戳>.html` 已存在,换一个时间戳,不要覆盖**。
2. 复制 `assets/templates/detail.html` 到该路径,只改文件末尾 `<script>` 里的 `IDEA` 对象字段(结构见模板顶部注释):
- `title` / `ts` / `tags`(数组,如 `["工具","AI","内容线"]`)/ `summary`(一句话结论)
- `origin`(可选):用户抛出灵感时的原话,如「我有个想法,做一个可以把灵感记录成卡片墙的页面,同时给每个灵感打分」。详情页以「你的构思原话」引用卡呈现,列表页悬停/点击展示;留空则不显示。
- `scores`:十维分数(**默认必填**——每个灵感都评满 10 维,含第 9 维「实现可行性」与第 10 维「目标用户」;仅当用户明确说「不要打分」时才留空 `{}`;历史 8 维条目也正常,页面会自动识别);`details`:各维度评价正文(与 `scores` 维度一一对应,多段用空行 `\n\n` 分隔)
- `feasibility`:实现可行性专项评估对象 `{tech:[], resources:[], verdict:"…", cost_basis:"…"}`(§2.5)。完整体检必填。
- `pros` / `cons` / `avoid`:字符串数组
- `risks` / `roadmap` / `metrics`:对象数组(字段见模板注释)
- `cost`:`{effort,time,money,other}`(数字须与 `feasibility.cost_basis` 印证)
- `prompts`(可选):参考提示词数组 `[{label,text}]`,明细页最后渲染成「参考提示词」栏(每条带复制按钮);留空则不显示整栏
3. 不要改动其余 CSS/JS 与渲染逻辑。缺失字段对应板块会自动隐藏。
- 页面标题(`<title>`)由模板脚本自动取自 `IDEA.title`,**无需手工替换**,只需保证 `title` 字段填对。
### 5. 更新卡片列表页(增量,禁止覆盖)
**首选:第 4 步的 `--detail` 已经顺带做完了**(合并器内部会调用索引合并)。
需要单独更新索引时(如批量补录、修正字段):
```bash
node scripts/upsert-idea.js --base "<baseDir>" --entry <entry.json>
```
**必须手工改时(脚本不可用),严格遵守:**
- `index.html` **不存在**才复制 `assets/templates/index.html`(复制后 `IDEAS` 为空,写法示例在注释里 —— **别把示例条目留在正式文件里**,否则卡片会指向不存在的文件)。
- `index.html` **已存在 → 只在尾部 `<script>` 的 `IDEAS` 数组里追加一项,绝不重写整个文件、绝不清空数组**:
```js
{ id:"<时间戳>", title:"...", ts:"YYYY-MM-DD HH:MM", tags:["..."],
score:<综合均分>, summary:"...", origin:"(可选)构思原话", file:"ideas/idea_<时间戳>.html" }
```
- **改前先数一遍现有 `IDEAS` 条数 N**,追加后必须是 N+1。少了就是丢了内容,立即回退重做。
- 若原 `index.html` 不是当前模板结构(无 `a.c-link`)→ **不要硬改**:先备份为 `index.html.bak`,再按新模板重建并从 `ideas/` 恢复旧条目。这一步直接交给合并器最稳:
```bash
node scripts/upsert-idea.js --base "<baseDir>" --rebuild
```
- `score` 即步骤 2 的综合评分;`file` 为**相对 `index.html` 的路径**(同目录下 `ideas/` 子目录,即 `ideas/idea_<时间戳>.html`)。统计数字由页面脚本自动重算。
### 6. 反馈用户
告知:已归档位置、综合评分与评级、一句话结论、以及成本量级与最主要的一条判据;提示在 `.xin-ideas/index.html` 可搜索/排序/点开详情。不要替用户决定要不要做,只给体检 + 拆解报告。
### 7. 生成后自检(必做,别跳)
交付前逐条核对,不符就先修再交:
1. `scores` **维度数为 8、9 或 10**(10 = 原八维 + 实现可行性 + 目标用户;9 = 含实现可行性;8 = 历史条目,正常),且键名与模板一致;**要么整个为空**(= 用户明确要求「不打分」的轻量记录)。页面顶部出现红色「维度数异常」提示条 = 维度数既不是 8 也不是 9,或键名写错;**未评分(`scores` 为空)不该出现该提示条**,也不该显示 0.0 分。
2. 明细页文件名、`ts`、`id` 三者时间戳一致;`index.html` 里 `file` 字段与实际文件名**逐字相同**(写错就是点进去 404),且路径为 `ideas/idea_<时间戳>.html`。
3. 页面里不残留 `undefined`、`{{`、`(灵感标题)` 这类未填充痕迹。
4. `index.html` 的 `IDEAS` 里能找到这一条的 `id`,且没有重复 `id`。
5. **完整体检时**:各段 `details` 都有正文,`pros`/`cons`/`avoid` 非空,`cost` 的 effort/time/money/other 齐全;建议同时补 `prompts`(3-4 条贴合的落地提示词),明细页底部会渲染「参考提示词」栏。**轻量记录(不打分)时**:这些字段应干净地留空(页面自动隐藏对应板块),别留半截数据。
6. 明细页「← 返回灵感库」链接为 `../index.html`(相对 `ideas/` 上跳一级到列表页)。
7. **原有灵感没丢**:写入前后对比 `IDEAS` 条数 —— 追加后 = 原条数 + 1(结构重建时 ≥ 原条数)。索引里原本有的旧条目,写入后必须仍在;条数变少就是丢内容,立即回退。
8. 若发生过结构重建:确认 `index.html.bak` 已生成且非空;若原先已有 `.bak`,确认**没被覆盖**(应出现 `index.html.bak.<时间戳>` 的新备份)。
9. `ideas/` 目录与索引对得上:索引里每条 `file` 都指向真实存在的文件(不 404);目录里若有索引未收录的明细页,写入时应已被自动补回索引。
10. 交互功能没丢:明细页含 `#toTop`(返回顶部浮动按钮,可拖动)与 `#closeCard`(关闭本页);列表页卡片锚点带 `target="_blank" rel="noopener"`。改过模板时用 `node scripts/upsert-idea.js --sync-pages --dry-run` 看一眼存量页面是否落后。
## 内容质量红线(务必遵守)
- 禁止用「提升效率」「赋能」「打造闭环」等空词充当内容;每条结论都要有具体动作、数字或判据支撑。
- 成本与判据必须量化到可感知量级(人日 / 周 / 元 / 百分比 / 时间点),不接受「很快」「不多」。
- 坏处与风险要写真实的难处,不做报喜不报忧的包装。
- 拿不准的市场/竞品信息先联网查,查不到就标注「待核实」,不编造数据。
## 设计基线
详情页与列表页均为**纯静态自包含**(不依赖外部 CDN/字体),浅色现代科技风,内置双主题。**AURORA 蓝紫极光**(默认;主色 `#6C63FF`/`#3ECFCF`,圆角 + 彩色光晕)与 **ROBOT 冷白机甲**(近黑 `#14171E` + 冷蓝灰 `#7A8598` + 白,方角、细线、钢灰阶,无彩色光晕),由右上角「色调」选择器切换、选择存 `localStorage`、跨页面生效;首屏默认色由 `config.json` 的 `theme` 字段决定(当前 `robot`)。明细页含雷达图(内联 SVG+JS 绘制)、分项打分条、构思原话引用卡、好处/坏处对照、问题与应对、时间线路线图、要避的坑、判据表、成本卡。列表页含卡片墙、实时搜索、排序下拉、原话角标(桌面悬停 / 手机点击弹 tip)。
**双主题切换约定(2026-09-15 加,改模板时别弄丢):**
- 所有色值走 CSS 变量(`--primary`/`--secondary`/`--bg`/`--ink`/`--line`/`--shadow`/`--bar1a..4b` 等);切主题只换 `html[data-theme]` 属性,不复制页面逻辑。JS 里也别硬写颜色(评分条用 `var(--bar*)`)。
- 右上角「色调」选择器 `.theme-pick`:点开列两个主题(三色块 + 中文名 + 英文名 + 勾选),点选即应用并落 `localStorage`,明细页与列表页共用、切页保持一致;首屏由 `<head>` 内联脚本先应用(避免闪一下)。
- 改模板配色时:只动 `:root` 与 `html[data-theme="robot"]` 两个变量块,别在组件里写死颜色。
- 默认主题 = `config.json` 的 `theme`(缺省回退到模板内置值);要整体改默认色,改这一个字段即可,不要逐个页面硬改。`upsert-idea.js` 在生成/同步页面时会把模板内置默认色替换为该字段值。
**交互约定(2026-09-14 加,改模板时别弄丢):**
- **列表页卡片在新标签页打开**:正文锚点写作 `<a class="c-link" href="…" target="_blank" rel="noopener">`,底部提示文案 `查看详情 ↗`。
- **卡片跳转只由正文锚点 `a.c-link` 承载**,标题栏 `.c-top`(标题 + 评分 + 「原话」角标)在 `<a>` 之外 —— 点标题栏或原话角标结构上就不可能跳转;别把角标挪回锚点内。
- **明细页底部有操作区** `.foot-nav`:`← 返回灵感库` + `✕ 关闭本页`(`#closeCard`)。关闭先试 `window.close()`,浏览器不允许脚本关闭标签时兜底 `location.replace('../index.html')`,保证按钮永远有反馈。
- **明细页有「返回顶部」浮动按钮** `#toTop`:滚动超过 360px 才出现;**可拖动**(pointer 事件,`touch-action:none`),拖完把位置存进 `localStorage['xin-ideas-backtop-pos']`,刷新后仍在原处 —— 这样手机上能把它挪开、不遮内容;位移超过 4px 算拖动、否则算点击(点击回顶部)。位置始终被约束在视口内。
- 明细页与列表页都要带 `-webkit-tap-highlight-color:transparent`,去掉移动端点击时的灰色高亮块。
模板已美化并含移动端适配,改动时只动数据对象;改了模板记得跑测试并用 `--sync-pages` 同步存量页面。
## 注意事项
- 本 skill 只评估与记录,不落地实现想法(除非用户另行要求)。
- 分类标签自由,建议与灵感空间既有方向(如 工具/内容/圈层/医疗/AI)保持一致,便于检索。
- `title`/`ts`/`tags`/`score`/`summary`/`origin` 在明细页和 `index.html` 里各存一份。改这些字段时**两处同步改**,否则列表显示与明细内容会对不上。`score` 为 `number` = 已体检评分;为 `null`/缺失 = 未评分(轻量记录),列表页显示灰色「未评」、不参与分数排序与统计。
- 整个灵感墙就是一个 `.xin-ideas` 目录,**备份 / 迁移 / 换机时直接整目录拷贝**,并同步更新 `config.json` 的 `baseDir`。
- **绝对不要用「重新生成一遍」的方式更新灵感墙** —— 那会覆盖掉长期积累的内容。写入永远走增量(见「防覆盖与容错」三条硬规则)。目录里出现 `index.html.bak*` 是保险绳,保留别删。
- 用 `--detail` 时写的临时 JSON(如 `_tmp_idea.json`)在归档完成后删除,别留在 `.xin-ideas` 目录里。
Files in this skill
- .gitattributes
- SKILL.md
- assets/templates/detail.html
- assets/templates/index.html
- config.json
- scripts/health-check.js
- scripts/smoke-test.js
- scripts/test-upsert.js
- scripts/upsert-idea.js
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.