Felo API PlatformFelo API Platform

Contenido

Convierte un brief de producto en una landing page

Investiga la audiencia, guarda el brief en LiveDoc, crea una tarea de Landing Page desde ese contexto y consulta hasta que la página alojada esté lista.

Tiempo30 minutosNivelIntermedioActualizado2026-10-30
Para quiénFundadoresMarketing de productoEquipos de crecimiento

Copiar el prompt

Sustituye los campos entre corchetes y pégalo en Claude Code, Codex o cualquier IA con acceso a terminal. Instala el skill de Felo, pregunta antes de gastar créditos y ejecuta el flujo.

Crea una landing page para [producto] dirigida a [audiencia].

Objetivo: [registro / demo / lista de espera]. Tono: [tono]. Idioma: [idioma].
Material de partida: [URL del brief de producto o pega el brief]. Debe incluir: [puntos de prueba, precio, CTA].

Usa Chat y Web Fetch para investigar a la audiencia y dos o tres páginas de competidores. Guarda el brief y la investigación en un LiveDoc y crea una tarea Landing Page con ese LiveDoc como contexto. Consulta hasta que termine y devuelve el enlace de la página alojada.

Genera:
1. Un esquema de página: portada, prueba, funciones, objeciones, CTA.
2. El enlace de la página alojada.
3. El enlace del LiveDoc usado como contexto.
4. Una lista de comprobación de afirmaciones que hay que verificar.

Reglas:
- No inventes métricas, clientes, testimonios, precios ni afirmaciones de cumplimiento.
- Mantén cada afirmación rastreable hasta el brief o una página obtenida.
- Pregunta antes de gastar créditos en investigación o generación de página.
- No publiques ni conectes un dominio; devuelve el enlace alojado para revisión.
- Escribe el esquema en ./landing-page-outline.md y resúmelo en el chat.

La copia también incluye los pasos de instalación y las reglas de seguridad.

Lo que obtienes

Salida de ejemplo de una ejecución. No es generación en vivo.

Ejemplo de esquema de landing (extracto)

Esquema de landing page

Portada: «Investiga un mercado sin abrir treinta pestañas.» Subhead: Fuentes y un borrador de informe en una sola ejecución. Prueba: Tiempo ahorrado por informe; cada afirmación enlaza a una fuente. Funciones: Búsqueda, extracción de páginas, señal de X, evidencia de LiveDoc. Objeciones: «¿Inventará números?» No: dato ausente es «No disponible». CTA: Empieza con una pregunta.

Página: https://felo.ai/ai-page/... Contexto: https://felo.ai/livedoc/...

Las llamadas exactas

Para desarrolladores: el mismo flujo como código, en orden de ejecución.

Mostrar las llamadas reales a la API
  1. Investiga audiencia y alternativas

    Pregunta a Chat quién es la audiencia y qué necesita, y lee dos o tres páginas de competidores con 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 })),
      ),
    );

    Salida de ejemplo

    { "answer": "…", "resources": [{ "link": "https://example.com", "title": "…" }] }
  2. Guarda el brief en LiveDoc

    Crea el LiveDoc, añade el brief como documento y adjunta las páginas capturadas.

    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. Crea la tarea de landing page

    Envía a /v2/landing_page el prompt y el LiveDoc short_id y recibe el 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);

    Salida de ejemplo

    { "data": { "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }
  4. Consulta hasta terminar

    Revisa el historial hasta COMPLETED y lee 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);

    Salida de ejemplo

    {
      "task_status": "COMPLETED",
      "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ",
      "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ"
    }
  5. Revisa antes de compartir

    Comprueba afirmaciones, precios, textos legales y enlaces CTA, y luego comparte.

Qué incluye

  • Investigación de audiencia y competidores en páginas públicas
  • Brief e investigación en LiveDoc
  • Página alojada generada desde ese contexto
  • Lista de revisión de afirmaciones, enlaces y CTA

Qué no hace

  • Genera una página alojada, no publica un sitio ni conecta dominio propio
  • El texto generado necesita revisión humana antes de compartir
  • No hace tests A/B ni conecta analítica
  • No verifica afirmaciones ausentes del brief y la página
  • No crea logo, sistema de marca ni ilustraciones personalizadas

Preguntas

¿Qué genera?

Una landing page alojada en Felo, basada en el brief y la investigación. Recibes un enlace, no un sitio publicado.

¿Puedo usar mi dominio?

Este flujo no conecta dominios. Devuelve una página alojada para revisión; dominio y publicación son otro paso.

¿Inventa testimonios o métricas?

No. El prompt prohíbe invenciones y exige que cada afirmación venga del brief o de una página capturada.

¿Puedo iterar?

Sí. Cambia el brief en LiveDoc y crea una nueva tarea Landing Page.

¿Crea imágenes personalizadas?

Gestiona estructura y texto; ilustraciones y materiales de marca quedan fuera.

¿Cuánto cuesta una página?

Investigación y generación se facturan por uso; las tarifas están en la página de precios y el prompt pide aprobación antes de gastar.

Flujos relacionados

Hazlo tuyo

La misma receta, adaptada a cómo entregas de verdad.

Empieza con PDF

Envía un PDF en multipart; la plataforma lo guarda como recurso LiveDoc y lo pasa a la tarea.

Dos versiones de posicionamiento

Crea dos tareas con ángulos distintos en el mismo LiveDoc y compara antes de elegir.

Reutiliza en presentación

El mismo LiveDoc puede alimentar una tarea PPT para que página y deck cuenten la misma historia.

Las páginas de referencia detrás de esta receta y los siguientes pasos.