Communitygithub.com

Irnist/website-pipeline

端到端客户网站流水线(调研→方向→构建→质量检查→预览部署→移交),自动运行,仅在遇到关键问题时停止。当用户输入 /website、要求启动/构建/继续客户网站,或在“新建网站”启动器创建的文件夹内运行时使用。

website-pipeline 是什么?

这是一个面向客户网站的端到端自动化流水线技能,覆盖从初始业务输入到最终预览部署与移交的完整流程。它支持自动模式,无需用户频繁干预,仅在遇到删除文件、花费资金、联系真实世界(真实邮箱、真实电话号码)以及关键设计评审等关键问题时才会暂停询问。该技能适用于Claude Code等AI编程助手,在Windows工作区(C:\Users\Administrator\Desktop\Claude Workspace)内运行,使用Git进行版本管理,每个阶段完成后自动提交。工作流分为多个明确阶段:初始搭建(scaffold)、需求调研(Intake)、方向确定(Direction)、构建(Build)、质量检查(QA)、预览部署(Preview Deploy)和移交(Handoff)。技能通过读取PROJECT.md中的阶段勾选状态来判断恢复点,并且支持独立运行特定阶段(如qa、deploy、handoff)。此外,还区分了示例网站(portfolio piece)和真实客户网站两种模式,在示例模式下允许虚构合理的商业信息,而在客户模式下则要求严格使用客户提供的数据,避免任何虚构内容。共享工具位于流水线目录下的tools/文件夹中,每个网站通过存根(stubs)调用,便于统一更新和维护。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add Irnist/website-pipeline

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

网站流水线

您从一个初始输入到部署预览,以尽可能少的用户输入运行一个客户网站。首先,每次运行(新建、恢复或单阶段):阅读 <pipeline>/RULES.md,即网站规则,除非本次会话已经阅读过。这些规则适用于每一步。tools/ 中的工具会机械地强制执行大部分规则,因此请运行它们,而不是通过肉眼重新检查。

工作区

所有内容都存放在同一个工作区 C:\Users\Administrator\Desktop\Claude Workspace(<workspace>)。以下路径均相对于它;在脚本中,从脚本自身位置(Path(__file__))推导路径,切勿使用硬编码的桌面路径。

内容位置
流水线(<pipeline>)Workflow and Pipeline/website-pipeline/(~/.claude/skills/website 是它的符号链接)
共享工具<pipeline>/tools/:qa.py、browser_qa.mjs、deploy.py 的唯一副本。每个站点的 tools/ 中都包含存根,这些存根在该站点上运行共享工具(L-052),因此修复或新增检查会同时影响所有站点。仅限站点的脚本与存根放在一起。
示例站点Concept Websites/<名称> Website/
所有者的作品集Portfolio Site/
作品集截图Portfolio Screenshots/:仅限已完成站点的截图,别无其他
临时文件(测试脚本、测试截图、备份、植入的缺陷)_temp/,切勿放入系统临时文件夹、项目或模板中

0. 我在哪里?

根据文件夹状态和参数决定入口点:

状态操作
当前目录中没有 _src/build.py搭建脚手架:powershell -NoProfile -ExecutionPolicy Bypass -File "<pipeline>/scaffold.ps1" -Target "<cwd>" -NoLaunch,然后进入导入阶段。如果当前目录包含无关文件,则停止并询问(这是一个关键问题)。
PROJECT.md 中每个阶段都已勾选(一个已完成的站点被同名重新打开),并且参数为空或是新建站点导入,而不是阶段参数或变更请求在执行或更改任何内容之前先询问(用户,2026-10-10,L-057)。使用一个 AskUserQuestion:"<名称> 已经完成(预览 )。重新设计它?",选项为 不,保留它 和 是,重新设计它。不: 停止,不执行任何操作,甚至不进行工具同步、QA 或部署。是: 像新站点一样从头开始;切勿根据旧简报自行重新设计(L-058)。(1) 提交所有未暂存的更改,并标记旧版本:git tag previous-<日期>。然后,将除 client-assets/ 和 .git/ 之外的所有内容(包括旧的 BRIEF.md)移动到 <workspace>/_temp/<名称>-previous-<日期>/(归档,切勿删除)。标签在 _temp 被清理后仍可恢复旧站点。(2) 再次搭建脚手架,复制模板的空白 BRIEF.md,并设置其 Business name: 行。(3) 在后台运行命令打开简报表单,python "<pipeline>/brief-form/brief_form.py" "<project>",告知用户窗口已打开,然后等待。在此期间不进行任何指引、库学习、素材搜索或设计工作。(4) 退出码 0("开始构建"):根据新简报运行常规的新站点流程,从导入阶段开始。退出码 3(关闭):停止并说明简报已保存。在交接时,替换站点的设计库条目,而不是添加第二个。
PROJECT.md 中有未勾选的阶段从第一个未勾选的阶段恢复。用一句话说明在哪里恢复。
恢复或更改任何现有项目工具无需同步:tools/ 包含共享工具的存根。如果站点没有 .git/,则运行 git init -b main、git config core.autocrlf false,复制模板的 .gitignore,并首先提交一个基线。如果 qa.py 警告存在共享工具的完整副本(2026-10-13 之前的站点),则运行 python "<pipeline>/dev/use_shared_tools.py" "<project>" 并提交。同时引入请求所需的新模板功能(例如 GSAP:build.py 中的 h_gsap、{{fn:gsap}}、tools/vendor/、motion.js)。
参数 status打印阶段清单以及开放的占位符。不执行其他操作。
参数 learn学习放入 <pipeline>/design-library/inspiration/ 的设计图片和 DESIGN.md 文件:按照 design-library/LEARN.md 操作,然后为每个参考输出一行报告。不执行其他操作。
参数 qa / deploy / handoff仅运行该阶段。

自由文本参数是导入材料(商业名称、电话、链接、备注)。将它们视为与 BRIEF.md 相同。

模式:示例或客户

BRIEF.md › Project type 设置模式。默认为 示例,即作品集作品。参数中明确的指令优先。

示例(作品集)客户(真实业务)
缺少的事实当简报内容薄弱时,虚构一个合理且一致的虚构业务:名称、故事、服务、营业时间。使用 555-01xx 电话号码和 example.com 电子邮件,确保不会联系到真人。绝不虚构。使用占位符和 data-todo。
评论、统计数据、资质对于 虚构 业务可以接受;在交接时将其列为虚构。如果示例使用的是 真实 业务,则仅使用真实的公开事实:不得虚构关于真实人或公司的评论、声明或价格。仅限客户提供的内容。
问题几乎没有:仅限于删除文件、花钱、联系现实世界(真实收件箱、真实电话号码)以及关键设计评审(#5)。下面的完整问题策略。
表单演示模式即可。需要真实端点;如果缺失则询问。
部署noindex 预览noindex 预览;仅当请求时才进行生产部署
交接附加项作品集截图(见交接阶段)为客户编写的占位符列表

操作规则

  • 自动运行。 不要询问“我该继续吗?”,从一个阶段进入下一个阶段。每个阶段完成后,在 PROJECT.md › 状态中勾选它。这使得运行在压缩或新会话后可以恢复。
  • Git(每个站点和流水线都是仓库)。 在每个已勾选的阶段之后(<阶段>: <完成的工作>)以及每次请求的变更轮次之后,在站点中提交,以便任何状态都可以比较或恢复。在流水线仓库中提交流水线变更(共享工具、模板、SKILL.md、LESSONS.md、设计库),如果存在,则在消息中包含经验教训 ID。dist/、qa/ 和缓存被 gitignore。绝不重写历史、强制推送或推送任何内容;没有远程仓库。
  • 问题遵循下面的策略。其他一切都是决策: 做出决策,在 PROJECT.md › 决策中添加一行(做了什么+为什么),然后继续。
  • 客户模式:绝不捏造客户事实。 这包括推荐语、评论数量、经营年限、许可证、认证、价格、保证、奖项和团队名称。如果输入材料中没有这些信息,则编写副本使其不需要这些事实。如果确实需要,则用 data-todo="所需内容" 标记该元素,以便 QA 在交接时列出。示例模式遵循模式表。
  • 在错误发生的那一刻,立即将其记录 在 PROJECT.md › 错误中。不要等到交接;上下文在此之前可能已被压缩。错误包括用户纠正的任何内容、QA、评审或审阅者标记的任何初稿错误(按类型记录一条,而不是按实例记录),以及任何错误的假设或工具使用错误。每条记录包括发生了什么、谁发现的、根本原因、修复方法以及如何预防。
  • 唯一真相来源: 编辑 _src/(页面、局部模板、site_config.py)和 assets/,然后运行 python _src/build.py。绝不编辑 dist/。
  • 脚本化编辑(L-027): 单次更改使用编辑。多次替换应写入一个 Python 脚本中(使用写入命令写入 <workspace>/_temp),绝不要使用 shell heredoc。脚本会在每次匹配计数恰好为 1 时退出,并在写入任何文件之前检查每个文件。之后,对任何编辑过的 .py 文件运行 py_compile 并重新构建。
  • 上下文卫生: 运行工具并阅读它们的 报告(qa/*.md),而非原始输出。通过上下文模式(ctx_execute_file / ctx_batch_execute,附带问题如“仅错误和警告”)查询长报告、日志和列表,而不是完整阅读它们。使用读取工具查看截图。绝不要将整个 HTML 文件转储到对话中。

问题策略(仅限关键事项)

仅当以下情况之一成立时才提问。这是客户模式;在示例模式下仅适用 #2 和 #5,并且 noindex 预览无需询问。

  1. 身份未知。 您无法从任何输入或公开来源判断业务内容、位置或服务对象。错误的猜测意味着重写网站。
  2. 面向外部或不可逆。 生产部署、自定义域名、将表单连接到真实收件箱、任何花钱的操作、删除用户文件。当 BRIEF.md 说明 部署预览:是 时,noindex 预览部署是预先授权的。
  3. 网站将做出的法律或事实声明 只有客户才能确认(许可、定价、保修)。默认情况下将其排除。仅当简报将其作为核心内容时才询问。
  4. 冲突指令 出现在简报、用户消息、RULES.md 和 CLAUDE.md 之间,且两种解读都合理。
  5. 关键设计评审。 无瑕评审或最终审阅者报告了 P0(阻塞性)或 P1(重大)问题。遵循以下评审关卡。这是构建过程中唯一允许提问的时刻。

如何提问:

  • 一批次,在导入阶段结束时。 使用一个包含 1-4 个问题的 AskUserQuestion。将推荐答案放在首位,并标记为“(推荐)”。绝不在构建过程中提问,评审关卡(#5)除外。如果后来出现阻塞性问题,使用清晰标记的占位符,在延期问题下记录,并在交接时呈现。
  • 绝不询问关于: 调色板、字体、布局、文案语气、页面列表、使用的图库照片、章节顺序、技术栈、文件名,或是否修复 QA 发现。决定这些。唯一的例外是 P0/P1 评审发现(#5)。
  • 如果没有关键问题,则不问任何问题。 说“没有阻塞性问题;继续”并继续。

评审关卡(无瑕发现)

使用无瑕自己的严重性等级(P0 阻塞性、P1 重大、P2 次要、P3 润色)。对每个发现-审查者项目按相同等级评分。

  • P2/P3(次要):不修复它们;继续。 在 PROJECT.md › 决策中为每个发现记录一行:“跳过:次要(P2/P3),<发现摘要>”。
  • P0/P1(关键):在更改任何内容之前停止并询问。 使用一个包含最多 4 个问题的 AskUserQuestion 批次。每个发现写一个问题,或者如果超过 4 个则按类别分组。每个问题说明问题所在及其位置(页面、章节、截图文件)。它提供 2-3 个具体的修复选项,将推荐选项放在首位并标记为“(推荐)”,再加上“保留原样”。然后在整个站点范围内应用用户的选择(L-016),重新构建,并在决策中记录该选择。
  • 重新检查: 在应用选择后,重新运行相同的评审一次。任何新的 P0/P1 将通过关卡再次处理;次要发现如上所述跳过。
  • 不通过关卡: 由 qa.py、browser_qa.mjs、LESSONS.md 或 RULES.md 已经禁止的客观规则违规,例如对比度低于 4.5:1、溢出、重复照片、使文字对比度降低的发光效果(发光本身是允许的)、裁剪不完整的主题,或预填充默认值的选择框。无论评审员将其评为何种严重性,都自动修复这些问题,因为它们是缺陷,而非设计选择。impeccable detect 标志除非违反这些规则之一,否则视为次要。像以前一样注明已知的误报(L-000)。

阶段

1 · 导入

  1. 阅读 <pipeline>/LESSONS-INDEX.md(每行一个经验教训,从 LESSONS.md 生成)。所有经验教训从初稿开始适用。打开与该项目相关的每个经验教训的完整 LESSONS.md 条目,并将其 ID 以及每个 ID 的简要说明(几个词)列在 PROJECT.md › 错误 › “注意”中。列出 ID,切勿复制经验教训文本:复制的文本会在经验教训被取代时过时(Trevor Travis 和 Gadget Zone 在允许发光后仍然保留了“禁止发光”)。
  2. 阅读 BRIEF.md、参数以及 client-assets/ 中的所有内容。使用读取工具打开每张照片,并在 PROJECT.md › 资产中编目。记录主题、质量、任何问题(盘子、标志、杂乱、裁剪)以及最佳位置(英雄/特色/画廊/跳过)。图片上的第三方品牌标志(板子、标牌、渲染图)视为背书:标记为“使用前裁剪”或跳过(L-028)。注意哪些照片来自同一拍摄场景或显示相同视角(L-029)。
  3. 如果提供了链接(现有网站、Google Business Profile、Facebook),获取它们并提取事实:服务、服务区域、营业时间、故事、所有者、经营年限、真实项目。在 PROJECT.md › 事实中每个事实旁边注明来源。
    • 将说明文字、评论和所有者引语 逐字 保存到来源文件(例如 client-assets/sources.md)。从此文件复制引语;绝不要根据记忆重新输入或改写(L-007)。
    • 在事实中记录每个项目的 署名行(由...设计/由...构建/年份)。仅由该业务构建的项目永远不会被标记为“由...设计”。
  4. 优化客户照片:python tools/optimize_images.py(client-assets → assets/img/client/,EXIF 旋转,最大 2000 像素)。
  5. 填充 _src/site_config.py:BIZ、HOURS、SERVICES、PRIMARY_CTA、PAGES、FORM_ENDPOINT、SEO。未知的联系值保持 ""。构建将它们保留为可见的 {{TOKEN}} 占位符,并且 QA 会报告它们。
    • 联系表单。 将简报中的 表单端点: 复制到 FORM_ENDPOINT:空白 = 演示模式;netlify = Netlify Forms(仅当 部署主机:netlify 时;否则 qa.py 会报错);web3forms:<访问密钥> = 任何主机上的 Web3Forms(收件箱所有者在 web3forms.com 创建密钥);或 Formspree 风格的 URL。{{fn:form_fields}} 添加匹配的隐藏字段和垃圾陷阱。切勿自行选择或连接真实收件箱:空白的简报保持演示模式,并列入交接列表。在客户端模式下,哪个收件箱接收消息是一个问题。将 在线预订链接: 复制到 BOOKING_URL;{{fn:booking}} 在联系页面上将其与呼叫按钮一起显示。
    • GSAP 动画。 可选,默认关闭。仅当简报说明 GSAP 动画:开启 或其等效内容时。

...

相关技能