Backend para webs estáticas: blog, reseñas, pagos y área de cliente sin perder velocidad
Una web estática es rápida y barata de mantener, pero no tiene panel de administración, ni pago, ni dónde guardar una reseña. Construimos un único backend que añade todo eso a cualquiera de nuestras webs, mientras las páginas siguen siendo HTML generado de antemano.
El reto
Las webs de nuestros clientes son estáticas: cada página se genera de antemano y se sirve como un archivo HTML listo desde una CDN. Por eso cargan al instante y no tienen nada en el servidor que se pueda romper o atacar. Pero tampoco tienen base de datos ni panel de administración. El propietario no puede publicar un artículo por su cuenta, recoger una reseña, cobrar un pago ni dar a sus clientes habituales un área privada.
En lugar de pasar a WordPress y renunciar a la velocidad, construimos un backend común, la plataforma Yatoday, que reúne las partes dinámicas de todas las webs.
Un blog con redactor de IA
El blog se gestiona desde el panel de la plataforma, en todos los idiomas de la web, y la web estática lo lee a través de una API en el momento de generarse.
Para empezar un artículo, el propietario da al redactor de IA, basado en Anthropic Claude, un tema y un idioma, y puede elegir uno de sus artículos anteriores como referencia: el redactor sigue su tono y su estructura sin copiarlo. El borrador aparece en el editor a medida que se escribe: título, introducción, de tres a seis apartados y conclusión, en Markdown limpio. El propietario sigue conversando con él (“más corto”, “añade un ejemplo para propietarios de pisos”) y después retoca el texto a mano.
Las imágenes se suben en el panel y se guardan en almacenamiento en la nube. Antes de cada compilación, el proceso las descarga dentro de la web, y Astro las redimensiona y comprime como cualquier imagen local. La compilación publica además la lista de imágenes disponibles, que el panel ofrece para reutilizarlas.
Control SEO con sugerencias de IA
Cada artículo recibe una puntuación de 0 a 100 y una nota de la A a la F, por separado en cada idioma. Se revisa la longitud del título y de la descripción, dónde y con qué frecuencia aparece la palabra clave, los encabezados, las imágenes y su texto alternativo, los enlaces y la longitud de las frases. Cada problema se marca como crítico, aviso o consejo, con una explicación sencilla.
Un botón envía a Claude el artículo, sus problemas y una breve descripción del negocio. La respuesta trae un título SEO, una meta descripción y una palabra clave propuestos, además de mejoras ordenadas por prioridad, cada una con un ejemplo. Otro botón solo rellena el título y la descripción SEO. Las instrucciones evitan los malos consejos habituales: nada de un segundo H1 en el texto, porque el título ya se convierte en H1, y nada de “alárgalo” en artículos de 600 palabras o más.
Traducción con un clic
Desde el editor se traduce el artículo completo - título, extracto y texto - con DeepL, y cada negocio usa su propia clave. El resultado aparece en el editor del idioma de destino, para que el propietario revise términos y tono antes de publicar.
La web se recompila sola
Una web estática solo muestra un artículo nuevo después de recompilarse, y de eso se encarga la plataforma. Cualquier cambio en un artículo o una categoría marca la web como pendiente de publicar. Entre las 06:00 y las 22:00, la plataforma revisa cada hora y recompila las webs con cambios; una pasada nocturna a las 02:00 recoge el resto. Los artículos programados para una fecha futura se detectan en menos de cinco minutos desde su hora. Para los cambios urgentes, justo después de guardar aparece un botón para publicar en el acto.
Reseñas con moderación
Los visitantes pueden opinar sobre un producto, un servicio o el negocio en general; la web decide a qué se asocia cada reseña con una clave como service-plumbing. Las reseñas nuevas esperan moderación. El equipo recibe un aviso en tiempo real y las aprueba o rechaza una a una o en bloque.
El servidor filtra el spam: un campo oculto que rellenan los bots, un máximo de cinco reseñas por hora desde una misma dirección y ninguna segunda reseña del mismo correo sobre el mismo elemento en 24 horas. Los correos de aprobación o rechazo esperan 30 minutos y se agrupan: quien ve aprobadas diez reseñas en una sesión recibe un solo resumen, no diez mensajes. La API pública devuelve solo las reseñas aprobadas, con el nombre abreviado (“John D.”), junto con la nota media y el número de valoraciones por estrella. La web las lee al generarse.
Pagos en una web estática
Una página estática no puede cobrar con tarjeta, pero sí enviar al visitante a Stripe Checkout. La web manda a la plataforma el correo del cliente y los artículos; la plataforma crea un pedido pendiente, abre una sesión de pago de Stripe de 30 minutos y devuelve el enlace. Después, un webhook firmado de Stripe marca el pedido como pagado, cancelado o reembolsado.
No hace falta registrarse antes. Si el correo es nuevo, la plataforma crea la cuenta durante el pago y envía los datos de acceso junto con el pedido.
Para las tiendas, el carrito vive en el navegador y se conserva al recargar la página. Admite precios por cantidad: un producto puede tener tramos, de modo que el precio unitario baja al llegar a cierta cantidad, y el carrito guarda también el total sin descuento para poder mostrar el ahorro.
Área de cliente y programa de referidos
El área de cliente es un widget que cualquier web añade con una sola etiqueta de script. Funciona en español, inglés y ruso, toma el color de la marca y muestra al cliente sus pedidos, su saldo y sus recomendaciones.
El cliente comparte su código personal o recomienda a un amigo directamente, con su teléfono o correo. Si pide que un comercial llame al amigo, la recomendación entra en el CRM como un contacto nuevo con una tarea de llamada para el comercial una hora después; si no, simplemente queda registrada. A una persona ya recomendada no se la puede recomendar dos veces.
Cuando paga un cliente que llegó con un código de referido, la plataforma calcula la recompensa - un porcentaje o un importe fijo que define el negocio - y la retiene durante el plazo que este elija, 14 días por defecto. Un reembolso dentro de ese plazo la anula; pasado el plazo, una tarea diaria la libera. El cliente ve una cuenta atrás y solicita el cobro cuando el saldo supera un mínimo; el equipo lo aprueba y lo marca como pagado.
Un banner de cookies que guarda constancia
El banner de cookies forma parte de nuestra librería de componentes y es común a todas las webs. Pone Google Consent Mode v2 en “denegado” antes de que cargue cualquier script de Google y solo lo cambia cuando el visitante acepta. Cada web declara para qué usa las cookies, así que una web que solo mide visitas nunca puede pasar a Google un consentimiento publicitario, aunque se pulse “Aceptar todo”.
Cada decisión se guarda en la plataforma con un identificador anónimo de consentimiento, las categorías, la versión de la política, la página y el idioma, y cada cambio posterior queda en un historial: el negocio puede demostrar cuándo y cómo se dio el consentimiento. Un pequeño botón flotante permite al visitante ver la fecha y el identificador de su consentimiento y cambiar de opinión.
Altas al boletín
Un formulario de suscripción en cualquier web envía el correo a la plataforma con el nombre del formulario, por ejemplo “homepage-footer”, para que el negocio sepa cuál funciona. Una segunda alta no crea duplicados, y un correo que se dio de baja se reactiva.
Stack tecnológico
- Webs: Astro (generación estática) + @yatoday/astro-ui, en Cloudflare Pages
- Backend: Laravel 12 (PHP 8.4), MySQL, Redis, Laravel Reverb
- Panel de administración: Inertia + React
- IA: Anthropic Claude (redactor, sugerencias SEO), DeepL (traducción)
- Pagos: Stripe Checkout con webhooks firmados
- Área de cliente: Custom Element en React 19, tokens de Sanctum
- Imágenes: Cloudflare R2, sincronizadas en la compilación para que Astro las optimice
- Recompilación: webhooks a GitLab CI, Laravel Forge o cualquier URL
- Correo: PostmarkResultado
Nuestras webs estáticas conservan su velocidad y su escasa superficie de ataque, y aun así tienen lo que normalmente exige un CMS o una plataforma de tienda: un blog que el propietario lleva solo, con redactor de IA, control SEO y traducción; reseñas moderadas; pagos con tarjeta; áreas de cliente con recompensas por referidos, y constancia de cada consentimiento de cookies. Todo está en un único backend, así que cada función nueva llega a todas las webs a la vez.




