コンテンツ
製品ブリーフをランディングページに変える
読者を調査し、ブリーフを LiveDoc に保存し、その文脈から Landing Page タスクを作成し、ホストされたページが完成するまでポーリングします。
プロンプトをコピー
角括弧の項目を置き換えて、Claude Code、Codex、ターミナルにアクセスできる AI に貼り付けてください。Felo スキルをインストールし、クレジットを使う前に確認し、ワークフローを実行します。
[読者] に向けた [製品] のランディングページを作成してください。 目的: [登録 / デモ / ウェイトリスト]。トーン: [トーン]。言語: [言語]。 素材: [製品ブリーフの URL、またはブリーフを貼り付け]。必ず含めるもの: [証明ポイント、価格、CTA]。 Chat と Web Fetch で読者と競合2〜3ページを調査してください。ブリーフと調査を LiveDoc に保存し、その LiveDoc をコンテキストにした Landing Page タスクを作成してください。完了するまでポーリングし、ホストされたページのリンクを返してください。 以下を作成してください。 1. ページ構成: ヒーロー、証明、機能、反論、CTA。 2. ホストされたページのリンク。 3. コンテキストに使った LiveDoc のリンク。 4. 検証が必要な主張のレビューのチェックリスト。 ルール: - 数値、顧客、お客様の声、価格、コンプライアンス上の主張を捏造しないでください。 - すべての主張をブリーフまたは取得したページにたどれるようにしてください。 - 調査やページ生成でクレジットを消費する前に確認してください。 - 公開したりドメインを接続したりせず、レビュー用のホストリンクを返してください。 - 構成を ./landing-page-outline.md に書き、チャットで要約してください。
コピー内容にはインストール手順と安全ルールも含まれます。
完成するもの
実行時の出力例です。リアルタイム生成ではありません。
ランディングページ構成
ヒーロー:「30個のタブを開かずに市場を調べる」 サブ見出し: 出典と下書きブリーフを1回で。 証明: ブリーフあたりの節約時間。すべての主張が出典にリンク。 機能: 検索、ページ抽出、X シグナル、LiveDoc の証拠。 反論:「数字を捏造しない?」しない。データがない場合は「該当データなし」。 CTA: 1つの問いから始める。
ページ: https://felo.ai/ai-page/... コンテキスト: https://felo.ai/livedoc/...
実際の呼び出し
開発者向け:同じワークフローを実行順に並べたコピー可能なコード。
実際の API 呼び出しを表示
読者と代替案を調査する
Chat で読者は誰か、何を必要としているかを聞き、Web Fetch で競合ページを2〜3件読みます。
landing.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type ChatData = { data: { answer: string; resources: { link: string; title: string }[] }; }; type ExtractData = { data: { content: string } }; const research = await felo<ChatData>("/v2/chat", { query: "Who is [audience] and what do they need from [product]?", }); const pages = await Promise.all( research.data.resources.slice(0, 2).map((source) => felo<ExtractData>("/v2/web/extract", { url: source.link, output_format: "markdown", with_readability: true, }).then((page) => ({ ...source, content: page.data.content })), ), );出力例
{ "answer": "…", "resources": [{ "link": "https://example.com", "title": "…" }] }ブリーフを LiveDoc に保存する
LiveDoc を作成し、製品ブリーフをドキュメントリソースとして追加し、取得した競合ページも添えます。
landing.ts type LiveDocData = { data: { short_id: string } }; const doc = await felo<LiveDocData>("/v2/livedocs", { name: "Landing page: [product]", description: "Product brief, audience research and competitor notes", }); await felo(`/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Product brief", content: "[paste the brief: audience, problem, proof, pricing, CTA]", }); await felo(`/v2/livedocs/${doc.data.short_id}/resources/urls`, { urls: pages.map((page) => ({ url: page.link, title: page.title })), }); console.log(doc.data.short_id); // page contextランディングページタスクを作成する
/v2/landing_pageにページプロンプトと LiveDoc short_id を送り、task_id を取得します。landing.ts type LandingTaskData = { data: { task_id: string } }; const task = await felo<LandingTaskData>("/v2/landing_page", { query: "Create a landing page for [product] for [audience]. Goal: [signup]. " + "Use the product brief and research in the LiveDoc. Return a hero, proof, " + "features, objections and one CTA. Do not invent claims.", livedoc_short_id: doc.data.short_id, }); console.log(task.data.task_id);出力例
{ "data": { "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }完成までポーリングする
タスク履歴を照会し、COMPLETED になったら
ai_page_htmlを読みます。landing.ts type TaskState = { data: { task_status: string; ai_page_html?: string; ppt_url?: string }; }; async function waitForPage(taskId: string) { for (let attempt = 0; attempt < 40; attempt++) { const state = await felo<TaskState>(`/v2/tasks/${taskId}/historical`); if (state.data.task_status === "COMPLETED") { return state.data.ai_page_html ?? state.data.ppt_url; } if (["FAILED", "EXPIRED", "CANCELED"].includes(state.data.task_status)) { throw new Error(`Landing page task ${state.data.task_status}`); } await new Promise((resolve) => setTimeout(resolve, 3000)); } throw new Error("Landing page task timed out"); } const pageUrl = await waitForPage(task.data.task_id); console.log(pageUrl);出力例
{ "task_status": "COMPLETED", "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ", "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ" }共有前にレビューする
主張、価格、法務表現、CTA リンクを確認してから共有します。
含まれるもの
- 公開ページに基づく読者・競合調査
- 製品ブリーフと調査を保存した LiveDoc
- その文脈から生成したホスト型ページ
- 共有前の主張・リンク・CTA レビューリスト
やらないこと
- ホストページを生成するだけで、サイト公開や独自ドメイン接続はしない
- 生成コピーは共有前に人のレビューが必要
- A/B テストや analytics 連携はしない
- ブリーフとページにない主張は検証できない
- ロゴ、ブランドシステム、カスタムイラストは作らない
よくある質問
何を生成しますか?
製品ブリーフと調査に基づき、Felo 上でホストされるランディングページです。受け取るのはリンクで、デプロイ済みサイトではありません。
独自ドメインは使えますか?
このワークフローでは使いません。レビュー用のホストページを返し、ドメイン接続と公開は別ステップです。
顧客の声や指標を捏造しますか?
いいえ。プロンプトは捏造を禁止し、すべての主張をブリーフか取得ページに紐付けます。根拠のない内容は除外されます。
繰り返し改善できますか?
はい。LiveDoc のブリーフを修正し、新しい文脈で新しい Landing Page タスクを作成します。
カスタム画像も作りますか?
ページ構造とコピーを担当します。カスタムイラストやブランド素材は対象外です。
ページ1枚の費用は?
調査とページ生成は従量制クレジットです。現在の料金は料金ページにあり、プロンプトは使う前に確認を求めます。
関連ワークフロー
市場の問いを go-to-market ブリーフに変える
市場に正確な問いを投げ、回答の背景にあるカテゴリと料金ページを読み、X で買い手が課題をどう語るかを集め、出典付きの主張と未解決の問いを持つ GTM ブリーフに保存します。
ワークフローを開くコンテンツ読者が実際に聞いている質問で1か月分のコンテンツを埋める
Chat でテーマを整理し、読者が X で聞いている質問を見つけ、参考動画の文字起こしからリアルな切り口を取り、すべての行に根拠を書いた4週間のコンテンツカレンダーを作ります。
ワークフローを開くオフィスリサーチページをスライド資料に変える
ページを抽出し、LiveDoc の文脈として保存し、PPT Task API に deck を作らせ、完成したリンクが出るまでポーリングします。
ワークフローを開く自分の形に変える
同じレシピを、実際の進め方に合わせて調整します。
PDF ブリーフから始める
multipart で PDF を送ると、プラットフォームが LiveDoc リソースとして保存し、ページタスクに渡します。
2つのポジショニング版を作る
同じ LiveDoc で異なる角度のタスクを2つ作り、比較してから1つを磨きます。
スライドに再利用する
同じ LiveDoc を PPT タスクにも渡し、ページと deck のストーリーを揃えます。
さらに進む
このレシピの背景にあるリファレンスと、次に見るべきページ。