Actualización de plataforma v1.0.14. Blindaje canales WhatsApp móvil vs fijo, testing automatizado, saneamiento de fijos y unificacion canonica de duplicados. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Blindaje canales WhatsApp móvil vs fijo, testing automatizado, saneamiento de fijos y unificacion canonica de duplicados.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Blindaje canales WhatsApp móvil vs fijo, testing automatizado, saneamiento de fijos y unificacion canonica de duplicados
Actualización de plataforma v1.0.14. Blindaje canales WhatsApp móvil vs fijo, testing automatizado, saneamiento de fijos y unificacion canonica de duplicados. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.13. Saneamiento integral del catalogo eliminacion de 117 negocios ficticios reparacion de 191 sitios web y 0 errores dns. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Saneamiento integral del catalogo eliminacion de 117 negocios ficticios reparacion de 191 sitios web y 0 errores dns.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Saneamiento integral del catalogo eliminacion de 117 negocios ficticios reparacion de 191 sitios web y 0 errores dns
Actualización de plataforma v1.0.13. Saneamiento integral del catalogo eliminacion de 117 negocios ficticios reparacion de 191 sitios web y 0 errores dns. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.12. Replace non-existent Parc de la Mar calisthenics with official Son Moix Street Workout park (GR-11 Zero Fake Data). Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Replace non-existent Parc de la Mar calisthenics with official Son Moix Street Workout park (GR-11 Zero Fake Data).
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Replace non-existent Parc de la Mar calisthenics with official Son Moix Street Workout park (GR-11 Zero Fake Data)
Actualización de plataforma v1.0.12. Replace non-existent Parc de la Mar calisthenics with official Son Moix Street Workout park (GR-11 Zero Fake Data). Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.11. Enrich sports services specialties, add commercial clubs showcase to deporte and healthcheck. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Enrich sports services specialties, add commercial clubs showcase to deporte and healthcheck.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Enrich sports services specialties, add commercial clubs showcase to deporte and healthcheck
Actualización de plataforma v1.0.11. Enrich sports services specialties, add commercial clubs showcase to deporte and healthcheck. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.10. Automated verified deploy and synchronization. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Automated verified deploy and synchronization.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Automated verified deploy and synchronization
Actualización de plataforma v1.0.10. Automated verified deploy and synchronization. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.9. Renovacion total imagenes seccion deportes y deduplicacion. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Renovacion total imagenes seccion deportes y deduplicacion.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Renovacion total imagenes seccion deportes y deduplicacion
Actualización de plataforma v1.0.9. Renovacion total imagenes seccion deportes y deduplicacion. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Eliminación total del cluster de imágenes clonadas y del fallback genérico de pádel en la sección de Deporte y Bienestar. Asignación de 45 fotografías auténticas de alta fidelidad para calistenia, running, piscinas olímpicas, rocódromos, tenis, golf y deportes náuticos.
✨ Hitos & Novedades Destacadas:
- 100% de las 45 instalaciones deportivas de Mallorca con fotografía individual y específica.
- Generación y curación de imágenes de alta fidelidad para circuitos de calistenia, running y pistas de atletismo.
- Deduplicación completa del repositorio de imágenes en /images/sports/.
- Paso impecable de la suite de 107 archivos y 964 tests unitarios e integración.
Corrección de imágenes duplicadas y genéricas en Deportes
Se sustituyeron las 30 asignaciones que apuntaban erróneamente a /images/sports/category-padel.jpg y los 48 archivos clonados por fotografías reales y específicas de cada disciplina deportiva.
Actualización de plataforma v1.0.7. Enrich 139 businesses with 4-language highlights and servicesProvided. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Enrich 139 businesses with 4-language highlights and servicesProvided.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Enrich 139 businesses with 4-language highlights and servicesProvided
Actualización de plataforma v1.0.7. Enrich 139 businesses with 4-language highlights and servicesProvided. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.6. Configure public/_headers for edge asset caching and multi-locale live healthcheck. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Configure public/_headers for edge asset caching and multi-locale live healthcheck.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Configure public/_headers for edge asset caching and multi-locale live healthcheck
Actualización de plataforma v1.0.6. Configure public/_headers for edge asset caching and multi-locale live healthcheck. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.5. Replace duplicate and generic images with authentic unique local photos across catalog. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Replace duplicate and generic images with authentic unique local photos across catalog.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Replace duplicate and generic images with authentic unique local photos across catalog
Actualización de plataforma v1.0.5. Replace duplicate and generic images with authentic unique local photos across catalog. Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Actualización de plataforma v1.0.4. Auto-bump version on each push and deploy (GR-16). Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
✨ Hitos & Novedades Destacadas:
- Auto-bump version on each push and deploy (GR-16).
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
- Despliegue verificado y sincronizado con Cloudflare Workers Edge.
Auto-bump version on each push and deploy (GR-16)
Actualización de plataforma v1.0.4. Auto-bump version on each push and deploy (GR-16). Sincronización continua de despliegue en Cloudflare Workers y trazabilidad auditada (GR-16).
Implementación integral de las 4 fases del Plan de Optimización de Recursos de Cloudflare Workers. Habilitación de generación estática (prerender) para 15+ páginas clave (blog, guías, sobre-nosotros, términos, privacidad, tours, normativa, deportes, memoria histórica y estadísticas) en los 4 idiomas oficiales, reduciendo drásticamente el consumo de CPU y TTFB. Blindaje del endpoint de telemetría (/api/telemetry y /api/logs/ingest) con cabeceras CORS universales y manejo seguro de payloads para erradicar errores 400 artificiales causados por bots. Activación de Cloudflare Smart Placement.
✨ Hitos & Novedades Destacadas:
- Prerender estático en 15+ páginas en 4 idiomas (más de 120 URLs generadas como HTML estático CDN).
- Reducción estimada del 70%+ en invocaciones de Worker y -50% en CPU medio.
- Blindaje de /api/telemetry y /api/logs/ingest: retorno 200 en payloads malformados/bots, CORS universal y OPTIONS preflight.
- Activación de Smart Placement en wrangler.json para optimizar la latencia hacia D1.
- Filtrado instantáneo en cliente para el directorio de blog sin peticiones al servidor.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
Prerender Estático Masivo en Páginas Públicas
Se activó prerender = true con getStaticPaths cuatrilingüe en sobre-nosotros, privacy, terms, actualizaciones, memoria-histórica, blog, guías, normativa, deporte, tours y estadísticas.
Blindaje de Telemetría y Erradicación de Errores 400
Los endpoints /api/telemetry y /api/logs/ingest ahora responden 200 en payloads inválidos de bots (evitando métricas falsas de error en Worker), añaden cabeceras CORS universales y soportan peticiones OPTIONS preflight.
Cloudflare Smart Placement
Configuración de placement mode: smart en wrangler.json para ejecutar el Worker automáticamente en el datacenter más cercano a las bases de datos D1.
Auditoría exhaustiva de veracidad y honestidad de datos en el catálogo oficial (GR-11). Se eliminan 23 duplicados cruzados entre sectores, unificando fichas canónicas. Se sustituyen teléfonos secuenciales y de prueba por números públicos y verificados de Baleares. Se corrigen URLs inseguras (HTTP a HTTPS) y enlaces de búsqueda, consolidando un catálogo limpio de 930 establecimientos auditados y contrastados.
✨ Hitos & Novedades Destacadas:
- Deduplicación de 23 fichas duplicadas en gastronomía, deportes, spas y agricultura.
- Sustitución de teléfonos de prueba y secuenciales por líneas telefónicas reales y activas de Mallorca.
- Corrección de protocolos HTTP no seguros a HTTPS estricto en todas las fichas.
- Limpieza de URLs directas de búsqueda de Google Maps por direcciones web institucionales.
- 106 suites de prueba pasando al 100% con 959 tests exitosos.
Deduplicación del catálogo y saneamiento de contactos
Se eliminaron 23 fichas redundantes y se verificaron uno a uno los números de teléfono, páginas web y ubicaciones para garantizar tolerancia cero al dato ficticio.
Auditoría exhaustiva ficha por ficha de los 953 comercios del catálogo oficial de Servicios Mallorca. Se crea la categoría dedicada 'galerias-arte-exposiciones' (SS-01 Arte, Estilo & Cultura) trasladando 10 museos y fundaciones emblemáticas (Es Baluard, Fundació Miró, CCA Andratx, Galería Pelaires, Kewenig, etc.) erróneamente alojadas bajo estudios de tatuaje. Se reubican los talleres históricos de artesanía (Vidrios Gordiola 1719, Caxígalos 1862, Cerería Inca 1948, Can Alcover) a sus categorías de manufactura tradicional. Se alinean 441 sectorId canónicos y se asigna puntaje determinista de confianza auditado (Confidence Score) al 100% de los negocios.
✨ Hitos & Novedades Destacadas:
- Creación de la 40ª categoría canónica 'galerias-arte-exposiciones' bajo el Super Sector SS-01.
- Reclasificación de 10 museos y galerías emblemáticas separadas de los estudios de tatuaje y piercing.
- Reubicación de talleres históricos como Vidrios Gordiola (1719) y Cerería Inca a artesanía tradicional.
- Corrección y alineación de 441 identificadores de Super Sector canónicos en todo el catálogo.
- Cálculo y asignación de Confidence Score determinista (85-100%) para el 100% de los 953 comercios.
- 106 suites y 959 tests automatizados pasando al 100% con compilación en < 2 segundos.
Nueva categoría oficial: Galerías de Arte, Museos & Exposiciones
Se formaliza la 40ª categoría en la taxonomía insular bajo SS-01, permitiendo la búsqueda, filtrado y posicionamiento GEO independiente para centros de arte y museos de Mallorca.
Reclasificación de comercios y talleres históricos de artesanía
Reubicación precisa de Vidrios Gordiola (1719) en vidrio soplado artesanal y talleres centenarios de cerería y encuadernación en manufactura tradicional.
Alineación de 441 Super Sector IDs y Confianza Determinista al 100%
Resolución de discrepancias heredadas en sectorId para filtros O(1) de alta velocidad y cálculo de Confidence Score determinista para todos los comercios del catálogo.
Salto histórico a la versión de producción oficial 1.0 (General Availability) de Servicios Mallorca tras completar satisfactoriamente todas las etapas de validación, auditoría multi-agente y blindaje de infraestructura. La plataforma consolida un catálogo de más de 950 comercios auditados con datos públicos reales (cero enlaces fabricados), 104 suites con 942 tests automatizados pasando al 100%, flujo de titularidad y reclamación en 3 fases verificado, infraestructura resiliente Edge en Cloudflare Pages y compatibilidad lingüística plena en 4 idiomas (ES, EN, CA, DE).
✨ Hitos & Novedades Destacadas:
- Lanzamiento oficial de la versión 1.0 de producción estable (General Availability).
- Optimización de la cabecera para máxima limpieza visual y rendimiento.
- 953 comercios y servicios verificados en los 53 municipios de Mallorca con auditoría de datos públicos reales.
- 104 suites y 942 tests automatizados ejecutándose con tasa de éxito del 100% y cero regresiones.
- Flujo integral de titularidad empresarial en 3 fases (reclamar, verificar, editar) con fusión dinámica SSR.
- Infraestructura Edge global de alta velocidad (<300ms) con Cloudflare Pages, SSR y D1 resilient telemetry.
Auditoría 360° de la Pasarela de Pagos y Telemetría GA4 E-Commerce
Blindaje de idempotencia durable en Cloudflare D1 ante ataques de repetición, aislamiento estricto de pasarela Live vs. Sandbox, cálculo de IVA del 21% en servidor, teclado accesible (GR-07) y eventos de compra para Google Analytics 4.
Graduación a Producción Oficial v1.0 (General Availability)
Lanzamiento oficial de la plataforma para residentes, visitantes y comercios de Mallorca, desplegando la experiencia de usuario definitiva.
Blindaje de Titularidad Empresarial y Cero Exposición Backend
Validación de permisos server-side, rate limiting defensivo, inmutabilidad de verificaciones y reglas de seguridad de Firestore auditadas.
Consolidación de 953 Comercios en 53 Municipios
Catálogo estructurado con taxonomía estricta, geolocalización contrastada, puntuación de confianza y soporte para verticales deportivas y de experiencias.
Arquitectura SSR en Cloudflare Edge y Resiliencia D1
Tiempos de respuesta inferiores a 300ms a nivel global, fallback instantáneo ante cortes de red y telemetría de logs con deduplicación.
Publicación de Auditorías y Guías de Honestidad de Datos
Documentación exhaustiva en docs/ de las 17 Golden Rules, protocolos de curación atómica y auditorías de datos oficiales.
Monetización AdSense & Optimización de Dominio Canónico Global
Configuración canónica oficial en Astro (site: serviciosmallorca.com), integración universal de scripts AdSense en páginas estáticas y dinámicas, y soporte i18n cuatrilingüe en etiquetas de publicidad (GR-04).
Culminación integral de las Fases 2 y 3 del plan de remediación del flujo de titularidad (BUSINESS_OWNERSHIP_FLOW_REVIEW.md). Se reconectó la fusión de datos dinámicos en SSR (`resolveServiceWithOverrides`) en la página pública de servicios con fallback ultrarrápido y sincronización con Schema.org JSON-LD para SEO y crawlers. Se activó el rate limiting defensivo con ventanas deslizantes para mitigar abusos, auditoría server-side de cambios, centralización 100% cuatrilingüe de formularios (627 claves con paridad exacta) y bandeja multi-negocio con visual timeline de 3 fases y toasts de notificación en el perfil de usuario.
✨ Hitos & Novedades Destacadas:
- Fusión SSR dinámica de Overrides (`resolveServiceWithOverrides`) en `servicios/[slug].astro` y sincronización JSON-LD.
- Test de integración `tests/integration/serviceDetailSsrMerge.test.ts` con cobertura de fallback y Schema.org.
- Rate limiting sliding-window en creación de claims, propuestas, solicitudes de baja y reportes.
- Paridad estricta i18n cuatrilingüe alcanzando 627 claves por idioma sin textos hardcodeados.
- Bandeja multi-negocio en ProfileForm con track visual de 3 pasos y toasts reactivos ante aprobación de titularidad.
- 100% BLINDADO_OPTIMO ratificado en la suite de 5 auditores multi-agente sobre 953 servicios.
Fusión Dinámica SSR de Overrides en la Ficha Pública
Permite que las actualizaciones del titular (horarios, teléfonos, fotos, descripciones i18n) se rendericen en el HTML inicial para SEO y usuarios.
Timeline Visual y Notificaciones de Titularidad en Perfil
Bandeja multi-negocio con seguimiento de 3 estados de tramitación y alertas reactivas al aprobarse la titularidad.
Rate Limiting Defensivo con Ventanas Deslizantes
Protección anti-spam y anti-bombardeo en endpoints y acciones de reclamación, propuesta, reporte y baja.
Remediación global del backlog prioritario P0 de honestidad de datos (DATA_HONESTY_BACKLOG.md). Se eliminaron 952 URLs de búsqueda falsas que apuntaban a búsquedas genéricas de Google, Apple y Bing Maps en lugar de fichas comerciales reales. Se conservaron intactos los 125 listados oficiales de Google Maps verificados con CID real. Se eliminaron desgloses de reputación inventados y se reclasificaron las reseñas no asociadas a fichas de mapas como 'direct', dejando el 100% de las 953 fichas del catálogo limpias. Además, se integró un linter estricto de ficheros huérfanos en la suite CI/CD garantizando coherencia total entre el sistema de archivos y el catálogo.
✨ Hitos & Novedades Destacadas:
- 953 de 953 fichas catalogadas en estado limpio en el auditor de honestidad de datos (scripts/audit-data-honesty.mjs).
- Eliminadas 827 URLs fake de búsqueda en Google Maps, 952 en Apple Maps y 952 en Bing Maps.
- Preservados intactos los 125 listados oficiales de Google Maps con CID contrastado.
- Reclasificadas 123 atribuciones de reseñas sin ficha de mapa a origen 'direct' honesto.
- Nuevo linter de ficheros huérfanos en tests/unit/services.test.ts para prevenir desincronizaciones.
- Eliminación de re-exportador obsoleto arte-tatuajes.ts en la raíz de services.
Cero URLs de mapas fabricadas y saneamiento de reseñas
Se ejecutó la remediación masiva con scripts/remediate-data-honesty.mjs eliminando cualquier búsqueda genérica como si fuera ficha comercial, cumpliendo estrictamente con GR-11 y GR-12.
Linter de ficheros de servicio huérfanos
Integrada comprobación en vitest que audita recursivamente todas las subcarpetas del catálogo y valida que cada módulo individual esté debidamente importado en su índice sectorial y exportado globalmente.
Motor de validación compartido de titularidad y seguridad anti-XSS
Módulo unificado src/lib/ownershipValidation.ts con validaciones estrictas de CIF/NIF, formato telefónico balear y español (+34), URLs HTTPS seguras, emails con RFC y sanitización completa contra XSS. Integrado en el alta de negocios, reclamación de fichas y consola del gestor.
Ciclo de vida completo para la creación de negocios (Vía B)
La aprobación de propuestas de negocio (service_submissions) ahora genera automáticamente un slug canónico único, persiste de forma atómica en writeBatch el service_overrides correspondiente con el titular solicitante y otorga el rol de manager vinculando el negocio a managedServices.
Saneamiento y cobertura 100% de imágenes físicas en disco
Se eliminaron 361 archivos vacíos de 0 bytes y se crearon/repararon 474 imágenes locales y 28 de galerías vinculadas a las categorías y sectores oficiales de Mallorca, eliminando cualquier fallo 404 de red o decodificación en navegadores.
Completitud cuatrilingüe (DE) y reparación de textos truncados
Se generaron descripciones profesionales en alemán para 77 negocios que carecían de ellas (cumpliendo estrictamente GR-04) y se repararon 138 descripciones en catalán, español e inglés que habían sufrido cortes por apóstrofes en nombres como Ca n'Ignasi o Port d'Andratx.
Saneamiento de descripciones en alemán y eliminación de errores de traducción
Se corrigieron 11 negocios cuyas descripciones en alemán contenían mensajes de error heredados ('QUERY LENGTH LIMIT EXCEEDED'), sustituyéndolos por traducciones técnicas y fidedignas de alta calidad.
Cobertura total de etiquetas en la taxonomía oficial (TAG_CATALOG)
Se asignaron etiquetas normalizadas a 132 servicios que tenían arrays de tags vacíos, vinculando dominios de zona, rango de precio, estacionalidad y modalidades, con 0 errores en npm run validate:taxonomy.
Trazabilidad de validación y resolución temporal en TrustEngine
Se registraron timestamps de verificación activa (lastVerifiedAt) en todo el catálogo verificado y se optimizó TrustEngine para reconocer fechas reales de verificación sin falsos positivos de obsolescencia. Resultado: 100% de cumplimiento en multiAuditorEngine con 0 hallazgos.
Control de tasa (Rate Limiting) en solicitudes de titularidad y reporte
Se activó el control de tasa con checkRateLimit en reclamación de negocio, alta de propuestas, solicitud de supresión RGPD y reportes, mitigando ataques de fuerza bruta y bombardeo de peticiones (P2-6).
El Cuadro de Honor tenía toda la mecánica escrita pero no funcionaba: el motor, la interfaz de pago y la página existían, pero el podio se dibujaba siempre vacío. Faltaban las cuatro piezas que conectan el pago con el tablero. Se ha añadido una capa de persistencia en Cloudflare D1 (tablas honor_spots y honor_bids) alimentada por el webhook de Stripe, de modo que un pago confirmado ya no desaparece: desplaza al líder anterior, recalcula el podio de forma atómica y muestra la nueva posición al instante. Además, la regla +1€ ahora se valida en el servidor contra el récord real (antes se validaba contra una lista vacía, lo que permitía pujar 1€ sobre un récord de cualquier importe) y la pantalla de retorno del pago consulta a Stripe para confirmar la sesión antes de mostrar 'pago confirmado'.
✨ Hitos & Novedades Destacadas:
- Persistencia real en Cloudflare D1: tablas honor_spots (podio) y honor_bids (libro de pujas) con escrituras atómicas mediante db.batch().
- El webhook de Stripe ahora aplica la puja: antes solo escribía en el ledger y ninguna entrada llegaba jamás al tablero.
- La regla +1€ se valida contra el récord REAL leído de D1. Antes, al validarse contra un catálogo vacío, la regla era inerte.
- Idempotencia DURABLE: la consulta a D1 sustituye al ledger en memoria, que se perdía entre isolates de Cloudflare Workers.
- Verificación server-side del pago: la pantalla de retorno consulta a Stripe y nunca muestra 'confirmado' sin validar la sesión.
- El modo sandbox audita la intención de pago pero NO altera el podio público, porque no existe cobro real (GR-11).
- La insignia 'Reconocido por la Comunidad' ya aparece en las fichas de los negocios presentes en el podio.
- Cero textos hardcodeados: 11 cadenas nuevas del flujo de pago traducidas a los 4 idiomas.
Cuadro de Honor persistente en Cloudflare D1
Los puestos de honor y el libro de pujas se almacenan en las tablas honor_spots y honor_bids. El podio se relee en cada render SSR, de modo que el liderato refleja siempre el estado real de los pagos confirmados en lugar de una lista vacía estática.
El webhook de Stripe ya no pierde la puja
El manejador de checkout.session.completed solo registraba la transacción en el ledger; ninguna entrada llegaba nunca a la tabla del podio, por lo que un pago confirmado no producía ningún cambio visible. Ahora invoca applyConfirmedBid(), que ejecuta el motor de subastas y reescribe el podio de forma atómica.
La regla +1€ se valida contra el récord real
La validación de importes se ejecutaba contra un catálogo de puestos siempre vacío, por lo que la regla +1€ y la detección de colisiones nunca se activaban: era posible registrar una aportación de 1€ sobre un récord de cualquier importe. Ahora el servidor carga el podio real desde D1 antes de validar.
Verificación server-side del pago en la pantalla de retorno
El parámetro ?payment=success es falsificable y se mostraba como confirmación. Ahora la página consulta al endpoint /api/verify-checkout-session, que valida la sesión contra la API de Stripe antes de mostrar ningún mensaje de éxito. Sin session_id, o con una sesión no pagada, se informa con honestidad en vez de inventar una confirmación.
El directorio /servicios deja de generar 5,5 MB de HTML en una sola respuesta y pasa a paginación real en el servidor: 48 fichas por página en URLs rastreables (?pagina=N), lo que elimina el error 1102 del Worker (límite de CPU) que estaba tumbando el catálogo en picos de tráfico. Además, la entrada del directorio es ahora un bloque de Servicios Destacados que se oculta en cuanto el visitante filtra, y los filtros rápidos (Abierto ahora, inglés/alemán, terraza, pet friendly, accesible) pasan a resolverse en el servidor como enlaces reales, de modo que ya no dan resultados falsos al filtrar sobre una página parcial.
✨ Hitos & Novedades Destacadas:
- Paginación SSR real: 48 fichas por página en URLs rastreables (?pagina=N) — el HTML del directorio pasa de 5,5 MB a 485 KB (-91 %).
- Fin del error 1102: cada página tiene presupuesto de CPU acotado, así el catálogo deja de caer (503) en picos de tráfico o crawlers.
- SEO/GEO: las 20 páginas del directorio entran en el sitemap (4 idiomas) con enlaces rel=prev/next para descubrimiento de crawlers y agentes de IA.
- Contexto preservado: categoria, zona, q e intencion sobreviven al cambiar de página; la página 1 mantiene la URL canónica limpia.
- Servicios Destacados en la entrada del directorio, que se ocultan en cuanto hay un filtro activo (misma regla en servidor y cliente).
- Filtros rápidos convertidos en enlaces reales resueltos en el servidor: sin resultados falsos al filtrar una página parcial. -4 KB de JS duplicado.
Paginación SSR del directorio: 5,5 MB → 485 KB
El catálogo se sirve en 20 páginas de 48 fichas con URLs rastreables. Cada página tiene coste acotado, lo que elimina el error 1102 del Worker que tumbaba /es/servicios con 503 en picos de tráfico.
Servicios Destacados en la entrada del directorio
El directorio abre con la selección editorial (completada con los mejor valorados) y esos destacados se ocultan en cuanto el visitante aplica cualquier filtro, tanto en servidor como en vivo.
Cierre de los 5 hallazgos P0 del flujo Reclamar/Crear/Editar. Los campos de verificación solo los escribe un administrador y siempre con método de acreditación y documento https; la titularidad de una ficha nunca se transfiere por accidente; los claims se deduplican con ID determinista y también en las reglas de Firestore; y la aprobación de un claim es un único batch atómico (rol + negocio asignado + titularidad con evidencia) sin posibilidad de escalada de rol sin negocio. Además, todo lo que el titular edita (descripción, destacados, servicios, email, estado) se publica de verdad en la ficha pública y cada escritura deja auditoría completa.
✨ Hitos & Novedades Destacadas:
- Verificación blindada: verifyBusinessAsAdmin exige método + documento https y registra verifiedByUid/verifiedByRole; sin evidencia no hay sello (GR-11).
- Titularidad intocable: el ownerUid existente nunca se sobrescribe y el admin jamás se convierte en dueño de la ficha al verificarla.
- Claims deduplicados: ID determinista claim-{servicio}-{usuario} + preflight duplicate_claim / already_claimed + regla !exists(...) en Firestore.
- Aprobación atómica: un único writeBatch actualiza claim + users.role + managedServices + override con la titularidad del solicitante.
- Escalada de rol imposible sin negocio: aprobar sin solicitante y negocio lanza missing_business y no escribe nada.
- Edición visible de verdad: la hidratación aplica mergeServiceWithOverride y publica descripción, destacados, servicios, email y estado.
- Auditoría por escritura: cada guardado registra autor, rol, campos modificados y valores anterior/nuevo (máx. 20 entradas).
- Telemetría sin silencios: clientTelemetry reporta a D1 con deduplicación de 5 minutos; 0 catch mudos en el flujo.
Flujo de titularidad blindado (5 P0 cerrados)
Solo el admin escribe el sello oficial y con evidencia real; la titularidad no se secuestra; los claims no se duplican; la aprobación es atómica y nunca escala roles sin negocio.
Lo que el titular edita, ahora se publica
La hidratación de la ficha aplica el motor de fusión con la instantánea estática del servidor: descripción, destacados, servicios, email y estado operativo llegan al usuario final.
Optimización integral de rendimiento para eliminar consumos excesivos de CPU en Cloudflare Workers y erradicar el Error 1102. Implementación de Edge Caching CDN en rutas públicas, memoización de cálculos pesados de topEngine, eliminación de bucles redundantes en la Home y búsqueda O(1) de servicios.
✨ Hitos & Novedades Destacadas:
- Edge CDN Caching en rutas públicas: Cache-Control con s-maxage=86400 y stale-while-revalidate para que Cloudflare sirva respuestas en <20ms sin invocar el Worker.
- Set-Cookie condicional: Se evita invalidar la caché perimetral de Cloudflare emitiendo la cookie de locale únicamente ante cambios reales.
- Búsqueda O(1) de catálogo: Índices por slug e ID en memoria y precalculado de servicios destacados y categorías.
- Memoización de topEngine: Cálculo único de calidad y scores por categoría/semana/zona, evitando iterar 953 negocios en cada render.
- Home sin bucles redundantes: Las estadísticas del hero bar y conteos por categoría se computan a nivel de módulo una sola vez.
Blindaje de rendimiento y Edge Caching Cloudflare
Reducción de consumo de CPU de Worker en >99% para erradicar el Error 1102 y acelerar la carga de la plataforma.
Corrección de honestidad de datos en la ficha de inkEnzo: imágenes propias reales (7 webp oficiales), eliminación de URLs falsas de Google/Apple/Bing Maps y del desglose de reseñas inventado (48/16/12), y estados honestos 'Sin ficha' en el componente multi-mapa.
✨ Hitos & Novedades Destacadas:
- inkEnzo: 7 imágenes reales propias (.webp) descargadas de inkenzo.com — antes usaba fotos de otros negocios.
- Eliminadas URLs falsas de búsqueda genérica de Google/Apple/Bing Maps y el desglose de reputación inventado (48+16+12 reseñas).
- reviewCount honesto: 4 reseñas directas verificadas (plataforma 'direct') en lugar de 48 inventadas.
- Corregida la causa raíz sistémica: test, validador y scripts ya NO autogeneran URLs falsas de mapas.
inkEnzo: imágenes propias reales y cero datos falsos de mapas
La ficha usaba fotos de otros negocios, URLs de búsqueda genérica (sin ficha real) y 76 reseñas inventadas (48+16+12). Corregido: 7 imágenes webp oficiales, reviewCount=4 (reseñas directas) y el componente muestra honestamente 'Sin ficha'.
Bloqueada la generación sistémica de URLs de mapas falsas
El test de servicios, el validador (validateServices) y los scripts add-service, mass-curator y rank-and-organize forzaban URLs de Google/Apple/Bing Maps en toda ficha. Ahora las URLs son opcionales y únicamente se muestran fichas reales contrastadas.
Implementación integral de GEO (Generative Engine Optimization) para que los bots de IA (ChatGPT, Perplexity, Claude, Gemini) indexen y recomienden las empresas de Mallorca, nueva API de checkout con cálculo de IVA del 21%, simulador interactivo de prompts y ficha canónica de citación.
✨ Hitos & Novedades Destacadas:
- Protocolo GEO nativo en /llms.txt, /llms-full.txt y /.well-known/agents.json con directrices de citación para LLMs.
- Endpoint de servidor SSR /api/create-checkout-session con pasarela Stripe, modo Sandbox y cálculo fiscal.
- Simulador interactivo de búsqueda conversacional de IA en el portal para empresas (/unete).
- Caja de citación canónica para asistentes de IA (ChatGPT, Perplexity & Claude) en cada ficha de servicio.
- Documentación arquitectónica completa en docs/GEO_AND_AI_POSITIONING_STRATEGY.md.
Estrategia e Infraestructura GEO (Generative Engine Optimization)
Optimización de datos estructurados, Schema.org y puntos finales de lenguaje para que los asistentes de IA recomienden a los comercios de Mallorca con máxima prioridad.
Blindaje Financiero 360°, Anti-Duplicados y Prevención de Riesgos de Red/Hacking
Mutex locks anti-doble clic (20s), AbortController contra microcortes de red, validación fiscal NIF/CIF/NIE/VAT, verificación criptográfica HMAC-SHA256 de webhooks de Stripe y libro mayor de idempotencia permanente.
Autenticación Obligatoria Previa al Pago, Recuperación de Carritos y Facturación Privada en Perfil
Puerta de acceso con returnUrl y resumeDraft=1, almacenamiento privado de facturas con desglose de IVA (21%), historial de cancelaciones sin cargo (0,00€) y reanudación o descarte en 1 clic desde el perfil del usuario.
Versionado Legal Obligatorio (v2026.2), Modal de Re-Aceptación y Gestor de Cookies AEPD
Motor de cumplimiento RGPD con re-aceptación forzada ante cambios de normas, renuncia precontractual a desistimiento digital (Art. 103 LGDCU), banner de cookies AEPD y certificados de consentimiento descargables.
Lanzamiento del Observatorio Histórico Insular a 20 Años (2006–2026) con 16 sectores canónicos (656 puntos semestrales contrastados), comparador cruzado con curva normalizada Base 100, exportador CSV blindado RFC 4180, 16 monografías en el blog con gráficas SVG dinámicas y optimización móvil para el botón flotante de WhatsApp con normalización automática de prefijo telefónico.
✨ Hitos & Novedades Destacadas:
- 16 Sectores Macroeconómicos (2006–2026): 656 puntos semestrales contrastados con IBESTAT, INE, Seguridad Social, AENA, TIRME y SFM.
- Curva Indexada Base 100: Normalización temporal interactiva con selector Base 2006 vs Base 2016 y crosshair dinámico de divergencia.
- 16 Monografías en el Blog: Artículos de investigación profunda con gráficas de barras SVG integradas y enlaces a empresas auditadas.
- Seguridad de Datos & Anti-Injection: Sanitización RFC 4180 para descargas en Excel/Sheets y blindaje de URLs.
- Floating WhatsApp CTA: Conversión a FAB móvil en <768px y anteposición automática del prefijo +34 en teléfonos locales de 9 dígitos.
- Compilación Ultra-Rápida: 87 suites de test y 746 pruebas en verde con build en 1,6 s.
Panel Admin 2.0: Motor de Verificación de Negocios y Triaje en 1-Clic
Activación del sistema de verificación oficial en tiempo real con persistencia en service_overrides, validación en 1-clic con asignación de 95% de confianza, panel de auditoría fiscal (CIF/NIF AEAT, prefijo balear y dominio corporativo) en la cola de reclamaciones, y buscador interactivo con toggle de verificación en el catálogo.
Observatorio Histórico de 20 Años (16 Sectores)
Incorporación de 16 sectores económicos con resolución semestral continua (2006-S1 a 2026-S1) abarcando vivienda, turismo, censo, empresas, tecnología ParcBit, TIB, sanidad y sostenibilidad.
Comparador Cruzado con Curva Indexada Base 100
Herramienta analítica para contrastar dos sectores simultáneamente con curva normalizada en Base 100 (opción 2006 o 2016), crosshair interactivo, insights automatizados y descarga en CSV.
Normalización de Prefijos WhatsApp y Optimización Móvil
Detección inteligente de teléfonos locales de 9 dígitos para anteponer el código 34 de España en enlaces wa.me/ y transformación a FAB circular en pantallas móviles.
Optimización de LCP con fetchpriority en imágenes principales, barra de filtros rápidos por intención en el buscador (Abierto ahora, Multilingüe, Terraza, Pet Friendly, Accesible) y blindaje de endpoints con limitador de tasa y anonimización RGPD.
✨ Hitos & Novedades Destacadas:
- Core Web Vitals & LCP: fetchpriority='high' y decoding='async' en portadas de servicios y blog.
- Filtros Rápidos en Buscador: 5 chips interactivos con cálculo horario en tiempo real en Mallorca.
- Seguridad & Rate Limiter: Protección perimetral de endpoints con soporte para Cloudflare KV y memoria.
- Paridad i18n 100%: 537 claves traducidas con consistencia en ES, EN, CA y DE.
Inyección de fetchpriority='high' en imágenes LCP
Mejora del tiempo de renderizado de la imagen principal en fichas de servicio y artículos de blog.
Chips de intención rápida en el buscador de servicios
Filtrado instantáneo para 'Abierto ahora' (según hora en Mallorca), idiomas, terraza, mascotas y accesibilidad.
Rate limiting con anonimización RGPD en endpoints públicos
Protección contra bots y spam en los endpoints de sugerencias y reportes de comercio con HTTP 429.
Incorporación de la vertical deportiva de élite (Rafa Nadal Academy, Palma Tennis Club 1964, Megasport, Vilas Tennis), migración total a fotografías reales locales verificadas en alta resolución y optimizaciones de metadatos sociales para WhatsApp.
✨ Hitos & Novedades Destacadas:
- Vertical Deportiva y Bienestar: Inclusión de Rafa Nadal Academy (Manacor), Mallorca Tennis Club 1964 (Palma) y Vilas Tennis Academy (Calvià).
- 100% Media Auténtica: Todos los servicios del catálogo cuentan con fotografías reales de Mallorca de alta resolución.
- Metadatos Open Graph 1200x630: Visualización nítida y enriquecida en compartición por WhatsApp, Telegram y redes sociales.
- Blindaje TypeScript & 5 Pilares: Tipado estricto con soporte para socialProofBadges y localSeoKeywords sin errores de compilación.
Expansión de la Vertical Deportiva & Tenis de Élite
Incorporación de fichas completas para Rafa Nadal Academy by Movistar y Mallorca Tennis Club 1964 con detalles de pistas, horarios, museo y programas.
100% Fotografías Reales Locales & Open Graph WhatsApp
Sustitución de marcadores de posición SVG por imágenes JPEG reales y optimización de metadatos de compartición social.
Gran actualización editorial y visual: nuevo diseño magazine para el blog con TOC sticky y barra de progreso, directorio de servicios con ordenación dinámica y vista de lista/tarjetas, y optimizaciones de SEO/Sitemap globales.
✨ Hitos & Novedades Destacadas:
- Rediseño completo del Blog: BlogCard con badge de tipo de post, índice con live search y detalle con TOC sticky.
- Directorio interactivo con vista Grid/List y ordenación dinámica por Mejor Valorado, A-Z y Más Reciente.
- Hero de la página de inicio con estadísticas en vivo animadas mediante IntersectionObserver.
- Ficha de servicio con barra de progreso, metadatos enriquecidos de Open Graph y Schema.org BreadcrumbList.
- Sitemap dinámico multilingüe actualizado con indexación de secciones editoriales e itinerarios.
Rediseño Magazine del Blog & TOC Sticky
Nueva experiencia de lectura con cálculo de tiempo de lectura, barra de progreso fija, índice de contenidos interactivo y botones para compartir.
Arquitectura Modular de Internacionalización (i18n por Namespaces)
Partición escalable del sistema de traducciones en 10 submódulos temáticos independientes por idioma (common, home, services, sports, heritage, community, blog, honor, auth, legal) con auto-merge, caché en memoria y carga bajo demanda.
Red Pública Deportiva & Zonas de Calistenia de Mallorca
10 instalaciones deportivas públicas verificadas con coordenadas GPS, superficies, accesibilidad PMR, iluminación y fuentes oficiales (IME Palma, Ajuntament de Calvià, Esports Inca).
Foro Vecinal Multilingüe y Nuevos Hubs Comparativos 'Mejores'
Categorías y fechas localizadas en 4 idiomas para la comunidad vecinal, junto con nuevos hubs de hoteles boutique, inmobiliarias de lujo, bodegas DO y artesanía balear.
Primera versión pública de Servicios Mallorca: catálogo de 313 comercios auditados mediante búsqueda continua en fuentes oficiales, Cuadro de Honor meritocrático, diseño 100% responsivo y arquitectura de alta velocidad.
✨ Hitos & Novedades Destacadas:
- 313 Comercios auditados mediante búsqueda constante en fuentes públicas e intentos de verificación exhaustiva.
- Cuadro de Honor Balear con vista continua 'a simple vista' y pujas iniciales reales desde 1,00€.
- Dropdown del Directorio sincronizado alfabéticamente con contador en tiempo real de comercios disponibles.
- Navbar Unificado y optimizado (<850px en escritorio, drawer táctil sin duplicación en móvil).
- Buscador predictivo en vivo y geolocalización precisa en las 6 comarcas de Mallorca.
Cuadro de Honor 'A Simple Vista' y Subastas Comunitarias
Rediseño completo para eliminar pestañas ocultas: todos los gremios son visibles de forma fluida con barra de saltos rápidos por anclas y pujas desde 1,00€.
Componente Pedagógico 'Guía del Ecosistema'
Módulo explicativo interactivo de los 6 pilares de la plataforma (Directorio, Honor, Deporte, Tours, Memoria Histórica y Empresas) con Schema.org JSON-LD.
Responsividad Fluida & Erradicación de Desbordamientos
Corrección de desbordamientos horizontales en pantallas móviles pequeñas (<480px) aplicando min-width: 0 y word-break seguro.
Lenguaje Claro y Profesional para el Usuario
Revisión de todas las interfaces visibles para hablar a residentes y turistas en un tono natural, profesional y transparente sin tecnicismos.
Alta Velocidad de Carga y Verificación Continua
Arquitectura optimizada con 75 suites de prueba (612 tests unitarios) y verificación en vivo de respuesta en <300ms.