Communitygithub.com

williamsnieves/landing-factory

公開リファレンスサイトを抽象的なパターンシートに変換し、パターン/<スラッグ>.md に書き出します。サイトのアセット、コピー、コードは一切保存しません。ユーザーが /analyze-reference <url> を実行したり、ランディングページのインスピレーションサイトの分析を依頼した場合に使用します。robots.txt とテキスト・データマイニング予約を最初に確認し、アクセスが禁止されている場合は中断します。サイトのクローンや再構築を目的としていません。

landing-factory とは?

このスキルは、公開されたリファレンスサイトを分析し、そのデザインパターンを抽象的な記述として `patterns/<slug>.md` に書き出すAIエージェント向けツールです。画像、テキスト、コード、色コードなど、サイトの具体的なアセットやコンテンツを一切保存せず、サイトの構成、タイポグラフィ、カラーパレット、グリッド、モーションなどのパターンを「デザイナーが同僚に説明するような抽象度」で記述します。利用開始前に必ず `robots.txt` や TDMRep(テキスト・データマイニング予約)を確認し、アクセスが許可されていない場合は即座に処理を中断するため、法的・倫理的に安全です。Claude Code、Cursor、Codex などのAIエージェント環境で動作し、Playwright を用いてヘッドレスブラウザでレンダリングと分析を行います。分析結果はMarkdown形式で出力され、その後のレビューやパターンライブラリとして活用できます。サイトの複製や再現を目的とせず、あくまでインスピレーションのための構造的な知見を抽出することに特化しています。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

analyze-reference

パターンを抽出し、クローンはしません。このスキルは1つの公開ページ(およびユーザーが指定する最大2つの内部リンク)を読み込み、その構築方法と動作を抽象的な用語で説明し、patterns/<slug>.md に書き出します。サイトからの一切の情報(画像、動画、3D、ロゴ、テキスト、コード、ブランドフォント名、色コード)は保存されません。スクリーンショットは .cache/analyze/ 下の一時的な作業素材(git管理対象外)であり、処理終了時に必ず削除されます。

これはリポジトリのワークフローガイダンスであり、法的助言ではありません。製品化する前にIP弁護士に相談してください(docs/roadmap.md 参照)。

入力

  • url(必須): 公開されているhttp(s)ページ。ログイン、ペイウォール、ボットチャレンジの背後にあるページは対象外です。
  • --focus "..."(オプション): ユーザーがそのサイトのどこを気に入ったか、ユーザーの言葉で記述します。シートのどのセクションを深く掘り下げるかを決定します。フロントマターに記録します(省略時は none)。
  • 最大2つの内部リンク(オプション、同一サイト): それぞれを同じステップで分析し、1つのシートにマージします。それ以上クロールしません。

スラッグ: ホスト名から生成(www. を削除し、ドットをダッシュに変換、例: example-com)。ユーザーがスラッグを指定した場合は --slug を recon.mjs に渡します。patterns/<slug>.md が既に存在する場合は、上書き前に確認します。

すべてのコマンドはリポジトリルートから実行します。スクリプトは .claude/skills/analyze-reference/scripts/ にあり、それぞれ --help に対応しています。

手順

以下の順序で実行します。ステップ6(クリーンアップ)は、ステップ1から5が成功、中断、エラーのいずれで終了しても実行されます。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 ヘッダーとメタ)を評価します。終了コード: 0 許可、1 拒否、2 確認不可。

  • 終了コード 1 または 2: 停止します。シートは作成せず、recon も実行しません。スクリプトが出力した正確な理由をユーザーに伝えます。終了コード 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の有無、およびモーションの観測結果(リビール、ピン、パララックス、スクラブ、スティッキーヘッダー、イーズドスクロール)。

スクロールコンテナ。 一部のページはドキュメントを1ビューポートの高さに保ち、内側のラッパーをスクロールさせます。recon.mjs はこれを検出し(可視で overflow-y: auto|scroll|overlay がビューポートの60%以上を覆い、スクロール範囲が最大の要素)、スクリーンショット、モーションサンプリング、ホイールプローブに使用します。recon.json には scroller: { kind: "document" | "container", scrollHeightPx, clientHeightPx } が記録され、viewports[w].docHeightPx は実際に使用されたスクロール可能な高さです。エビデンスを読む際は scroller.kind を確認してください。ヒューリスティックな判定であり保証はありません。スクリーンショットにサイドパネルやモーダルがページの代わりに表示されている場合は、その旨をシートに記述します。ネストされたスクロールや水平スクロール、スクロール可能要素がなくホイールイベントで駆動されるシーンはカバーしません。また、ある幅(例えばタブレットブレークポイント)でスクロールが停止するページもあります。その場合、その幅のスクリーンショットは1枚で正しいです。

プロキシ配下。 HTTPS_PROXY または HTTP_PROXY が設定されている場合(クラウドセッションなど)、check-robots.mjs と recon.mjs は NODE_USE_ENV_PROXY=1 を指定して自身を一度再実行し、Node の fetch がプロキシを使用するようにし、recon.mjs はプロキシを Chromium に渡します(ループバックは直接接続)。フラグは不要です。Node からの experimental-warning行は非表示になります。証明書は通常通り NODE_EXTRA_CA_CERTS から取得します。スクリプトは証明書を読み取ったり埋め込んだりしません。プロキシがない場合は何も変わりません。

終了コード 3 はページが分析不可能であることを意味します(ログインフォーム、ボットチャレンジ、HTTP 401/403/429、到達不能)。停止: シートは作成せず、理由をユーザーに伝えます(ログインページの場合は「このページは公開されていません」)。ブロックを回避したり、チャレンジを解決したり、ログインしたり、ユーザーエージェントを変更したりしないでください。

3. エビデンスの読み取り

  • .cache/analyze/<slug>/recon.json を完全に読み取ります。
  • スクリーンショットをReadツールで表示し、幅ごとに少なくとも数枚ずつ確認して、数値だけでは判断できない点(ヒーローの構成、リズム、密度、レイアウトがグリッドを破る箇所、動きのある要素)を評価します。これらはあなただけが見るためのものであり、決してコピー、埋め込み、参照しないでください。
  • 信頼度: グローバルまたはDOMクラスと一致するスクリプト名の両方がある場合は high、どちらか一方のみの場合は medium、ネットワークドメインのみの場合は low。アプリコードにバンドルされたライブラリはスクリプト名の一致のみで検出されるため、「likely(可能性あり)」と表記し、recon が報告した信頼度を維持します。

4. シートの作成

patterns/_template.md の構造を patterns/<slug>.md にコピーします。フロントマター(url、slug、本日日付を YYYY-MM-DD、focus、libraries を名前のリスト)とすべてのセクションを、あなた自身の言葉で埋めます:

セクション内容
要約このページの種類と、そこから学ぶ価値がある理由
セクションマップセクションの順序: 役割、ビューポートに対するおおよその高さ、レイアウトのアイデア
ヒーローヒーロータイプ、最初の画面の構成、読み込み時に動く要素
グリッドと間隔カラムシステム、コンテンツ幅クラス、間隔のスケール(基本単位)、垂直リズム
タイポグラフィ汎用クラス(「大きなグロテスクディスプレイ + セリフボディ」)、スケール比、ウェイト、行間とトラッキングの傾向、ケーシング
パレット役割とトーン(「ほぼ黒の背景、暖色の彩度の高いアクセント」)、コントラストの特性、テーマ
密度画面あたりのコンテンツ量、余白、セクションあたりのアイデア数、テキストとメディアのバランス
モーション表: 瞬間、トリガー(ロード、スクロール、ホバー)、タイプ(リビール、ピン、パララックス、スクラブ、ページトランジション、シェーダー/3D)、技法とライブラリ、信頼度
ライブラリ検出されたライブラリとそのエビデンスクラス、信頼度
参考にする点/避ける点オリジナルのランディングページでパターンとして再利用すべき点、および模倣するには具体的すぎる、またはリスクのある点

モーションエントリ: 関連するエフェクトごとに1行。コンテンツがスクロールに応じてアニメーションする間ピン留めされるセクションは、トリガー scroll、タイプ pin+scrub、ライブラリとその信頼度を記述します。ホバー動作はreconでは測定されません。スクリーンショットまたは hoverTransitionElements の数を確認し、推測する場合は信頼度を low に設定します。

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で人間がシートをレビューする必要があることを伝えます。中断時: 理由と、シートが作成されなかったことを伝えます。

抽象化ルール(厳守)

以下のものをシート、シートのチャット要約、コミット、またはバージョン管理されたファイルに決して入れないでください:

  • サイトのテキスト: 見出し、本文、マイクロコピー、altテキスト、メタディスクリプション(ページタイトルとURLは許可)。
  • 画像、動画、フォント、3Dモデル、アイコンのURL、およびアセットファイル。
  • ソースコード、マークアップ、CSS、JS、シェーダーの断片(短いもの、ミニファイされたもの、編集されたものを含む)。
  • 16進数、rgb()、hsl()、その他の色コード。役割とトーンで説明します。
  • ブランド名やプロプライエタリなフォント名。汎用クラスを使用します。
  • ロゴ、ブランドマーク、イラスト。

デザイナーが同僚に説明するようにパターンについて記述します。「ピン留めされたステートメントセクション、コンテンツが約1ビューポート分スクラブされる」。マークアップを書き写すのではありません。詳細がコンテンツかパターンか確信が持てない場合は、省略します。

中断ケース

状況アクション
robots.txt が *、ClaudeBot、anthropic-ai、GPTBot に対してパスを拒否ステップ1で停止、一致したルールを報告、シートなし
TDM予約(TDMRepファイル、ヘッダー、メタ、または robots.txt ディレクティブ)ステップ1で停止、報告、シートなし
X-Robots-Tag またはメタ 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".

関連スキル