Skip to content
DEMO MODE
Get Template
dev.designer

Changelog

The constant evolution of our template, documented step by step.

Changelog

Todos los cambios notables en este proyecto serán documentados en este archivo.

[3.6.5] - 2026-08-16 (Documentación del template: local vs Sanity más clara)

Cambiado

  • La documentación interna del template dejaba la decisión “¿contenido local o Sanity CMS?” para el final, mezclada con la explicación de las colecciones locales. Ahora es una decisión explícita desde el principio, y cada modo tiene su propia guía separada.
  • El diagrama de estructura de carpetas ahora incluye la carpeta studio/ (Sanity Studio) cuando corresponde, y agregamos soporte en polaco a la portada de la documentación.

[3.6.3] - 2026-08-16 (Documentación del template: mejor experiencia mobile)

Cambiado

  • La documentación interna del template (_docs/, no visible en tu sitio publicado) tenía un menú lateral que no se podía usar bien en el celular. Ahora se abre como un panel deslizable, con buscador para encontrar secciones rápido y botón para volver arriba.
  • Se quitó la dependencia de fuentes externas en esa documentación, para que funcione igual de bien sin conexión.

[3.6.2] - 2026-08-16 (Auditoría final: bugs corregidos)

Corregido

  • Cuando todo tu contenido cabe en una sola página (el caso más común, sobre todo recién instalado), el sitio generaba de todas formas una segunda página vacía en Proyectos y Blog, con un mensaje de “aún no hay contenido” incorrecto. Ya no pasa.
  • El botón de modo claro/oscuro se anunciaba siempre en inglés para lectores de pantalla, incluso en un sitio en español o polaco. Corregido.
  • Limpieza general de textos y comentarios internos que ya no se usaban.

[3.6.1] - 2026-08-16 (Refuerzo de seguridad, sin cambios visuales)

Una pasada de seguridad de fondo — nada se ve distinto, pero el sitio quedó más protegido. Detalle técnico completo en SECURITY-REVIEW.md.

Corregido

  • Un post de blog con un título muy específico (con código malicioso escondido) podía, en teoría, ejecutar ese código en la página — ya no.
  • Reforzadas las cabeceras de seguridad del sitio (protección extra contra ataques comunes).
  • Actualizadas decenas de dependencias internas con fallas conocidas — la gran mayoría solo se usan al construir el sitio, nunca en producción, pero se actualizaron igual.

[3.6.0] - 2026-08-15 (URLs legales ya no en español fijo)

Cambiado

  • Las URLs de privacidad/términos dejaron de estar fijas en español: eran /legal/privacidad y /legal/terminos sin importar el idioma del sitio. Ahora son /legal/privacy y /legal/terms.
  • Las URLs viejas siguen funcionando (redirigen automáticamente) — no se rompe ningún link existente.

[3.5.0] - 2026-08-15 (Studio como panel de administración completo)

Añadido

  • siteSettings dividido en 8 documentos: cada sección (Perfil, Identidad, SEO, Navegación, Contacto, Apariencia, Analytics, Idiomas) ahora tiene su propia entrada en el menú del Studio, en vez de tabs dentro de un formulario gigante.
  • Selector de proveedor de analytics: elegís GA4/GTM/Plausible/Umami y solo ves los campos que necesitás completar.
  • Preview de colores en vivo, radios en vez de dropdowns, validaciones de formato en varios campos.
  • Dashboard de inicio: accesos directos a cada sección + checklist de estado del sitio.
  • Vista previa del sitio sin salir del Studio (con nota sobre el límite de X-Frame-Options).
  • Título de la portada (Hero) ahora editable desde Sanity — antes era texto fijo en el código.
  • Nombre de la persona ahora editable desde el Perfil.
  • Nueva sección “Secciones y bloques”: los títulos y subtítulos de cada sección de la portada (Especialidades, Stack, Experiencia, Proyectos, FAQ, CTA final) y de los bloques reutilizados (newsletter, sidebar de servicio, incluidas sus 3 “garantías”) ahora se pueden editar desde Sanity — antes eran texto fijo del código.

Corregido

  • Se arregló un campo del footer que se guardaba pero nunca se mostraba en el sitio.
  • Se arreglaron dos secciones que ignoraban configuraciones ya puestas en Sanity: el botón de agendar (Cal.com) y los links de redes sociales del bloque de newsletter.
  • El formulario de newsletter del footer no funcionaba en absoluto — mostraba éxito pero nunca enviaba el email a ningún lado. Ahora se puede conectar a un proveedor real (desde .env o desde Sanity) y, si no está configurado, avisa honestamente en vez de fingir.
  • Las fechas y el idioma reportado a redes sociales (og:locale) no cambiaban según el idioma de la página en sitios con más de un idioma activo — ahora sí.
  • Bug importante: la descripción SEO por defecto y la imagen social por defecto que configurabas en Sanity no se aplicaban en NINGUNA página, ni siquiera la portada — un error de código hacía que ese override nunca se alcanzara. Ya corregido y verificado.
  • El texto del footer aparecía duplicado en pantalla (una vez en su propia línea, otra metido en el copyright).
  • El logo de texto en el header/footer se veía roto (“Acme Studio.” con un punto suelto) si ponías un nombre de sitio sin punto — ahora se ve bien con o sin punto.
  • Mejora de accesibilidad: el campo de email del newsletter ahora tiene nombre accesible para lectores de pantalla.

Añadido

  • Imagen de portada opcional en cada entrada de blog: antes todas las entradas compartían la misma imagen al compartirse en redes sociales. Ahora cada post puede tener la suya.

[3.4.0] - 2026-08-15 (UX del Studio: Selectores de Color/Ícono, Librería de Medios, Toggle de Idioma)

Añadido

  • @sanity/color-input: los colores de marca y theme-color en siteSettings ahora son selectores visuales en vez de campos de texto donde había que escribir el HSL a mano.
  • sanity-plugin-iconify: el ícono de cada servicio y de cada red social ahora se elige con un buscador visual (limitado al set Phosphor que ya usa el sitio) en vez de escribir "ph:xxx" a mano.
  • sanity-plugin-media: mejor buscador/grid para todos los campos de imagen.
  • siteSettings → Idiomas activos / Idioma por defecto: ahora se puede elegir qué idiomas están activos y cuál es el default directamente desde Sanity (antes solo en user.config.ts). Aplica en el próximo build/deploy, no es instantáneo para visitantes ya en el sitio.

Nota de migración

Si ya tienes servicios o redes sociales cargados en Sanity, el ícono va a aparecer como “valor desactualizado” en el Studio hasta que lo vuelvas a seleccionar con el nuevo selector — el sitio sigue funcionando bien mientras tanto.

[3.3.1] - 2026-08-15 (Pase de Completitud Sanity/Multi-idioma)

Corregido

  • El manifest PWA ahora respeta los overrides de Sanity: antes leía nombre/descripción/color de tema directo de la config estática, ignorando cualquier valor puesto en siteSettings. Ahora resuelve a través del override (con el mismo fallback de siempre).
  • apple-touch-icon ahora es editable desde Sanity, con fallback al ícono estático si se deja vacío.
  • contactFormEndpoint y las URLs de script de Plausible/Umami autoalojado ahora son editables desde Sanity: antes solo los IDs se podían cambiar desde Sanity, pero la URL del script seguía hardcodeada en el código — un comprador que cambiara de proveedor de analytics igual necesitaba tocar código.
  • Títulos de página (<title>) convertidos a claves de src/i18n.ts: varias páginas (contacto, blog, proyectos, servicios, inicio, 404, 500, changelog, legal) tenían el título del navegador hardcodeado en español sin importar el idioma visitado — en un sitio multi-idioma, /en/ o /pl/ seguían mostrando el título en español. También se corrigió texto de CTA hardcodeado en la página de servicios y contacto.
  • El JSON-LD de FAQ en la portada ahora filtra por idioma, igual que la sección visible de preguntas frecuentes.
  • public/llms.txt actualizado para reflejar las 8 collections, el customizer siteSettings y el modelo multi-idioma.

[3.3.0] - 2026-08-15 (Site Settings de Sanity y Multi-idioma Real)

Añadido

  • siteSettings ampliado a un “customizer” completo: antes solo cubría el perfil (headline/bio/rol/avatar/hero), ahora también identidad y marca (nombre del sitio, favicon, logos de header/footer, imagen OG, colores de marca), SEO (sufijo de título, descripción por defecto, handle de Twitter, theme-color), menú de navegación y enlaces del footer, redes sociales, contacto, toggles de UI (picker de tema, banner de compra, cursor custom, fondos), paginación y IDs de analytics — todo editable desde Sanity, organizado en pestañas, y cada campo cae de vuelta a su valor de user.config.ts / template.config.ts si se deja vacío. A propósito no incluido: la licencia (showAttribution/buyBannerUrl) — eso se queda en código.
  • Multi-idioma real: site.locales (array) + site.defaultLocale reemplazan el antiguo site.lang único. Por defecto sigue siendo un solo idioma — mismo comportamiento de siempre. Agregar más códigos de idioma genera rutas reales por idioma (/, /es/, /pl/). Cada collection de contenido gana un campo language opcional — sin ese campo, el contenido se muestra en todos los idiomas (compatible con todo el contenido existente). Las páginas legales resuelven por idioma con fallback automático si falta la traducción.

Añadido

  • Modo CMS Sanity opcional, cubriendo todo el sitio: cada collection de contenido —blog, projects, testimonials, services, faq, stack, experience y las páginas legal— ahora puede venir opcionalmente de Sanity en vez de archivos locales, con un solo toggle de configuración (PUBLIC_CMS_PROVIDER=sanity en .env). No es una migración obligatoria: por defecto sigue en local, y sin cambios de .env el template se comporta exactamente igual que antes (verificado: mismo resultado de build con el toggle apagado, tanto en la versión inicial de 3 collections como en este alcance ampliado). changelog sigue siendo siempre local — es el historial de versiones del propio template, no contenido tuyo. Este modo no agrega multi-idioma de contenido — ver la sección “CMS (Sanity, opcional)” en README.md / _docs/guide.html para el checklist completo y los trade-offs.
    • stack (badges de tecnologías) y experience (experiencia laboral) —antes arrays hardcodeados en Stack.astro/Experience.astro— ahora son collections de contenido reales, locales por defecto, con el mismo modelo de un solo idioma que el resto de las collections (antes experience era la única excepción que se traducía automáticamente vía src/i18n.ts; esa inconsistencia ya no existe).
    • legal (Política de Privacidad / Términos de Servicio) —antes HTML hardcodeado en src/pages/legal/*.astro— ahora es una collection de contenido.
    • Nuevo override opcional siteSettings (documento singleton) para el headline/bio/rol/avatar/imagen del Hero, normalmente leídos de user.config.ts. Si dejas un campo vacío en Sanity, se usa el valor de user.config.ts como respaldo — no hizo falta tocar los 24+ archivos que importan siteConfig.
    • Schema del Studio (studio/) ampliado con service, faqItem, stackItem, experienceItem, legalPage y el singleton siteSettings.
    • scripts/import-to-sanity.mjs ampliado para migrar todo lo anterior.

Cambiado

  • Astro actualizado a 7.1.6 (desde 7.0.6), junto con @astrojs/mdx, @astrojs/cloudflare, @astrojs/check, tailwindcss/@tailwindcss/vite — todos bumps menores/patch, sin cambios rompientes, verificado con build limpio.

Corregido

  • OOM en astro check: el tsconfig.json raíz sobreescribía sin querer la exclusión implícita de node_modules de TypeScript, y una vez que studio/ existió (con su propio node_modules grande), astro check intentaba parsearlo todo y agotaba el heap. Corregido excluyendo node_modules y studio explícitamente.

[3.1.0] - 2026-08-04 (Analytics, Fix de Docs y Separación de Configuración)

Añadido

  • Google Analytics 4 y Google Tag Manager: Nuevas variables PUBLIC_GA_MEASUREMENT_ID y PUBLIC_GTM_ID en .env — mismo patrón sin tocar código que Plausible/Umami. Ambos pueden convivir con los proveedores existentes. Se actualizó el CSP en public/_headers (script-src/frame-src) para permitir googletagmanager.com.
  • src/user.config.ts / src/template.config.ts: El antiguo site-config.ts se dividió en un archivo tuyo (identidad, SEO, contacto, redes, navegación, branding, toggles de UI) y uno del template (licencia, paginación, motor de tema, cableado de analytics). src/site-config.ts ahora es una fachada que combina ambos — el código existente que hace import { siteConfig } from '@/site-config' sigue funcionando sin cambios. Ver la nueva sección “Actualizando el template” en README.md.
  • pnpm run clean-content: Script opcional (scripts/clean-content.mjs) para quien quiera partir de cero eliminando el contenido de ejemplo (blog, proyectos, servicios, testimonios, FAQ). Nunca borra imágenes, para que el sitio nunca quede con medios rotos. El contenido de ejemplo se sigue incluyendo por defecto para que los compradores vean la plantilla funcionando.

Corregido

  • Selector de idioma roto en file://: _docs/guide.html y _docs/index.html usaban fetch() para cargar las traducciones, lo cual Chrome bloquea por CORS al abrir el archivo directamente (sin servidor local). Las traducciones ahora están incrustadas como objetos JS, así que el selector funciona tanto abriendo el HTML directo como sirviéndolo.
  • Versión hardcodeada en el footer: footer.text mostraba un string de versión fijo ('v2.9.0') que quedaba desactualizado en cada release. El footer ahora lee la versión directamente de package.json.
  • Labels de estadísticas en el portal de docs: _docs/index.html mostraba literalmente “undefined” en los 4 stats de la portada por un bug de acceso a la traducción (clave plana contra un objeto anidado).
  • _docs/guide.html actualizado a v3.1.0: reflejaba la estructura anterior a esta versión (badges, referencias a site-config.ts, tabla de Analytics sin GA4/GTM, árbol de archivos). Se actualizó el contenido en los 3 idiomas (ES/EN/PL) y se corrigieron dos variantes de callout (.callout-success, .callout-warning) que no tenían estilos definidos. Se agregaron estados de foco para navegación por teclado, soporte de prefers-reduced-motion, y scroll horizontal en tablas para mobile.

[3.0.1] - 2026-07-17 (Correcciones de CSP y llms.txt)

Corregido

  • CSP bloqueando Cloudflare Web Analytics: Se agregó https://static.cloudflareinsights.com a script-src en public/_headers — el script del beacon estaba siendo bloqueado por la Content-Security-Policy al activar Cloudflare Web Analytics
  • Formato de enlaces en llms.txt: Se convirtió la sección de Links a sintaxis Markdown ([texto](url)) para que los crawlers de agentes de IA los reconozcan correctamente; también se actualizaron referencias desactualizadas a Astro 6 / Tailwind 3 que quedaron de la actualización 3.0.0

[3.0.0] - 2026-07-05 (Astro 7 y Tailwind 4 — Cambios Importantes)

Cambiado

  • Actualización a Astro 7: Motor actualizado a Astro 7.0.6 (nuevo compilador en Rust, Vite 8) junto con las integraciones oficiales de MDX, sitemap y Cloudflare
  • Migración a Tailwind CSS v4: Reemplazada la integración deprecada @astrojs/tailwind por @tailwindcss/vite. La configuración de tema ahora vive en src/styles/global.css
  • Despliegue en Cloudflare: Verificado que el despliegue estático existente (Workers + wrangler deploy) sigue funcionando sin cambios

Nota para quienes personalizaron su copia de la plantilla

Si tienes tu propia copia de esta plantilla con estilos personalizados, revisa la guía de migración técnica en CHANGELOG.md (raíz del repositorio) antes de actualizar — incluye los pasos para migrar tu configuración de Tailwind y clases utilitarias renombradas.

[2.9.3] - 2026-07-04 (Mejoras de Configuración y Despliegue)

Añadido

  • Integración de Analytics: Nueva sección analytics en site-config.ts — agrega tus credenciales de Plausible o Umami en .env y el script de tracking se carga automáticamente, sin tocar código
  • Branding Configurable: El crédito del footer y el link del banner promocional ahora viven en una sola sección licensing en site-config.ts, en lugar de estar hardcodeados en los componentes

Corregido

  • Variable de Entorno del Formulario de Contacto: PUBLIC_CONTACT_FORM_ENDPOINT en .env ahora es reconocida correctamente por site-config.ts (antes solo funcionaba el valor contact.formEndpoint escrito directamente en el archivo)
  • Confiabilidad de pnpm install: Se corrigió un valor inválido en pnpm-workspace.yaml que podía hacer fallar la instalación de dependencias en algunos entornos
  • Recordatorio de Despliegue: Se añadió un comentario en wrangler.jsonc para renombrar tu proyecto antes de desplegar en tu propia cuenta de Cloudflare

Cambiado

  • Repositorio Más Liviano: Se eliminaron archivos de tooling de desarrollo sin uso que habían sido commiteados por error, reduciendo el tamaño del repositorio
  • Headers de Seguridad Más Estrictos: Se removieron dominios de terceros sin uso del Content-Security-Policy por defecto en public/_headers
  • Checklist de Despliegue: Se añadieron recordatorios para reemplazar el dominio de demo en public/llms.txt y public/.well-known/security.txt antes de publicar

[2.9.2] - 2026-07-02 (Soporte de Despliegue en Cloudflare Workers)

Añadido

  • wrangler.jsonc: Se agregó configuración de Wrangler en la raíz del proyecto (assets.directory: "./dist", not_found_handling: "404-page") para que la plantilla despliegue correctamente a través del flujo unificado más reciente de Cloudflare (“Workers” con integración Git), no solo Pages clásico
  • Dependencia y scripts de wrangler: Añadida wrangler como devDependency explícita, más los scripts pnpm run deploy (wrangler deploy) y pnpm run deploy:preview (wrangler versions upload)

Cambiado

  • Documentación de Despliegue: El README.md ahora documenta ambos flujos del dashboard de Cloudflare — Pages clásico (solo Build command + Output directory) y el flujo unificado de Workers (Build command + Deploy command + Non-production branch deploy command) — ya que cuál ve cada cuenta depende de cuándo fue creada

[2.9.1] - 2026-04-21 (Mobile Reveal Fix)

Corregido

  • Contenido Invisible en Móvil: Todo el contenido de las páginas quedaba en opacity: 0 en navegadores móviles porque <main> tenía la clase .reveal, lo que significaba que el wrapper principal de cada página arrancaba oculto y dependía del Intersection Observer para hacerse visible. Eliminada la clase .reveal del <main> en BaseLayout.astro — las animaciones reveal a nivel de sección no se ven afectadas
  • Race Condition en Reveal: initReveal() ahora verifica si un elemento .reveal ya está en el viewport al inicializarse y aplica la clase active inmediatamente, en lugar de depender únicamente del Intersection Observer diferido. Evita que el contenido quede invisible cuando el observer se inicializa después de que los elementos ya son visibles

[2.9.0] - 2026-04-20 (Customer Feedback & Polish)

Añadido

  • Logo Configurable en Header: Nueva sección header en site-config.ts con soporte para logoType: 'text' | 'svg' | 'image', permitiendo usar un logo SVG o imagen en lugar del nombre de texto
  • Logo Configurable en Footer: Nueva sección footer en site-config.ts con soporte para logoType: 'text' | 'svg' | 'image', logoSvg, logoImage, logoAlt y text. El componente Footer.astro ahora renderiza condicionalmente SVG, imagen o texto según la configuración, en paridad total con el header
  • Toggle de Patrón de Fondo: Nueva opción ui.showBackgroundPattern en site-config.ts para activar/desactivar el patrón de puntos (dot grid) del fondo. Establecer en false para un fondo blanco limpio
  • Toggle de Orbes (Aurora): Nueva opción ui.showBackgroundOrbs en site-config.ts para activar/desactivar los orbes de color del fondo. Combinar con showBackgroundPattern: false para un fondo completamente limpio y blanco
  • Control de Tema (Dark/Light): Nueva sección theme en site-config.ts con allowToggle (boolean) y defaultMode (‘light’ | ‘dark’). Permite bloquear el tema y forzar un modo específico, ignorando las preferencias del navegador del usuario

Corregido

  • Visibilidad del Autor en Testimonios: Eliminadas las clases CSS translate-y-4 opacity-0 que ocultaban el footer de testimonios. El autor, rol y empresa ahora son visibles inmediatamente sin depender de animaciones externas
  • Refactor enableDarkMode: Reemplazada la opción ui.enableDarkMode por la nueva sección theme con controles más granulares (allowToggle y defaultMode)
  • i18n Completa — Cobertura Total del Sitio: El sistema de traducción ahora cubre el 100% de los strings de UI visibles. Se corrigieron más de 80 strings hardcodeados en español distribuidos en 30+ archivos. Componentes actualizados: Hero, ContactForm, FAQ, Newsletter, NewsletterWide, ContactCTA, Stack, Experience, Expertise, RecentProjects, Testimonials, ServiceSidebar, PostAuthor, PostCard, ServiceCard, ServiceCardSmall, ThemePicker, ContentPagination, Header, Footer. Páginas: 404, 500, contact, services/index, services/[slug], blog/index, blog/page/[page], projects/index, projects/page/[page], projects/[slug], blog/[slug]. Los navigation y legal en site-config.ts ahora usan claves i18n. Fechas localizadas con siteConfig.site.locale en lugar de 'es-ES' hardcodeado. Strings de scripts inline (enviando formulario, tema copiado) pasan por data-* attributes. Más de 100 claves nuevas añadidas a src/i18n.ts para ES/EN/PL

Cambiado

  • Comentarios Internacionalizados: Todos los comentarios en site-config.ts traducidos del español al inglés para mejor accesibilidad a clientes globales
  • Documentación Mejorada: Agregada nota de prerrequisito sobre instalar pnpm antes de ejecutar comandos en el portal de documentación
  • Soporte i18n Polaco: Agregadas traducciones al polaco (pl) en src/i18n.ts. El idioma se determina automáticamente por la configuración site.lang, soportando español, inglés y polaco
  • Documentación Bilingüe: El portal de documentación (_docs/) ahora soporta español e inglés con un selector de idioma en index.html y guide.html. La preferencia de idioma se guarda en localStorage

[2.8.1] - 2026-04-11 (PostAuthor Avatar Fallback)

Corregido

  • Fallback de Avatar en PostAuthor: Añadido handler onerror para mostrar las iniciales cuando la imagen del avatar no existe o falla al cargar (404)

[2.8.0] - 2026-04-11 (Full Config Activation & A11y Hardening)

Añadido

  • Content Pagination (Modo Página): ContentPagination ahora soporta navegación numérica además de anterior/siguiente, con aria-current="page" para accesibilidad
  • Rutas Paginadas: /projects/page/[page] y /blog/page/[page] generadas vía getStaticPaths
  • Optimización GEO: public/llms.txt para descubrimiento por motores de búsqueda con IA
  • Base i18n: src/i18n.ts con diccionarios ES/EN y función helper t()
  • Configuración de Entorno: .env.example con variables documentadas para formularios y analytics
  • Generador de Iconos PWA: scripts/generate-pwa-icons.mjs para producir PNGs desde favicon SVG
  • CHANGELOG.md en raíz: Formato Keep-a-Changelog para visibilidad en GitHub

Cambiado

  • Activación de profile.bio: Ahora se renderiza como párrafo descriptivo del Hero en lugar de texto hardcodeado
  • Activación de content.projectsPerPage: Controla el slicing y paginación en /projects
  • Activación de content.postsPerPage: Controla el slicing y paginación en /blog
  • Activación de ui.enableViewTransitions: <ClientRouter /> ahora se renderiza condicionalmente
  • Activación de ui.enableDarkMode: El botón de tema se oculta completamente cuando es false
  • ContactForm con Backend Real: Envío vía fetch() a Formspree/Cloudflare Forms, con honeypot anti-spam, overlay de error e indicación de configuración
  • Validación de Newsletter: Verificación de formato email con feedback visual de error (anillo rojo)
  • Alt Text de Hero: Ahora descriptivo — incluye nombre, rol y contexto para SEO/A11y

Corregido

  • robots.txt duplicado: Eliminado public/robots.txt estático, manteniendo solo la ruta API dinámica
  • Zod Alpha: Migrado de 4.0.0-alpha.1 a 3.24.2 estable con API de schemas actualizada
  • substr() obsoleto: Reemplazado por substring() en componentes Input y Textarea
  • Hints de JSON-LD: Añadido is:inline explícito para silenciar warnings de Astro
  • A11y de Header Socials: Añadido <span class="sr-only"> para coincidir con patrón del Footer
  • Tipado en Button.astro: Reemplazado [x: string]: any por [x: string]: unknown
  • Documentación de debug-mock.js: Añadido JSDoc explicando su propósito y cómo reemplazarlo

Seguridad

  • security.txt actualizado: URLs canónicas corregidas, expiración extendida a 2027-12-31

[2.7.0] - 2026-04-07 (Security & SEO Infrastructure)

Añadido

  • Cloudflare Security Headers: Implementación de archivo _headers nativo para Cloudflare Pages, incluyendo HSTS, CSP (Content Security Policy), X-Frame-Options y Permissions-Policy.
  • Security Standards (Security.txt): Incorporación de security.txt en .well-known/ para seguir los estándares de reporte de vulnerabilidades.
  • Robustez de Metadatos: Estandarización de placeholders sociales en site-config.ts para una personalización más intuitiva y profesional por parte del usuario final.

Mejorado

  • SEO Core Hardening: Actualización de robots.txt con referencias de sitemap generalizadas y optimización de meta-tags en el componente SEO para evitar duplicidades de símbolos.

[2.6.0] - 2026-04-04 (Minimalist Master Update)

Añadido

  • Rediseño de Contacto v2: Transformación total de la página de contacto a un esquema de columna única ultra-limpio.
  • Minimalismo Extremo: Eliminación de “ruido visual” (bordes de contenedores, sombras pesadas y fondos secundarios) para una experiencia más “página en blanco” profesional.
  • Enlaces de Texto Puros: Sustitución de cajas de iconos por una fila de enlaces rápidos (Email · LinkedIn · Calendario) con micro-interacciones sutiles.

Mejorado

  • Arquitectura de Botones: Nueva variante secondary incorporada al componente Button.astro para mayor flexibilidad en llamadas a la acción.
  • Build Core Integrity: Resolución de errores críticos de TypeScript relacionados con exactOptionalPropertyTypes en ContentHeader y BaseLayout.

[2.5.0] - 2026-04-04 (Services Experience Update)

Añadido

  • Página de Índice de Servicios: Creación de la ruta /services (index.astro) para centralizar la oferta de valor y mejorar el SEO jerárquico.
  • Componente ServiceCard: Extracción de la lógica visual de especialidades a un componente independiente y reutilizable con animaciones premium.

Mejorado

  • Estructura de Navegación: Migración del enlace “Servicios” de un ancla interna (/#services) a una página real (/services) para un flujo de usuario más robusto.
  • Conversión de Negocio: Nueva sección de CTA (Call to Action) estratégica al final del listado de servicios.

[2.4.0] - 2026-04-04 (Architecture & Modularity Update)

Añadido

  • ContentHeader Maestro: Sistema unificado de cabeceras para Blog, Proyectos y Servicios. Controla títulos, descripciones y navegación “back-to” desde un solo átomo visual.
  • FAQ & Testimonial Atoms: Fragmentación de secciones complejas en FAQItem y TestimonialItem para una edición 100% modular y limpia.
  • Reading Progress Pro: Componente dedicado para la barra de progreso de lectura superior con lógica de scroll optimizada.

Mejorado

  • Cero Código Hardcodeado: Eliminación de los últimos vestigios de UI inline en páginas de detalle, moviendo todo a widgets reutilizables (ServiceSidebar, PostAuthor, etc.).
  • Unificación de Navegación: Componente ContentPagination que centraliza los botones “Siguiente/Anterior” para todo el contenido dinámico del sitio.
  • Optimización de Iconos: Sustitución de SVGs en línea por el motor de astro-icon en Testimonios y Navegación para una personalización más ágil.

[2.3.0] - 2026-04-04 (Structural Rebirth)

Añadido

  • Organización Enterprise: Nueva estructura de carpetas: /ui (primitivas), /cards (datos), /sections (bloques) y /navigation (estructura global).
  • Extraídos: Componentes PostCard, Footer y ExperienceItem para desvincular la lógica de layout de las páginas.

[2.2.0] - 2026-04-04 (Elite Experience Update)

Añadido

  • Custom Cursor Pro: Nuevo sistema de puntero inteligente que reacciona a elementos interactivos con estados de expansión y halo. Desactivable desde site-config.ts.
  • Magnetic Buttons: Implementado efecto de atracción magnética para botones principales, mejorando enormemente la sensación táctil y premium del sitio.
  • Project SEO (Deep Schema): Integración de esquemas Schema.org/CreativeWork específicos para cada proyecto, permitiendo a los buscadores entender cada trabajo como una entidad única.

Mejorado

  • Retina Optimization: Implementada la generación automática de imágenes a doble densidad (densities={[1, 2]}) en tarjetas de proyectos y hero para una nitidez absoluta en pantallas de alta gama.
  • Form UX Polish: Rediseño de los campos Input y Textarea con sombras internas, estados de foco con anillos suaves y una base de color secundaria para mayor profundidad.
  • Performance LCP: Forzada la carga temprana (loading="eager") de la imagen principal del Hero para mejorar las métricas de Core Web Vitals.

[2.1.0] - 2026-04-04 (Core Polish Update)

Añadido

  • Advanced SEO Engine: Inyección automática de esquemas JSON-LD (FAQPage y Service) en las páginas correspondientes para mejorar la visibilidad en buscadores.
  • Reveal Animations: Sistema ligero basado en Intersection Observer que permite que las secciones aparezcan con un suave fundido al hacer scroll.
  • Public Assets: Incorporación de un archivo robots.txt optimizado y configurado por defecto.

Mejorado

  • Web Accessibility (WCAG): Refuerzo integral de etiquetas ARIA y gestión de foco en los componentes ThemePicker (soporte para tecla Escape) y Header (menú móvil accesible).
  • Privacy & Perf (Fontsource): Migración de fuentes externas (Google Fonts) a fuentes locales servidas por el proyecto para mayor velocidad y cumplimiento de normativas de privacidad.
  • Glassmorphism 2.0: Refinamiento estético de las capas de cristal y bordes HSL con sombras sutiles para una sensación más premium.

Corregido

  • Pnpm Protocol: Migración forzada de comandos de construcción de npm a pnpm para garantizar la consistencia en el despliegue a Cloudflare.

[2.0.0] - 2026-03-31 (Enterprise Protocol Update)

Añadido

  • Documentation Hub: Nuevo portal de documentación (_docs/index.html) que centraliza The Guide y The Setup Bible en una interfaz unificada.
  • Visual Pedagogy: Inyección completa e interactiva de capturas de pantalla de la UI dentro del manual de usuario para acelerar la comprensión del código (guide.html).
  • Dynamic Projects Layout: Soporte oficial escalado de imágenes en componentes Astro absolute inset-0 w-full h-full para las tarjetas de proyectos y el detalle profundo, garantizando que abarcan el 100% de la caja 16:9 sin letterboxing residual.
  • Enterprise Licensing: Menciones oficiales a la factoría “Zutra.agency” en el ecosistema base, incluyendo package.json y el footer del Layout principal, cerrando el estado comercial.

Corregido

  • View Transitions Engine: Estabilización estricta del pase de atributos transition:name emparejando los contenedores de origen (Card) con los de destino (Slug), garantizando una animación 3D de expansión hiper-fluida.
  • JSX Compilation Syntax: Purga de errores de parseo (JSX inline comments) en el árbol virtual de etiquetas de ProjectCard y [slug].astro.

[1.2.0] - 2026-03-31 (Adaptive Pro Update)

Añadido

  • ThemePicker Pro: Selector de colores flotante con +12 paletas premium calibradas a mano.
  • Adaptive Color System: Soporte nativo para colores de marca duales (Light/Dark) que garantiza contraste perfecto en cualquier modo.
  • Developer Tools: Nuevos botones en el ThemePicker para Reset (volver a la configuración original) y Copy (copiar el objeto HSL directamente al portapapeles).
  • Centralized Brand Config: La propiedad brandColor en site-config.ts ahora soporta definiciones separadas para luz y oscuridad.

Mejorado

  • Contraste WCAG: Refinamiento global de la paleta de colores para cumplir con estándares de accesibilidad AA en ambos temas.
  • UX de Personalización: Script de inyección mejorado para evitar cualquier parpadeo de color (FOUC) al usar temas personalizados.
  • Documentación Pro: Guía de configuración actualizada con instrucciones para el nuevo sistema de colores.

Corregido

  • TypeScript Strictness: Corregidos múltiples errores de tipado en componentes de UI y scripts de persistencia.
  • Estructura CSS: Limpieza de reglas duplicadas y optimización de la jerarquía de variables en global.css.

Añadido

  • Páginas Legales: Incorporación de plantillas para Privacidad y Términos de Servicio con soporte MDX/Prose.
  • Sistema de Textura: Nuevo patrón de puntos (Dot Grid) en el fondo para un acabado arquitectónico.
  • Social CTA: El componente ContactCTA ahora incluye un botón dinámico para agendar llamadas (Cal.com).
  • Opciones de Color: Añadidas paletas de colores Indigo, Esmeralda y Ámbar en los comentarios de global.css.

Mejorado

  • Layout Global: Unificado el ancho máximo de los contenedores a max-w-6xl (72rem) para una estética más “Widescreen” y premium.
  • Hero Section: Rediseño completo a 2 columnas con imagen de perfil estilizada, filtros de contraste dinámicos y hover effects.
  • Background Aurora: Lógica de blend-modes mejorada (multiply en claro / screen en oscuro) para legibilidad perfecta.
  • Accesibilidad: Corrección crítica de contrastes en modo claro (WCAG AA) eliminando el forzado de prose-invert.
  • Responsive: Mejorada la alineación y el espaciado en dispositivos móviles en todas las secciones principales.

Corregido

  • Imágenes Astro: Eliminadas las barras negras (letterboxing) en imágenes transparentes al optimizar las dimensiones del componente <Image />.
  • Contraste: Corregida la visibilidad de textos secundarios que se perdían en el fondo claro.

[1.0.0] - 2026-03-15

Añadido

  • Lanzamiento inicial de la plantilla Portfolio Minimalista.
  • Integración nativa de Astro 6 + Tailwind CSS.
  • soporte para Colecciones de Contenido (Proyectos, Blog, Servicios).
  • Adaptador de Cloudflare Pages incluido.