Producto probado · en miniatura · ahora mismo
Podemos montar el flow completo de MyPublicGPT — desde el prompt a Gemini hasta el libro descargable — con lo que ya tenemos. Basado en estudio práctico, con artefactos reales y código funcionando.
Contenido
Decisión de modelo
Este fue el criterio: se trataba de encontrar un modelo asequible que genere JSON estructurado con calidad suficiente para orientar el resultado a ventas, con grounding en búsqueda real y con una capa de hosting que proteja la API key. Gemini 2.5 Flash gana por coste y por integración nativa con Google Search.
503 de forma sistemática — sin workaround posible. En Tier 1, Google evalúa solo la API Key. El error desaparece.no hay más429 — manejado en el Worker como aviso de mantenimiento. Decisión ejecutiva: aprobar fondos o esperar fin de mes. Sin facturas inesperadas.Capa de seguridad + prompt
El frontend nunca toca la API key de Google. El Worker actúa de proxy: valida CORS, inyecta la key desde los secrets encriptados de CF, y reenvía el prompt a Gemini. También sanitiza la respuesta — a veces Gemini devuelve JSON envuelto en markdown fences; el Worker lo limpia antes de enviarlo al cliente.
Frontend · CF Pages
POST con {nombre}
El simulador recoge el nombre del perfil y hace un fetch() al Worker.
Sin API key en el cliente. Sin CORS problem porque el origen está en whitelist.
Cloudflare Worker · Edge · Tier 1
Proxy + inyección de key
GEMINI_API_KEY vive encriptada en CF Secrets.
El Worker construye el payload: prompt de sistema, nombre del perfil,
y response_mime_type: "application/json" para forzar JSON limpio.
Desplegado en Tier 1 para SLA del 100% e IP aislada por API Key.
Gemini 2.5 Flash · Google AI
Grounding real en Google Search
Gemini ejecuta búsquedas en tiempo real antes de generar la respuesta. El perfil se analiza con datos actuales, no con entrenamiento estático. Grounding disponible en Tier 1 — en tier gratuito producía timeouts por IPs compartidas.
Response · sanitizado
JSON estructurado entregado
El Worker hace strip de posibles fences de markdown (```json ... ```),
parsea el JSON y lo devuelve al frontend como application/json limpio.
Schema · output de Gemini
Un informe pesa ~2 KB. El schema tiene cinco bloques de contenido más una conclusión y un epíteto de 2–4 palabras que condensa la identidad digital del perfil. Cada bloque está orientado a mostrar el valor del servicio y a abrir la conversación de venta.
response.json · schema v2
{
"titular": {
"nombre": "Cayetana Guillén Cuervo",
"epiteto": "Presencia sólida · culturalmente arraigada", // 2-4 palabras
"titulares": [ "...", "...", "..." ] // 5 frases
},
"narrativa": {
"frases": [ "...", "..." ], // narrativa pública
"identidad": "Presencia coherente en..." // resumen de identidad
},
"senales": [ // riesgos detectados
{ "n": 1, "texto": "Entrevistas antiguas..." }
],
"identidad": {
"plataformas": [ "Instagram", "X", "RTVE" ],
"coherencia": "Alta"
},
"oportunidades": [ // gancho de venta
{ "n": 1, "texto": "Unificar biografías..." }
],
"conclusion": "Huella sólida y coherente..."
}
conclusion + epitetoDel texto al libro
El JSON contiene texto estructurado. Con un fragmentador JS que mapea cada campo a un slot de layout, podemos renderizar ese mismo texto como un documento editorial con tipografía, jerarquía y color — y entregarlo como PDF descargable. Dos artefactos de wireframe documentan cómo se llegó a esto.
window.open().@media print optimizado.Válido para cualquier perfil
Arquitectura de almacenaje
No queremos hostear las creaciones de los usuarios — demasiado peso, demasiada gestión. Pero el usuario tiene que percibir que "sus libros están ahí". La solución: almacenar solo el JSON (~2 KB por informe) y renderizar el libro client-side on demand cuando el usuario hace click.
"Para el usuario, los libros existen. Para nosotros, solo guardamos un JSON."
Zero-server (localStorage)
Cloudflare Workers KV
Por qué esta arquitectura escala
UX flow · desde el punto de vista del usuario alpha
// El usuario ve su "biblioteca" [ { "fecha": "2026-06-02", "icono": "📄", "epiteto": "Presencia sólida..." }, { "fecha": "2026-05-26", "icono": "📄", "epiteto": "Narrativa en construcción" } ] // Al hacer click → fetch del JSON desde KV → render client-side → window.open() → PDF // Sin thumbnail · sin almacenar el HTML · el libro se genera cada vez en décimas de segundo
Todo lo que se necesita para lanzar MyPublicGPT como feature existe y funciona. Lo he probado en miniatura, paso a paso, con artefactos que se pueden ver, probar y enlazar.
Siguiente paso: conectar las piezas en producción. Worker Tier 1 con KV. Sidebar de biblioteca en el perfil del usuario. Render on demand al click. Feature limitada a alpha/alpha-pro. Un JSON de 2 KB por semana por usuario. Coste: desde 1€/mes para 50 usuarios. Sin sorpresas, con Spend Caps de Google AI Studio.