Felo API PlatformFelo API Platform

Content

Ein Produktbriefing in eine Landingpage verwandeln

Recherchiere die Zielgruppe, speichere das Briefing im LiveDoc, erstelle aus diesem Kontext eine Landing-Page-Aufgabe und frage ab, bis die gehostete Seite fertig ist.

Dauer30 MinutenLevelFortgeschrittenAktualisiert2026-10-30
Für wenGründerProduktmarketingGrowth-Teams

Prompt kopieren

Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.

Baue eine Landingpage für [Produkt], gerichtet an [Zielgruppe].

Ziel: [Anmeldung / Demo / Warteliste]. Ton: [Ton]. Sprache: [Sprache].
Quellmaterial: [Produkt-Briefing-URL oder Briefing einfügen]. Muss enthalten: [Belegpunkte, Preis, CTA].

Nutze Chat und Web Fetch, um die Zielgruppe und zwei oder drei Wettbewerberseiten zu recherchieren. Speichere Briefing und Recherche in einem LiveDoc und erstelle dann eine Landing-Page-Aufgabe mit diesem LiveDoc als Kontext. Frage den Status ab, bis sie fertig ist, und gib den Link zur gehosteten Seite zurück.

Erstelle:
1. Einen Seitenaufbau: Hauptbereich, Belege, Funktionen, Einwände, CTA.
2. Den Link zur gehosteten Seite.
3. Den als Kontext genutzten LiveDoc-Link.
4. Eine Prüfliste der Behauptungen, die verifiziert werden müssen.

Regeln:
- Erfinde keine Kennzahlen, Kunden, Testimonials, Preise oder Compliance-Aussagen.
- Halte jede Behauptung auf das Briefing oder eine abgerufene Seite zurückführbar.
- Frage vorher, bevor du Credits für Recherche oder Seitengenerierung ausgibst.
- Veröffentliche nicht und verbinde keine Domain; gib den gehosteten Link zur Prüfung zurück.
- Schreibe den Aufbau nach ./landing-page-outline.md und fasse es im Chat zusammen.

Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.

Das bekommst du

Beispielausgabe eines Laufs. Keine Live-Generierung.

Beispiel-Landingpage-Briefing (Auszug)

Landingpage-Gliederung

Hauptbereich: „Einen Markt recherchieren, ohne dreißig Tabs zu öffnen.“ Subhead: Quellen und ein Briefing-Entwurf in einem Lauf. Beleg: Gesparte Zeit pro Briefing; jede Aussage verlinkt auf eine Quelle. Funktionen: Suche, Seitenextraktion, X-Signal, LiveDoc-Evidenz. Einwände: „Erfindet es Zahlen?“ Nein: fehlende Daten heißen „Nicht verfügbar“. CTA: Mit einer Frage beginnen.

Seite: https://felo.ai/ai-page/... Kontext: https://felo.ai/livedoc/...

Die konkreten Aufrufe

Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.

Konkrete API-Aufrufe zeigen
  1. Zielgruppe und Alternativen recherchieren

    Frage Chat, wer die Zielgruppe ist und was sie braucht, und lies zwei oder drei Wettbewerberseiten mit Web Fetch.

    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 })),
      ),
    );

    Beispielausgabe

    { "answer": "…", "resources": [{ "link": "https://example.com", "title": "…" }] }
  2. Briefing im LiveDoc speichern

    Erstelle das LiveDoc, füge das Produktbriefing als Dokument hinzu und hänge die erfassten Wettbewerberseiten an.

    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
  3. Landing-Page-Aufgabe erstellen

    Sende an /v2/landing_page den Seiten-Prompt und die LiveDoc short_id und erhalte die 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);

    Beispielausgabe

    { "data": { "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }
  4. Bis zur Fertigstellung abfragen

    Prüfe den Aufgabenverlauf bis COMPLETED und lies 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);

    Beispielausgabe

    {
      "task_status": "COMPLETED",
      "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ",
      "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ"
    }
  5. Vor dem Teilen prüfen

    Prüfe Aussagen, Preise, rechtliche Formulierungen und CTA-Links und teile danach.

Enthalten

  • Zielgruppen- und Wettbewerbsrecherche aus öffentlichen Seiten
  • Briefing und Recherche im LiveDoc
  • Gehostete Seite aus diesem Kontext
  • Prüfliste für Aussagen, Links und CTA vor dem Teilen

Was es nicht macht

  • Erzeugt nur eine gehostete Seite, veröffentlicht keine Website und verbindet keine eigene Domain
  • Generierter Text braucht menschliche Prüfung vor dem Teilen
  • Keine A/B-Tests und keine Analytics-Anbindung
  • Kann keine Aussagen prüfen, die nicht im Briefing oder auf der Seite stehen
  • Erstellt kein Logo, kein Brand-System und keine eigenen Illustrationen

Fragen

Was erzeugt es?

Eine bei Felo gehostete Landingpage aus Briefing und Recherche. Du bekommst einen Link, keine veröffentlichte Website.

Kann ich meine eigene Domain nutzen?

Dieser Workflow verbindet keine eigene Domain. Er liefert eine gehostete Seite zur Prüfung; Domain und Veröffentlichung sind ein separater Schritt.

Erfindet es Testimonials oder Metriken?

Nein. Der Prompt verbietet Erfindungen und verlangt, jede Aussage auf Briefing oder geladene Seite zurückzuführen. Unbelegtes bleibt draußen.

Kann ich iterieren?

Ja. Ändere das Briefing im LiveDoc und erstelle eine neue Landing-Page-Aufgabe mit dem neuen Kontext.

Erstellt es eigene Bilder?

Es übernimmt Struktur und Text; eigene Illustrationen und Brand-Materialien sind außerhalb des Workflows.

Was kostet eine Seite?

Recherche und Seitengenerierung werden nutzungsbasiert abgerechnet; aktuelle Preise stehen auf der Preisseite, und der Prompt fragt vor Ausgaben nach Bestätigung.

Verwandte Workflows

Mach es zu deinem

Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.

Mit PDF-Briefing starten

Sende ein PDF per multipart; die Plattform speichert es als LiveDoc-Ressource und übergibt es an die Seitenaufgabe.

Zwei Positioning-Versionen

Erstelle zwei Aufgaben mit unterschiedlichen Winkeln im selben LiveDoc und vergleiche vor der Auswahl.

Für Präsentation wiederverwenden

Dasselbe LiveDoc kann eine PPT-Aufgabe füttern, damit Seite und Deck dieselbe Geschichte erzählen.

Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.