Skip to content

v0.1.7

Fecha de lanzamiento: 8 de mayo de 2026

Nuevas Funcionalidades

Almacenamiento de Assets en S3

  • Una nueva configuración opcional ASSETS_STORAGE_MODE=s3 permite que las tiendas envíen las cargas a un bucket compatible con S3 y las sirvan desde un CDN, en lugar del directorio local predeterminado data/files/
  • Cuando el modo S3 está activo, cada imagen subida se pre-genera en anchos comunes (200/400/600/800/1200) como variantes WebP y se almacena junto al original, para que la tienda pueda servir imágenes del tamaño correcto sin conversión en tiempo real
  • Un nuevo límite opcional ASSETS_MAX_BYTES controla el almacenamiento acumulado de archivos (tanto en modo local como S3), para que un flujo de cargas descontrolado no dispare la factura del bucket — los límites por carga (5 MB imagen / 50 MB vídeo) se mantienen sin cambios
  • Un script único migrate-assets-to-s3.mjs se incluye en la imagen Docker; ejecutarlo dentro de un contenedor sube los archivos locales existentes al bucket, reescribe las URLs almacenadas al CDN y pre-genera las variantes

Exportaciones CSV de Usuarios y Pedidos

  • La lista de Usuarios tiene un nuevo botón Exportar Usuarios que descarga la vista actual como CSV
  • La lista de Pedidos tiene un nuevo botón Exportar Pedidos que descarga la vista actual como CSV
  • Ambos endpoints están protegidos contra CSRF y tienen rate limiting

Imágenes Responsivas en la Tienda

  • Tarjetas de producto, páginas de producto, diapositivas de slideshow, secciones imagen-con-texto, mosaicos de colecciones y otras imágenes de la tienda ahora se renderizan con srcSet y sizes, alineados con anchos WebP pre-generados (200/400/600/800/1200)
  • Móviles y tablets cargan la variante más pequeña que cabe en su viewport en lugar de cargar siempre el asset de tamaño escritorio, reduciendo el peso de la página y mejorando los Core Web Vitals en conexiones lentas

Telemetría de Errores

  • Cuando la Telemetría de la Plataforma está activada en Configuración → Integraciones, las excepciones del servidor y los errores no manejados del cliente (window.onerror, rechazos de promesas no manejados) se reportan de forma anónima al equipo de Capyshop como eventos $exception
  • No se envía ningún dato personal, información de cliente ni detalle de la tienda — el interruptor de telemetría existente controla todo el pipeline, y desactivarlo también detiene todo el reporte de errores

Carga de Fuentes desde el Constructor de Páginas

  • Los títulos y subtítulos de slideshow, los títulos/subtítulos/cuerpo de imagen-con-texto y las fuentes del cuerpo de las secciones de texto elegidas en el constructor de páginas ahora se cargan automáticamente con la página
  • Anteriormente solo se cargaba la fuente global del tema, lo que significaba que las elecciones de fuente del admin en las secciones de la página de inicio caían silenciosamente en la fuente predeterminada en el primer render

Localización del Checkout de Stripe

  • Stripe Elements (el formulario de tarjeta integrado) ahora se monta en el idioma seleccionado por el cliente, para que las etiquetas de los campos, los mensajes de error y el botón "Pagar" coincidan con el resto del checkout

Mejoras

  • La carga de webfonts ya no bloquea el renderizado — la tienda se renderiza inmediatamente y la webfont entra en cuanto está cargada, eliminando el anterior "pantalla en blanco hasta que Google Fonts responda"
  • Target de build actualizado a navegadores modernos (Chrome 111+, Edge 111+, Firefox 128+, Safari 16+), de forma que el bundle ya no incluye polyfills ES6 que ningún navegador actual necesita
  • Tamaños refinados en los gráficos del dashboard, la vista general de analytics y el funnel de analytics para una visualización más clara
  • El pipeline de release de la imagen Docker se trasladó a un workflow dedicado activado por GitHub Releases, condicionado a una ejecución de CI verde en main para el mismo commit — sin más pushes de imagen ad-hoc

Correcciones de Seguridad

  • Todos los endpoints de la API que cambian estado (POST/PATCH/PUT/DELETE) ahora validan el Origin de la petición contra TRUSTED_ORIGINS y rechazan los desajustes; solo los webhooks de Stripe quedan exentos, ya que se autentican por firma en lugar de cookie
  • El proxy del asistente IA (/api/admin/chat, /api/admin/generate-text) y el endpoint de registro ahora cuentan cada llamada en el rate limit — no solo las fallidas — para defenderse del agotamiento de API de pago y del abuso de creación masiva de cuentas