Files
AOS/skills/design/design-templates/ascii-cosmos/SKILL.md
T
Z User e45b68bb8b feat: IMAP mail sync with thread-to-contact matching (PRD §6.1)
Real IMAP connection via imapflow library:
- Connects to IMAP server (IMAPFlow, TLS on port 993)
- Fetches recent messages (configurable limit, default 20)
- Extracts: from, fromEmail, subject, date, snippet (200 chars)
- Thread-to-contact matching (PRD §6.1):
  1. Match sender email against persons table
  2. If no person match, extract domain and match against company.website
  3. Returns matchedCompany + matchedPerson for each email
- Audit-logged (action: crm.mailsync:imap)
- Zod validated (host, port, user, password, folder, limit)
- 502 on IMAP connection failure with detail
- 400 on validation failure

Tested: invalid creds → 502 'IMAP connection failed', missing host → 400
2026-10-27 22:50:50 +00:00

17 KiB
Executable File
Raw Blame History


name: ascii-cosmos description: Generate a single-file product landing page with a layered ASCII cosmos hero (rotating ASCII planet, drifting irregular asteroids, comet trails, nebula gas clouds — each in its own harmonious color) plus full marketing sections (about / features grid / showcase / spec / pricing / CTA / footer). Takes a natural-language description of one product (any kind — a note app, a coffee subscription, a CLI tool, an indie hardware, a hosting service…) and outputs ONE working .html file with deep-space dark or warm-letterpress theme. Runs in BOTH Claude Code (writes to ~/Desktop) and GLM / online chat (outputs HTML inline). Trigger phrases: "做个宇宙风产品落地页", "生成 ASCII 产品官网", "ascii-cosmos-gen ...", "做个独立软件 / 独立硬件落地页", or when user drags this skill folder into chat asking for an atmospheric product landing page. visibility: public mode: template carrier: web-page scenario: marketing-landing pattern_source: reference.html source_priority: skill-first triggers:

  • "做个宇宙风产品落地页"
  • "生成 ASCII 产品官网"
  • "做个独立软件落地页"
  • "做个独立硬件落地页"
  • "ascii 落地页"
  • "ascii hero" legacy_gen: true

ascii-cosmos — ASCII 宇宙调性产品落地页生成器

作品长什么样

单文件 HTML 产品官网,hero 是动态分层 ASCII 宇宙:

  • 星云气体云(紫,柔和散点)
  • 闪烁星点(冷白,带 ★ ✦ 装饰)
  • 旋转 ASCII 行星(青,带 3 圈卫星轨道)
  • 漂浮不规则小行星(琥珀金,6 种带陨石坑的多行 ASCII 形状,自旋 + 缓慢漂移)
  • 彗星拖尾(粉,从屏幕掠过)

下面是常规 marketing 区块:关于 / 核心功能 6 卡片网格 / 界面预览 2 块 / 技术规格 / 订阅方案 3 档 / CTA / 页脚。所有强调字段都有"hover 时打乱-解码"的字符滚动动效(.pt 类)。

适合:独立软件、笔记/写作工具、本地优先 AI、CLI、独立硬件、订阅服务、SaaS、电子书、播客、任何"安静 / 克制 / 有手作味"的产品。

何时触发

用户说:

  • "做个宇宙风产品落地页"
  • "做个 ASCII 风格的产品官网"
  • "生成一个像墨思那样的落地页 — 我的产品是 ..."
  • "ascii-cosmos-gen ..."
  • 把本 skill 文件夹拖进对话框并描述一个产品

提供:

  • 产品名字 + 一句话定位(必需)
  • 核心卖点 / 功能清单(推荐 — 给 6 张卡片用)
  • 定价档位(可选 — 没说就编 3 档:免费 / 专业 / 团队)
  • 风格(可选 — 深空青 / 暖色羊皮纸 / 赛博紫 / 终端绿 …,照抄 styles.md 预设名或自由描述。不写就用默认深空青)

如果用户只给产品名一句话:自己围绕这个产品把 6 个功能、3 档价、技术规格全部脑补出来。语气要克制、有手作味,不要 marketing 鸡血。

两种运行模式

模式 A · Claude Code / 本地(有文件系统)

  • 输出位置:~/Desktop/{slug}.html(单文件,所有图片走 unsplash URL 或用户给的链接)
  • slug 用产品英文名小写连字符
  • 一句话报告:路径 + 用了什么风格 + 多少卡片

模式 B · GLM / 在线对话(无文件系统)

  • 直接把完整 HTML 包在 ```html 代码块里输出
  • 图片全部用 https://images.unsplash.com/photo-XXX?... 或 https://picsum.photos/seed/{slug}-NN/W/H 占位
  • 不要尝试访问本地文件、不要建议命令行操作
  • 末尾一行说明:保存为 .html 双击打开即可

判断:如果你无法 Read 看到本地图片或工作目录不是用户家目录 → 默认走 B。

工作步骤

1. 读模板

读取本 skill 同目录下的 template.html。这是完整骨架,包含:

  • 全部 CSS(深空主题色 + 5 个 ASCII 层 + 卡片 / 价格 / 规格 / hero 网点字 …)
  • 全部 JS(5 层 ASCII 渲染、信息区轨道、字符滚动、标签筛选、平滑滚动、实时时钟)
  • 12 处 <!-- SWAP-N --> 注释标记需要替换的位置

JS / CSS 不要改(除了主题色变量与字体可以按 styles 改)。

2. 读风格预设

看 styles.md:5 种预设。如果用户的风格描述匹配某个名字,照那份的 CSS 变量替换 :root。否则按用户描述自己设计 6 个变量(--bg / --fg / --dim / --accent / --accent2 / --accent3 / --line / --paper)+ 5 个 ASCII 层颜色(#ascii-nebula / -stars / -planet / -asteroids / -comets)。

配色铁律:5 个 ASCII 层颜色必须互相和谐 + 都能在背景上读出来。深色背景 → 高饱和发光色;浅色背景 → 中低明度有重量的色。

3. 解析用户输入抽信息

抽:

  • PRODUCT_EN — 英文 logo 名,全大写 ASCII 字(用于 hero 大字 ASCII title)
  • PRODUCT_CN — 1-2 个中文字(hero 副标题大字,会渲染为网点字)
  • TAGLINE — 一句话副标语(30-50 字)
  • VERSION / TYPE / PLATFORM — 3 个 meta 标签
  • ABOUT_PARAGRAPH — 80-150 字关于段落,3-5 个 <span class="pt"> 强调短语
  • 3 HIGHLIGHT — 3 个 cell(标题 + 一句话描述)
  • 6 FEATURES — 6 张卡片:图片 URL + ASCII overlay(5-6 行小图) + 标题 + 副标题 + 1-2 个标签 + 分类(ai/write/graph/sync 任选或自定义)
  • 2 SHOWCASE — 2 段界面介绍(截图 URL + mini-ascii 装饰 + 标题带 <em> 强调 + 2 段 60-100 字描述)
  • 10 SPEC ROWS — 10 行键值对(版本 / 平台 / 引擎 / 数据格式 / 同步协议 …)
  • 3 PRICING — 3 档(名字 / 价格数字 / 价格单位 / 描述 / 5-6 条特性 / CTA 按钮文案)。中间一档加 featured 类
  • CTA_BIG — 大字号 CTA 文案(带 <em> 强调)+ 副文案 + 3 个按钮 + 6-7 个平台标签

4. 替换 12 处 SWAP

SWAP 位置 内容
1 <title> {PRODUCT_CN}{PRODUCT_EN} — {TAGLINE}
2 header logo + 5 项 nav logo 文字 + 导航锚点(默认:功能 / 界面 / 规格 / 订阅 / 关于)
3 hero ASCII title PRODUCT_EN 的 ANSI Shadow 风 ASCII(用 https://patorjk.com/software/taag 风格,5 行高)
4 hero 中文大字 + tagline + 3 meta PRODUCT_CN + TAGLINE + 3 个 meta span
5 intro 段落 + 3 cells ABOUT_PARAGRAPH(含 <span class="pt"> 强调)+ 3 个 <div class="cell">
6 6 张 features 卡片 每张:data-cat + <img src> + ASCII overlay + 标题 + small + tags
7 4 个 filter tag 分类 chip(all + 你定的 3-4 个分类,匹配卡片的 data-cat)
8 2 块 showcase 每块:截图 + mini-ascii + h3(含 em) + 2 段 p(含 pt 强调)
9 10 行 spec table 每行:<b> 字段名 + <span class="pt"> 值
10 3 档 pricing name / num / desc / ul li / btn
11 info 区 CTA info-big 大字(含 em)+ hero-sub 副文案 + 3 个按钮 + platforms
12 footer 版权 + 一句署名

强制保留(不能动):

  • 全部 <script> 块(5 层 ASCII 渲染 / 信息区轨道 / scramble / 标签筛选 / 平滑滚动 / 时钟)
  • .pt 类的字符滚动机制(要在用户文案里手动撒 <span class="pt" data-text="...">...</span>)
  • 5 个 ascii-layer 的 <pre id="ascii-..."> 节点
  • <pre id="info-ascii"> 节点
  • 6 张卡片的 data-cat 和筛选逻辑
  • featured 价格档的样式

5. 写 ASCII 大字标题(SWAP-3)

用 ANSI Shadow / ANSI Regular 字体的 5 行 ASCII 文字。每个字母用 ╗╔═║║║╝╚═╝ 这种线条字符。例如 INKWEAVE 是:

██╗███╗   ██╗██╗  ██╗██╗    ██╗███████╗ █████╗ ██╗   ██╗███████╗
██║████╗  ██║██║ ██╔╝██║    ██║██╔════╝██╔══██╗██║   ██║██╔════╝
██║██╔██╗ ██║█████╔╝ ██║ █╗ ██║█████╗  ███████║██║   ██║█████╗
██║██║╚██╗██║██╔═██╗ ██║███╗██║██╔══╝  ██╔══██║╚██╗ ██╔╝██╔══╝
██║██║ ╚██╗██║██║  ██╗╚███╔███╔╝███████╗██║  ██║ ╚████╔╝ ███████╗
╚═╝╚═╝  ╚═╝╚═╝╚═╝  ╚═╝ ╚══╝╚══╝ ╚══════╝╚═╝  ╚═╝  ╚═══╝  ╚══════╝

如果产品英文名超过 8 字母 → 缩到 8 字母内的简称(如 INTERSTELLAR → STELLAR),或者用更窄的 ANSI 字体(更细的 ▌▐█)。

如果你不确定字模长什么样 → 至少给个看得过去的 5 行 ASCII,不要留空。

6. 写卡片 ASCII overlay(SWAP-6 内嵌)

每张卡片右下盖一段 4-5 行的小 ASCII 装饰,对应这张卡片的功能。例如:

  • "智能续写" → ╭─────╮ │ ... │ ╰──→──╯
  • "知识图谱" → ●─●─● │\\ │/│ ●─●
  • "搜索" → ┌─────┐ │ ⌕ 找到 │ │ 3 处 │ └─────┘
  • "同步" → ▣ ⇄ ▢ ╲ ╱ ⇅ ╱ ╲ ▤ ⇄ ▥
  • "时间线" → ←─◆─◆─◆─→ ░░▒▒▓▓██

不要超过 5 行,不要超过 14 字符宽。

7. 撒 <span class="pt" data-text="..."> 强调

模板里所有需要"hover 时字符乱码再解码"的强调短语都用:

<span class="pt" data-text="原文">原文</span>
  • intro 段落里撒 3-5 处
  • showcase p 里每段撒 1-2 处
  • spec 每行的值都包一层 <span class="pt">
  • pricing btn 文字也加 pt
  • 标题里的色字用 <span class="em">...</span>(不是 pt)

8. 风格变体(可选)

如果用户指定了风格,照 styles.md 改:

  • :root 8 个变量
  • .hero background 渐变
  • 5 个 #ascii-{layer} 颜色
  • 图片滤镜(深色用 hue-rotate(200deg) brightness(.7),暖色用 sepia(.3) saturate(.85))

没有指定风格时:根据产品的"调性词"自动选色 — 见下面「调性 → 配色映射」。

8.5 替换 ASCII 场景 motif(推荐!)

模板的 hero 默认是宇宙(行星 + 小行星 + 彗星 + 星云)。这个 motif 应该跟着产品调性换 — 一个咖啡订阅不该飘小行星,一个森林漫步 app 不该有彗星。

改法只改一个对象:找到 <script> 里的 // SWAP-13 · ASCII 场景资产 标记,整体替换里面的 SCENE = { ... }。其它 JS 不要动。

SCENE 11 个键各自的角色:

键 默认(宇宙) 角色 / 视觉职责
floaters 6 个不规则小行星 ASCII 形状(多行数组) 屏幕里漂浮 + 自旋的"主物体"
centerShade " .,:;-~+*=%#@█" 中央旋转球体的明暗梯度(暗→亮 14 字符)
diffuseChars "·∙∶⋮⋯░▒" 弥漫底层的"气体云"密度梯度(淡→浓)
sparkRare "★" 稀有大亮点 (4% 概率)
sparkBright "✦" 中频亮点 (15%)
sparkDim ".∙" 普通暗点
streakHead "☄" 飞掠物的"头"(最亮的一格)
streakTailNear/Mid/Far/End "*","∙","·","." 拖尾从近到远 4 段渐隐
centerSats "◉◎○" 围绕中央球体的 3 颗"卫星",由内向外
orbitDots ".∙•" 3 圈轨道线的点字符,由内向外

Motif 库(按产品类型选)

产品类型 floaters 主体 centerShade diffuseChars sparks streakHead/tail centerSats 视觉故事
咖啡 / 茶 / 饮品 咖啡豆 / 茶叶 形状 " .'-=+oO0@#" "·~,'\"" (蒸汽) ★ ✧ . ∙ "☕" 头 + "*∙·." 拖尾 "●◐○" (三种烘焙) 一杯咖啡 + 飘豆 + 蒸汽 + 偶尔一颗豆掉过
森林 / 自然 / 户外 树叶 / 松果 形状 `" .,;:! tT#"` (年轮) "~^,'\"" (雾) "⁂" 萤火 + "·" 露珠 "𓅯" 鸟 + "~~~~" 飞行轨迹 "❀✿✾" (花)
音乐 / 播客 / 音频 音符 / 唱片碎片 " .─=≡▪▫■□" "·∶⋮⁞" (噪点) "♪♫" + "·" "♬" 头 + "~∼≈" 波 "◉◎○" (黑胶圈) 一张唱片 + 飘音符 + 频谱噪点 + 节拍
代码 / CLI / 开发者 {} [] () <> 包裹的小 ASCII 块 " 01[](){}<>#" `"·.,: "` "★ ✦ . _" "_" 光标 + " " (闪现型) "◉⊞⊟" 模块
手作 / 工艺 / 极物 锤 / 刨花 / 钉 / 锈点 " .·°*+x#X@" "·:.," (尘) "✦ ▪ ▫" "→" 头 + "-—" 切线 "◉○⊙" (齿轮) 一个工作台 + 飘刨花 + 木屑 + 偶尔一记
冥想 / 健康 / 慢生活 涟漪 / 圆 / 波浪 形状 " ··∘○●" "~∼≈" (呼吸波) ". ∙ °" "◌" 头 + "·· ··" 散点 "◯◌○" (空圆) 一个呼吸圆 + 涟漪 + 暖色尘埃 + 缓慢
极客硬件 / 电子 芯片 / 电路块 (├┤├ ┐└┘) " .·•◊◆■" "⋅¨" (电气噪) "⚡" 偶现 + "·" "►" 头 + "===" 数据流 "⊙⊚⊛" (LED) PCB + 漂浮电容 + 数据流飞过
写作 / 笔记 / 思考 "…" "——" "§" 标点形状 " .,;:!?¶§" "··¨" ". ∶ ⋮" "✒" 头 + "~~~" 笔迹 "◉◯●" (墨点) 一支笔 + 飘标点 + 笔迹划过 + 思绪点
意式 / 复古 / 80s 像素方块 / 撞色几何 " .░▒▓█" `"·: "` "◆ ◇ ▰" "◉" 头 + "━━" 实线 "■□▣"
海洋 / 旅行 / 远方 鱼 / 帆 / 船 / 浪 " .~≈≋" 水波 "~∼≈≋" (波纹) "·°" (气泡) "⛵" 头 + "~~~" 尾流 "◐◑◯" (月相) 一艘船 + 浪 + 气泡 + 海鸟划过

怎么写 floaters 形状

每个形状是 3-4 行的多行 ASCII,宽 8-12 字符。一定要:

  • 形状轮廓闭合(比如树叶 ,/^\, ( ) '\_/' )
  • 多个变体不要长得一模一样,至少 3-6 个不同的
  • 单字符宽度,不要用全角
  • 留 1 格 padding 让旋转抖动好看

树叶示例:

floaters: [
  [" ,-^-, ",
   "|     |",
   " '---' "],
  ["  /\\\\  ",
   " /  \\\\ ",
   " \\__/ "],
  ["  *_*  ",
   " /...\\\\ ",
   " '___' "]
]

音符示例:

floaters: [
  ["  ♪    ",
   " /|    ",
   "♪ |____♪"],
  ["    ♫  ",
   "    /\\\\ ",
   "♪__/  \\\\"],
  ["  ♩    ",
   "  |    ",
   "  o    "]
]

写完检查:把 SCENE 直接贴进控制台,跑一下 JSON.stringify(SCENE) 不报错就 OK。

自由发挥的判定

如果用户的产品不在上表 10 类里 → 自己设计 motif,遵守原则:

  1. floaters 选 3-6 个跟产品有具象关联的小图形("它会让人想到这个产品")
  2. centerShade 14 字符明暗梯度,暗的字符( .,)开头,亮的(@#█)结尾,中间渐变
  3. diffuseChars 5-8 个"半透明"字符(点 / 顿点 / 小方块 / 波浪),表现氛围底层
  4. streak 整套要"前重后轻"渐隐
  5. sat / orbitDots 各 3 个,表现轻重三级

一句话原则:让人不戴眼镜、3 米外瞄一眼,能猜出这是个什么产品的网站。

9. 调性 → 配色映射(用户没指定风格时按这个选)

用户描述里的关键词 推荐预设 主色
安静 / 克制 / 思考 / 写作 / 笔记 / 本地优先 深空青(默认) #8be9ff 青
温暖 / 手作 / 中式 / 文艺 / 慢 / 茶 / 复古 暖色羊皮纸 #660125 酒红
高能 / 未来 / AI / Web3 / 游戏 / 极客 赛博紫 #ff00aa 霓虹品红
CLI / 终端 / 安全 / 复古 80s / phosphor 终端绿 #00ff66
自然 / 健康 / 冥想 / 旅行 / 北欧 极光 #7fe3c4 极光绿
咖啡 / 烘焙 / 工艺 / 食品 / 沙漠 / 大地 沙漠日落 #ff8b3d 烤橙
海洋 / 远方 / 蓝色 / 冷静 / 数据 自由设计 #4fc3f7 海洋蓝
黑金 / 奢侈 / 精确 / 钟表 / 高端硬件 自由设计 #d4af37 香槟金 + 黑底

判定流程:

  1. 用户明确说了风格名 → 照 styles.md 改
  2. 用户没说,但产品有明显调性 → 按上表选最贴的预设
  3. 完全开放 → 默认深空青

10. 报告

模式 A:一句话。

已生成 ~/Desktop/{slug}.html — {产品名}产品落地页,6 个功能卡片 + 3 档价格,深空青风格。双击打开。

模式 B:完整 HTML 代码块 + 一行说明。

保存为 {slug}.html 双击打开。要换图就把图片 URL 换成你自己的。要改 ASCII 主标题去顶部的 <pre class="ascii-title lg"> 替换字模。

易错速查

  • 5 个 ASCII 层颜色互相打架:测试一下深色背景下 5 色都要清晰可读。粉太亮、紫太暗都会塌
  • ASCII 大字模板对不上:5 行 ANSI Shadow 字符高度必须严格 5-6 行,不要 3 行
  • <pre> 里换行用真换行,不要 \n 字符串字面量
  • 卡片 data-cat 和 filter 不匹配 → 筛选失效。一致性检查
  • pricing 中间档忘加 featured → 视觉重心丢
  • JSON / 对象里中文引号:ASCII overlay 里如果用引号一律用全角 ""
  • 删了 <pre id="ascii-comets"> 之类的层 → JS 报错。5 层节点必须全部保留
  • 没给图片 URL → 用 unsplash 的横图(?auto=format&fit=crop&w=900&q=70)或 picsum