Felo API PlatformFelo API Platform

Content

Maak van een productbrief een landingspagina

Onderzoek de doelgroep, bewaar de brief in een LiveDoc, maak vanuit die context een Landing Page-taak en vraag door tot de gehoste pagina klaar is.

Tijd30 minutenNiveauGevorderdBijgewerkt2026-10-30
Voor wieOprichtersProductmarketingGroeiteams

Prompt kopiëren

Vervang de velden tussen blokhaken en plak in Claude Code, Codex of een AI met terminaltoegang. Die installeert de Felo-skill, vraagt voor credits en voert de workflow uit.

Bouw een landingspagina voor [product] gericht op [publiek].

Doel: [aanmelding / demo / wachtlijst]. Toon: [toon]. Taal: [taal].
Bronmateriaal: [URL van productbrief of plak de brief]. Moet bevatten: [bewijspunten, prijs, CTA].

Gebruik Chat en Web Fetch om het publiek en twee of drie concurrentpagina’s te onderzoeken. Sla de brief en het onderzoek op in een LiveDoc en maak daarna een Landing Page-taak met dat LiveDoc als context. Poll tot die klaar is en geef de link naar de gehoste pagina terug.

Lever:
1. Een pagina-outline: hoofdblok, bewijs, functies, bezwaren, CTA.
2. De link naar de gehoste pagina.
3. De link naar het gebruikte LiveDoc.
4. Een checklist van beweringen die geverifieerd moeten worden.

Regels:
- Verzin geen cijfers, klanten, testimonials, prijzen of complianceclaims.
- Houd elke bewering herleidbaar tot de brief of een opgehaalde pagina.
- Vraag het voordat je credits uitgeeft aan onderzoek of paginageneratie.
- Publiceer niet en koppel geen domein; geef de gehoste link terug voor beoordeling.
- Schrijf de outline naar ./landing-page-outline.md en vat het samen in de chat.

De kopie bevat ook de installatiestappen en veiligheidsregels.

Wat je krijgt

Voorbeelduitvoer van een run. Geen live generatie.

Voorbeeld-landingspagina-outline (fragment)

Landingspagina-outline

Hoofdblok: “Onderzoek een markt zonder dertig tabbladen te openen.” Subhead: Bronnen en een briefconcept in één run. Bewijs: Bespaarde tijd per brief; elke claim linkt naar een bron. Functies: Zoeken, pagina-extractie, X-signaal, LiveDoc-bewijs. Bezwaren: “Verzint het cijfers?” Nee: ontbrekende data is “Niet beschikbaar”. CTA: Begin met één vraag.

Pagina: https://felo.ai/ai-page/... Context: https://felo.ai/livedoc/...

De exacte aanroepen

Voor ontwikkelaars: dezelfde workflow als kopieerbare code in uitvoeringsvolgorde.

Exacte API-aanroepen tonen
  1. Onderzoek doelgroep en alternatieven

    Vraag Chat wie de doelgroep is en wat die nodig heeft, en lees twee of drie concurrentpagina’s met 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 })),
      ),
    );

    Voorbeelduitvoer

    { "answer": "…", "resources": [{ "link": "https://example.com", "title": "…" }] }
  2. Bewaar de brief in de LiveDoc

    Maak de LiveDoc, voeg de productbrief als document toe en koppel de opgehaalde concurrentpagina’s.

    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. Maak de landingspaginataak

    Stuur naar /v2/landing_page de paginaprompt en de LiveDoc short_id en ontvang de 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);

    Voorbeelduitvoer

    { "data": { "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }
  4. Vraag door tot klaar

    Controleer de taakhistorie tot COMPLETED en lees 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);

    Voorbeelduitvoer

    {
      "task_status": "COMPLETED",
      "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ",
      "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ"
    }
  5. Controleer voor delen

    Controleer beweringen, prijzen, juridische tekst en CTA-links en deel daarna.

Wat inbegrepen is

  • Doelgroep- en concurrentonderzoek op openbare pagina’s
  • Brief en onderzoek in de LiveDoc
  • Gehoste pagina uit die context
  • Controllijst voor beweringen, links en CTA voor delen

Wat het niet doet

  • Maakt een gehoste pagina, publiceert geen site en koppelt geen eigen domein
  • Gegenereerde tekst moet menselijk worden gecontroleerd voor delen
  • Geen A/B-tests en geen analytics-koppeling
  • Kan beweringen niet verifiëren die niet in brief en pagina staan
  • Maakt geen logo, brandsysteem of eigen illustraties

Vragen

Wat genereert het?

Een bij Felo gehoste landingspagina op basis van brief en onderzoek. Je krijgt een link, geen gepubliceerde site.

Kan ik mijn eigen domein gebruiken?

Deze workflow koppelt geen domein. Hij geeft een gehoste pagina voor review; domein en publicatie zijn een aparte stap.

Verzint het testimonials of cijfers?

Nee. De prompt verbiedt verzinsels en eist dat elke bewering uit brief of opgehaalde pagina komt. Ongefundeerd blijft buiten.

Kan ik itereren?

Ja. Wijzig de brief in de LiveDoc en maak een nieuwe Landing Page-taak met de nieuwe context.

Maakt het eigen afbeeldingen?

Het doet structuur en tekst; eigen illustraties en brandmateriaal vallen buiten de workflow.

Wat kost een pagina?

Onderzoek en paginageneratie worden op gebruik gefactureerd; actuele tarieven staan op de prijspagina en de prompt vraagt goedkeuring voor uitgaven.

Gerelateerde workflows

Maak het van jou

Hetzelfde recept, aangepast aan hoe je echt oplevert.

Begin met een PDF

Stuur een PDF via multipart; de platform slaat het op als LiveDoc-resource en geeft het aan de paginataak.

Twee positioneringsversies

Maak twee taken met verschillende hoeken in dezelfde LiveDoc en vergelijk voor je kiest.

Hergebruik in een presentatie

Dezelfde LiveDoc kan een PPT-taak voeden, zodat pagina en deck hetzelfde verhaal vertellen.

De referentiepagina’s achter dit recept en de volgende stappen.