--- name: industrial-archive description: Generate a single-file industrial-archive product landing page (Nordic museum aesthetic, hash-routed detail pages). Takes a natural-language description of one or more "exhibit-style" products (objects, tools, hardware, watches, kitchenware, lighting, audio, instruments, anything with a designed/forged/restrained quality); outputs ONE working .html file. Visitors see a black-framed cover that flips between exhibits, sidebar index, side meta column (material/origin/year/dimension), and click any exhibit → full detail page (giant italic title, spec table, hero image, lead + 3 prose paragraphs, gallery, prev/next). Runs in BOTH Claude Code (writes to ~/Desktop) and GLM / online chat (outputs HTML inline). Trigger: "做个工业风产品落地页", "做克制之物风格的展品页", "industrial-archive-gen ...", or when user drags this skill folder into chat asking for a product page in the Nordic-industrial archive style. visibility: public mode: template carrier: web-page scenario: brand-landing pattern_source: reference.html source_priority: skill-first triggers: - "做个工业风产品落地页" - "做克制之物风格的展品页" - "北欧博物馆藏品风" - "industrial archive" - "策展感产品页" related_patterns: portfolio-detail legacy_gen: true --- # industrial-archive — 工业风展品 / 产品落地页生成器 把"一段自然语言描述"变成一份单文件 HTML,效果是**北欧工业典藏 / 博物馆策展感**的产品落地页: - 黑色画框中的产品大图,左右点击翻转切换 - 左侧带索引指示条的展品目录 - 右侧 4 个 meta 块(材料 / 产地 / 年代 / 尺寸) - 顶栏跑马灯 - 点击画框或底部 CTA → 进入展品详情页(巨大斜体标题、规格表、主图、开篇大字 + 3 段散文、6 图画廊、上一件/下一件) - 进入页有引言 splash ## 何时触发 用户说"做个工业风的产品落地页 / 克制之物风格的展品 / industrial-archive-gen ...",并提供: - **产品描述**(必需):一段散文,描述 1—N 件展品的名字、年代、产地、材料、来历 - **图片 URL**(可选):每件展品至少 1 张主图、最好 3—6 张细节图。没有也能跑(用 picsum 占位灰图) - **风格**(可选):默认是冷调钢蓝灰,可换成 styles.md 里的预设 如果用户**完全没给展品名/故事** → 必须问一次至少有哪几件展品要展示,以及大致是什么品类(容器 / 灯具 / 椅具 / 仪器 / 工具 / ...)。 如果用户**只给了名字**没给故事 → 自己编:每件展品都生成 1 句 lead + 3 段 prose + 4-6 行 spec。语气参考 `reference.html`:**博物馆 wall-text** 感 — 克制、具体、缓慢,不要 marketing 语言。 ## 两种运行模式 ### 模式 A · Claude Code / 本地(有文件系统) - 输出:`~/Desktop/{slug}-archive.html`(**单文件**,所有图走 URL) - 如果用户给了本地图,建议告知用户改用 URL 或自己拷到同目录后写相对路径 ### 模式 B · GLM / 在线对话(无文件系统) - **直接给一份完整 HTML 字符串**,包在 ` ```html ` 代码块里 - 用户没给图 URL → 全用 `https://picsum.photos/seed/{slug}-{nn}/{w}/{h}?grayscale` 占位 - 不要尝试访问本地文件 判断:如果你**无法 Read 看到本地图片** → 默认走 B。 ## 文件分工 | 文件 | 角色 | 怎么用 | |---|---|---| | `reference.html` | **完整成品参考** — "克制之物" 4 件北欧工业藏品 | 看:lead 怎么写、prose 语气、spec 用词、tagline 格式、maker 命名 | | `template.html` | **空骨架** — 同样的 CSS/JS/路由,2 件示例 + 17 个 SWAP 标记 | 在它的基础上改,输出最终 HTML | | `styles.md` | 风格预设库 | 用户指定风格时查这份 | | `README.md` | 用户视角的使用说明 | 模型不用看 | | `SKILL.md` | 给模型看的工作流(本文件) | **必读** | **核心规则**:所有改动基于 `template.html`;从 `reference.html` 学**怎么写**(语气、字数、词汇),但不要复制具体内容。 ## 关键差别 — reference 用 SVG,template 用 `` - `reference.html` 的 4 件展品是**手绘 SVG**(铸铁壶 / 轴承灯 / 桦木椅 / 测距仪),那是定制内容 - `template.html` 已经把 SVG 系统替换成 ``,用户给 URL 就用 URL,没给就用 picsum - 你不需要写 SVG。如果用户特别要求"画出来",再考虑写一个 SVG 函数塞进 `coverHTML()` ## 工作步骤 ### 1. 读两份 HTML - 先读 `reference.html` 体会"完整后长什么样",特别是 `exhibits-data` JSON 的字段密度和 prose 语气(克制、具体、有时代背景) - 再读 `template.html` 找 17 个 SWAP 标记(搜 `SWAP-`) **不要改 JS / 不要改 CSS / 不要改详情页路由系统**。 SWAP 都在 HTML 文本和 JSON 数据里。 ### 2. 解析用户输入抽信息 #### 全站层级(17 个 SWAP 中的 1-15、17) - **COLLECTION_TITLE / COLLECTION_SUB** — 系列大标题 + 副标。如"克制之物 / 北欧工业典藏 1948—1988"。SWAP-1 - **INTRO_VOLUME_TAG** — 进入页顶部的 tag,如"北欧工业典藏 · Vol.01"。SWAP-2 - **INTRO_TITLE_HTML** — splash 页大标题,2-4 字 + 中间一个 `·` 分隔符。如 `克制·之物`。SWAP-3 - **INTRO_TITLE_EN** — splash 页英文副标,全大写 + em-dash,如 `Restrained Objects — A Nordic Industrial Archive 1948 — 1988`。SWAP-4 - **INTRO_QUOTE** — 一句策展引言,60—100 字,散文感。SWAP-5 - **INTRO_ATTRIBUTION** — 引言出处,如`— 策展前言 / Curatorial Note`。SWAP-6 - **HEAD_GLYPH** — 左上 logo 字符。1-2 个 serif 字符,建议带特殊感的字母如 `Æ` `Ø` `沉` `匠` `ʘ`。SWAP-7 - **HEAD_GLYPH_SUB** — logo 下一行说明,如`克制之物 / 编号 N°01—04`。SWAP-8 - **HEAD_CENTER_CN / HEAD_CENTER_EN** — 顶部中央两行小字。SWAP-9, 10 - **HEAD_RIGHT_TOP / HEAD_RIGHT_BOTTOM** — 顶右两行:日期/城市 + 坐标/编号。SWAP-11, 12 - **CURATOR_NAME / CURATOR_EMAIL** — 策展方名称 + 邮箱。SWAP-13, 14 - **CRUMB_ROOT / CRUMB_VOLUME** — 详情页面包屑两个固定项。SWAP-15 - **TICKER_TAIL** — 跑马灯尾巴的总标语。SWAP-17 #### 每件展品的字段(SWAP-16,最关键) ```json { "slug": "iron-kettle", "num": "N°01", "title": "铸铁壶", "en": "IRON KETTLE", "year": "1958", "place": "丹麦 · 哥本哈根", "maker": "Carl Hansen Værksted / 卡尔·汉森工坊", "material": "灰口铸铁 · 山毛榉木柄
黑釉烧结涂层", "origin": "丹麦 · 哥本哈根
Carl Hansen Værksted", "dim": "高 18 cm · 容 1.2 L
底径 14 cm", "tagline": "FORGED ESSENTIAL / 锻造的必需品", "lead": "一只为沉默与水的低温而设计的容器——壶身的厚度,是为了让热停留得久一点,而不是更快地变热。", "spec": [ ["编号", "1958 · K-04"], ["材料", "灰口铸铁 + 山毛榉"], ["工艺", "砂模铸造 / 黑釉烧结"], ["重量", "1.86 kg"], ["产量", "限量 240 件 · 现存 31"] ], "prose": [ "段一 80—160 字。来源/语境/年份/工坊背景。", "段二 80—160 字。工艺/手工细节/关键决定。", "段三 80—160 字。今天的状态/影响/仍在用的事实。" ], "cover": "https://example.com/kettle-cover.jpg 或 picsum URL", "gallery": [ {"src": "...", "layout": "f-3", "caption": "壶身正立面"}, {"src": "...", "layout": "f-2", "caption": "山毛榉木柄"}, {"src": "...", "layout": "f-2", "caption": "壶嘴细部"}, {"src": "...", "layout": "f-2", "caption": "底部砂模印"}, {"src": "...", "layout": "f-4", "caption": "工坊蓝图"}, {"src": "...", "layout": "f-6", "caption": "陈列剖面"} ] } ``` ### 3. 替换 SWAP 把 `template.html` 里 17 个 `{{...}}` 占位符全部换成你抽出来的内容。 **注意**:`{{INTRO_TITLE_HTML}}` 是 HTML 不是纯文本,里面要带 `·`。 ### 4. 写 exhibits-data JSON(最关键的一步) 把 `