Communitygithub.com

williamsnieves/landing-factory

將公開的參考網站轉換為抽象模式表,儲存於 patterns/<slug>.md(章節地圖、英雄區類型、網格與間距、字體尺度、調色板通用描述、密度、動作清單及每項效果的技術細節、檢測到的函式庫),但不儲存網站任何資產、文案或程式碼。請在使用者輸入 /analyze-reference <url> 或要求分析、研究、拆解、提取參考網站(用於著陸頁)的模式時使用。

landing-factory 是什麼?

這是 William Nieves 開發的 landing-factory AI 助手技能,專用於分析公開參考網站並以抽象語言生成模式表(patterns/<slug>.md),絕不複製或儲存原始網站的資產、文字或程式碼。支援 Claude Code、Amazon Q Developer 等支援 Claude Code 風格的平台,並可做為 Cursor、Codex 等工具的自訂指令使用。此技能需 Node.js(Playwright、Chromium)環境,可辨識代理設定,並自動檢查 robots.txt 和文字與資料探勘保留(TDMRep)要求,若未經授權則中斷分析。分析範圍包括單一公開頁面與最多兩個使用者指定的內部連結,產出結構化報告:區段地圖、英雄區類型、格線系統、字體尺度、角色與色調的調色盤、內容密度、動作效果(觸發時機與技術推測)、已偵測的函式庫。嚴格遵循抽象規則,不記錄原始品牌字型名稱、顏色代碼、標誌、文字或資產 URL。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/williamsnieves/landing-factory/tree/HEAD/.claude/skills/analyze-reference

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

analyze-reference

抽取模式,而非克隆。這個技能讀取一個公開頁面(加上最多兩個使用者指定的內部連結),以抽象術語描述其建置方式與動態效果,並寫入 patterns/<slug>.md。不會儲存網站任何內容:無圖片、影片、3D、標誌、文字、程式碼、品牌字型名稱或顏色代碼。螢幕截圖為 .cache/analyze/ 目錄下的暫時工作素材(已加入 git-ignore),並在結束時一律刪除。

此為專案自身工作流程的指引,並非法律建議。在產品化之前,請諮詢智慧財產權律師(參見 docs/roadmap.md)。

輸入

  • url(必要):一個公開的 http(s) 頁面。任何需要登入、付費牆或機器人驗證的頁面均不納入範圍。
  • --focus "..."(選用):使用者對該網站的喜好描述,以他們自己的話表達。這個參數會引導模式表中哪些區段應深入分析。記錄於 frontmatter 中(若省略則為 none)。
  • 最多 2 個內部連結(選用,同一網站):對每個連結執行相同分析步驟,並合併至同一份模式表中。絕不進一步爬取。

Slug:從主機名稱衍生(去除 www.,點號改為連字號,例如 example-com)。若使用者指定 slug,則將 --slug 傳遞給 recon.mjs。若 patterns/<slug>.md 已存在,則在覆蓋前先詢問。

所有命令從專案根目錄執行。腳本位於 .claude/skills/analyze-reference/scripts/;每個腳本皆支援 --help。

步驟

按順序執行。無論步驟 1 至 5 如何結束(成功、中止或錯誤),步驟 6(清理)都會執行。將其視為 finally 區塊。

1. 檢查權限(在瀏覽器接觸網站之前)

node .claude/skills/analyze-reference/scripts/check-robots.mjs <url>

此腳本會評估 robots.txt 中針對 *、ClaudeBot、anthropic-ai 和 GPTBot 的規則、X-Robots-Tag 標頭、<meta name="robots">,以及文字與資料探勘保留(TDMRep:/.well-known/tdmrep.json、tdm-reservation 標頭與 meta)。結束碼:0 允許、1 禁止、2 無法驗證。

  • 結束碼 1 或 2:停止。不產出任何模式表,不執行偵察任務。告知使用者腳本列出的確切原因。結束碼 2(5xx、逾時、無法讀取的檔案)屬於保守的中止:表示無法驗證權限;不要重複重試,也不要尋找其他繞道方式。
  • 對每個額外的內部連結也要執行此檢查。
  • robots.txt 回傳 404 視為允許;回傳 401/403 視為禁止。

2. 偵察

node .claude/skills/analyze-reference/scripts/recon.mjs <url> [--slug <slug>]

Playwright(無頭 Chromium;若 Playwright 自帶的瀏覽器未安裝,請設定 QA_CHROME_PATH 或 CHROME_PATH)會載入頁面、捲動頁面,並寫入 .cache/analyze/<slug>/recon.json 和 screens/{375,768,1440}-<n>.png。JSON 僅包含結構與統計資料:按順序排列的區段及其高度與標題/字數(絕對不包含文字)、彙總的字型大小、行高、間距、網格/flex 使用情況、以字型分類(serif/sans/mono/display)標示的字型(絕不指名稱)、以角色描述標示的顏色(絕不包含色碼)、偵測到的函式庫及其證據與信心度、網路網域、Canvas/WebGL 存在與否,以及動態觀察(揭示、固定、視差、滾動觸發、固定標頭、平滑捲動)。

滾動容器。 有些頁面會將文件設為一個視口高度,並在內部包裝器中進行捲動。recon.mjs 會偵測此情況(可視的 overflow-y: auto|scroll|overlay 元素,覆蓋至少 60% 的視口,且具有最大的滾動範圍),並將其用於螢幕截圖、動作取樣和滾輪探測。recon.json 會記錄 scroller: { kind: "document" | "container", scrollHeightPx, clientHeightPx },而 viewports[w].docHeightPx 是實際使用的可滾動高度。在閱讀證據時請檢查 scroller.kind。這個啟發式方法是記錄性而非保證性的:如果螢幕截圖顯示的是側面板或模態框而非頁面本身,請在模式表中說明。不涵蓋的情況:巢狀或水平滾動器,以及由滾輪事件驅動但無可滾動元素的場景。此外,頁面可能在某個寬度停止捲動(例如平板斷點);此時在該寬度僅有一張螢幕截圖是正確的。

在代理後面。 當設定了 HTTPS_PROXY 或 HTTP_PROXY(雲端工作階段)時,check-robots.mjs 和 recon.mjs 會以 NODE_USE_ENV_PROXY=1 重新執行一次,以便 Node 的 fetch 使用代理,而 recon.mjs 會將代理傳遞給 Chromium(回送流量仍保持直接連線)。無需額外旗標;Node 的實驗性警告訊息會被隱藏。憑證照常來自 NODE_EXTRA_CA_CERTS;腳本不會讀取或嵌入它們。沒有代理時則一切不變。

結束碼 3 表示頁面無法分析(登入表單、機器人驗證、HTTP 401/403/429、無法連線)。停止:不產生模式表,告知使用者原因(若是登入頁面則說:「該頁面非公開」)。絕不嘗試規避封鎖、解決驗證問題、登入或改變使用者代理字串。

3. 閱讀證據

  • 完整讀取 .cache/analyze/<slug>/recon.json。
  • 使用 Read 工具檢視螢幕截圖,每個寬度至少數張,以判斷數字無法呈現的內容:英雄區構圖、節奏、密度、佈局何時打破網格、哪些部分會動。這些截圖僅供你查看;絕不複製、嵌入或參考它們。
  • 信心度:全域或 DOM 類別加上相符的腳本名稱為 高;僅其中一項為 中;僅網路網域為 低。若函式庫被綑綁進應用程式程式碼中,則只會顯示腳本名稱匹配,因此請使用「可能」並保留偵察報告中的信心度。

4. 撰寫模式表

將 patterns/_template.md 的結構複製到 patterns/<slug>.md。填寫 frontmatter(url、slug、今天的日期 YYYY-MM-DD、focus、libraries 作為名稱清單)以及每個區段,使用你自己的語言:

區段內容
摘要這是什麼樣的頁面,以及為什麼值得學習
區段地圖依序排列的區段:角色、近似高度(以視口為單位)、佈局構想
英雄區英雄區類型、首屏構圖、載入時哪些部分會動
網格與間距欄位系統、內容寬度類別、間距比例(基本單位)、垂直節奏
字體通用類別(「大型怪誕展示字體 + 襯線內文字體」)、比例、字重、行高與字距習慣、大小寫
調色盤角色與色調(「近乎黑色的背景、暖色飽和的強調色」)、對比特性、主題
密度每螢幕內容量、留白、每區段的想法數量、文字與媒體的平衡
動作表格:時刻、觸發(載入、滾動、懸停)、類型(揭示、固定、視差、滾動觸發、頁面轉場、著色器/3D)、技術與函式庫、信心度
函式庫偵測到的函式庫及其證據類別與信心度
可取之處 / 應避免之處哪些可直接沿用作為原創著陸頁的模式,哪些過於特殊或有風險而不宜模仿

動作條目:每個相關效果一行。固定區段內含隨滾動動畫的內容,觸發為 scroll,類型為 pin+scrub,並附上函式庫與其信心度。懸停行為無法由偵察測量;請查看螢幕截圖或 hoverTransitionElements 計數,並在推測時將信心度標示為低。

5. 驗證

npm run validate:patterns

必須通過。若回報 file:line 違規,請將那些行改寫得更抽象,然後再次執行。切勿削弱驗證器,也切勿使用 > note: 行來夾帶文案:該前綴僅允許你自己的簡短評論不受長引號規則限制。

只有在步驟 3 之後仍有標記為有趣的效果無法解釋時(選用):npx rea-agents analyze-javascript-application <url>(耗效能,絕非必要)。僅記錄書面結論(「由時間軸函式庫驅動的滾動連結攝影機路徑,中等信心度」),絕不記錄其輸出、程式碼或傾印資料。若其需要你無法取得的網路存取權,則跳過。

6. 清理(總是執行)

node .claude/skills/analyze-reference/scripts/recon.mjs --cleanup <slug>

在成功、任何步驟中止或發生錯誤後執行。然後確認 .cache/analyze/<slug> 已移除,且 git status 顯示沒有來自網站的內容(成功時僅有 patterns/<slug>.md)。recon.mjs 在失敗時也會移除自己的資料夾,但你仍須執行清理步驟。

7. 向使用者報告

說明分析了什麼、模式表的路徑、函式庫及其信心度、任何無法確定的內容,並強調 PR 中必須由人工審查模式表。若中止:告知原因,以及未寫入任何模式表。

抽象規則(嚴格)

絕不將以下內容放入模式表、模式表的聊天摘要、提交記錄或任何版本控制的檔案中:

  • 來自網站的文字:標題、內文、微文案、替代文字、meta 描述(只允許頁面標題和 URL)。
  • 圖片、影片、字型、3D 模型或圖示的 URL,以及任何資產檔案。
  • 原始碼、標記、CSS、JS 或著色器片段,即使經過縮小或編輯。
  • Hex、rgb()、hsl() 或其他顏色代碼。請用角色和色調描述。
  • 品牌或專有字型名稱。請使用通用類別。
  • 標誌、品牌標記、插圖。

請像設計師向同事簡報一樣撰寫模式:「固定的陳述區段,內容在大約一個額外視口的範圍內隨滾動過渡」,而不是標記的逐字轉錄。若你不確定某個細節是內容還是模式,請將其省略。

中止情況

情況行動
robots.txt 禁止 *、ClaudeBot、anthropic-ai 或 GPTBot 存取該路徑在步驟 1 停止,報告匹配的規則,不產生模式表
TDM 保留(TDMRep 檔案、標頭或 meta,或 robots.txt 指令)在步驟 1 停止,報告此情況,不產生模式表
X-Robots-Tag 或 meta robots 中含有 noai、noindex 或 none在步驟 1 停止,報告此情況,不產生模式表
權限無法驗證(5xx、逾時、無法讀取的檔案)在步驟 1 停止,告知「無法驗證權限」,不產生模式表
登入表單、付費牆、HTTP 401/403/429、機器人驗證在步驟 2 停止,告知該頁面非公開或封鎖自動化瀏覽器,不產生模式表;不嘗試規避
URL 無法連線或回應非 2xx在步驟 2 停止,報告錯誤,不產生模式表
驗證持續失敗透過進一步抽象來修正;若無法在不失焦點的情況下通過,則告知並不撰寫模式表

在每種中止情況下均執行步驟 6。

歸屬

偵察方法(多種寬度的螢幕截圖、DOM 結構、計算樣式、互動與滾動觀察)改編自 JCodesMore/ai-website-cloner-template 中 clone-website 技能的偵察階段,採用 MIT 授權。僅重複使用並改寫了偵察階段的概念,以進行抽象描述;不包含任何程式碼,也不包含其中的資產下載或重建階段。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

williamsnieves/landing-factory

tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS, React, Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated, "AI-made", sloppy, or asks to make it look designed, premium, award-level or less like every other site. Not for dashboards or app screens.

williamsnieves/landing-factory

Use when the user wants to design, redesign, shape, critique, audit, polish, simplify, harden, animate, or otherwise improve a frontend interface: websites, landing pages, dashboards, product UI, components, forms, settings, onboarding, empty states, and native iOS or Android screens. Handles UX review, hierarchy, layout, typography, color, motion, UX copy, accessibility, responsive behavior, edge cases, and capturing or documenting design systems (DESIGN.md, tokens). Also for making bland UI bolder, loud UI quieter, or ambitious visual effects. Not for backend-only or non-UI tasks.

williamsnieves/landing-factory

Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks. Also use when the user says "openspec apply", "opsx apply", or "openspec implement".

williamsnieves/landing-factory

Archive a completed OpenSpec change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete. Also use when the user says "openspec archive" or "opsx archive".

相關技能