- Añadir optimizeDeps con React explícito
- Mejorar condiciones de resolución
- Documentar solución para vendor-other en Vercel
- El build local es correcto, el problema es caché/build antiguo en Vercel
- Incluir React y React DOM en optimizeDeps
- Añadir condiciones de resolución explícitas
- Mejorar configuración de esbuild
- Esto asegura que React se pre-bundle correctamente
- Añadir dedupe: ['react', 'react-dom'] en vite.config.ts
- Esto fuerza una sola instancia de React en el bundle
- Crear script limpiar-y-rebuild.sh para limpieza completa
- Soluciona errores useLayoutEffect por React duplicado
- Poner TODO lo relacionado con React en vendor-react
- Esto garantiza que React esté disponible antes de cualquier otro código
- Separar solo utilidades que NO usan React (vendor-utils, vendor-other)
- Eliminado vendor-other completamente
- Todo lo no categorizado ahora va a vendor-ui
- vendor-ui se carga después de vendor-react
- Esto previene que código use React antes de que esté disponible
- Añadir react-resizable-panels, input-otp, cmdk, vaul a chunks específicos
- Protección adicional en vendor-other para excluir dependencias de React
- Asegurar que todas las dependencias de React se cargan después de vendor-react
- Asegurar que React se carga antes que otros chunks en vite.config.ts
- Incluir scheduler en vendor-react para evitar errores de useLayoutEffect
- Suprimir errores de extensiones del navegador (message channel closed)
- Mejorar manejo de errores en main.tsx con mensajes amigables
- Arquitectura paralela para Guías de Refuerzo
- Nuevos componentes: GuideCard, GuideHeader, GuideNavigation, etc.
- Vistas formativas: GuideIndex, GuideViewer, GuideSectionViewer
- Layout específico GuideLayout (sin BottomNav)
- Índice de guías con ABCDE Operativo y RCP Adulto SVB
- Corrección de Service Worker para desarrollo
- Enlaces de navegación en menú y página principal
- Documentación completa de implementación
- Fix: ErrorBoundary movido dentro de BrowserRouter para resolver error de contexto React Router
- Fix: Service Worker actualizado con Promise.allSettled para manejar errores de caché
- Feat: Iconos PWA optimizados (192x192, 512x512, maskable)
- Feat: Scripts de diagnóstico y limpieza de desarrollo
- Feat: Documentación de diagnóstico de errores
- Update: React Router future flags configurados
- Update: Manifest.json con iconos y screenshots configurados
- Clean: Eliminados archivos obsoletos y documentación antigua
- Docs: Actualizado RESUMEN_MANUAL_TES.md y CHECKLIST_PWA_COMPLETA.md
- Actualizar fechaActualizacion en manual-index.ts (100+ capítulos)
- Actualizar fechas en archivos .md del manual (public/manual/)
- Actualizar fechas en documentación (docs/)
- Actualizar fechas en páginas legales (Privacidad, Descargo, AvisoLegal)
- Actualizar fechas en scripts de limpieza
- Reemplazar todas las referencias de 2024-12-XX a 2025-12-23
- Reemplazar '19 de diciembre de 2024' a '23 de diciembre de 2025'
- Corregir MenuSheet: instanciar componentes Icon correctamente (<Icon /> en lugar de {icon})
- Mover ErrorBoundary fuera de BrowserRouter para evitar errores de contexto
- Eliminar Link de ErrorBoundary (usar window.location.href en su lugar)
- Cambiar process.env.NODE_ENV a import.meta.env.DEV en ErrorBoundary
- Los errores 'Objects are not valid as a React child' y 'basename is null' ahora resueltos
- Eliminar segunda definición duplicada de 'uso-tensiometro'
- Mantener solo la primera definición (línea 116)
- Build ahora sin warnings de claves duplicadas
- Script cleanup_completo.sh con 6 fases de limpieza
- Fase 1: Eliminar archivos innecesarios
- Fase 2: Mover backups y duplicados
- Fase 3: Simplificar configuraciones
- Fase 4: Consolidar documentación
- Fase 5: Limpiar scripts
- Fase 6: Reinstalación y verificación
- Documentación completa en PLAN_LIMPIEZA_FASES.md
- Actualizar .dockerignore para excluir archivos innecesarios
- Excluir documentación, backups, scripts y configuraciones no Docker
- Reducir tamaño de imagen Docker
- Mantener solo archivos esenciales para build y ejecución
- Script cleanup_project.sh para limpieza automática
- Organiza backups, documentación, scripts y configuraciones
- Mantiene integridad de Docker, PM2 y GitHub Actions
- Crea backups antes de mover archivos
- Crear Dockerfile multi-stage para optimizar tamaño
- Crear docker-compose.yml para gestión fácil
- Crear deploy-docker.sh script de despliegue
- Crear .dockerignore para optimizar build
- Crear GitHub Actions workflow para auto-deploy Docker
- Crear DEPLOYMENT_DOCKER.md con documentación completa
- Actualizar .gitignore para Docker
- Puerto 8607 configurado en Docker
- Health check incluido en contenedor
- Multi-stage build para reducir tamaño de imagen final
- Corregir rutas de archivos para usar nombre completo del directorio
- Corregir navegación del capítulo 8.1.1 para apuntar a 7.3.6 como anterior
- Asegurar que todas las rutas apuntan a BLOQUE_15_ALTERACIONES_PSIQUIATRICAS_Y_CONTENCION
- Explicar qué es el registry y cómo funciona
- Ejemplos de uso (alias vs rutas directas)
- Lista completa de alias disponibles
- Funciones helper para búsqueda
- Ejemplo completo de uso
- Ventajas del sistema
- Próximos pasos para migración
- Memoizar Header con React.memo
- Memoizar iconos Menu y Search para evitar re-renders
- Usar useMemo y useCallback para handlers y datos
- Memoizar menuItems en MenuSheet
- Cerrar menú inmediatamente al hacer click (mejor feedback)
- Optimizar event handlers con requestAnimationFrame
- Reducir tiempo de renderizado de 315ms a <16ms
- Mejorar INP de enlaces del menú
- Explicar cómo funciona el sistema actual
- Detallar proceso de renderizado (MarkdownViewer → ReactMarkdown → img component)
- Proponer 4 opciones de mejora (alias, frontmatter, auto-detección, híbrido)
- Recomendar sistema híbrido con registry
- Incluir ejemplos de implementación
- Plan de migración progresiva
- Usar setTimeout para handleShare (no bloquear UI)
- Usar requestAnimationFrame para onClick handlers
- Reducir bloqueo de UI de 383ms a <16ms
- Mejorar tiempo de respuesta de interacciones
- Mantener funcionalidad completa
- Crear página de Política de Privacidad (/privacidad)
- Crear página de Descargo de Responsabilidad (/descargo-responsabilidad)
- Crear página de Aviso Legal (/aviso-legal)
- Actualizar página Acerca de con enlaces a páginas legales
- Mejorar botón compartir en MenuSheet (usar toast en lugar de alert)
- Añadir rutas en App.tsx para las nuevas páginas
- Lazy loading para todas las nuevas páginas
- Explicar por qué no se despliega automáticamente
- 3 opciones de configuración (GitHub integration, CLI manual, GitHub Actions)
- Troubleshooting común
- Checklist de verificación
- Análisis detallado del 40% restante
- Desglose de referencias en Markdown faltantes (17 de 93 capítulos)
- Lista de 21 medios visuales faltantes (prioridad alta)
- Plan de acción por fases (1A, 1B, 1C)
- Estimación de esfuerzo por tarea
- Criterios de completación
- Actualizar conclusión: 99% funcional (antes 98%)
- Marcar Fase 2 (UX) y Fase 3 (Optimización) como completadas
- Actualizar checklist de funcionalidades core
- Actualizar tabla de estimación de tiempo
- Marcar búsqueda avanzada, compartir y optimización como completadas
- Añadir botón de compartir en ProcedureCard y DrugCard
- Implementar Web Share API con fallback a clipboard
- Generar deep links a protocolos y fármacos específicos
- Incluir información relevante en el share (título, prioridad, categoría)
- Usar toast notifications para feedback al usuario
- Archivos de despliegue ya presentes en repo:
- deploy.sh (script de deploy automático)
- ecosystem.config.js (config PM2)
- nginx.conf.example (config Nginx)
- DEPLOYMENT.md (documentación completa)
- env.example (variables de entorno)
- Añadir filtros por tipo (Todos, Protocolos, Fármacos)
- Añadir filtros por categoría (dinámicos según tipo seleccionado)
- Mejorar visualización de resultados con badges de prioridad y edad
- Aumentar límite de resultados de 8 a 12
- Resetear filtros al cerrar el modal
- Añadir 'oxigenoterapia' a DrugCategory type
- UI responsive con botones de filtro
- Convertir todas las páginas (excepto Home y NotFound) a lazy loading con React.lazy
- Añadir Suspense con PageLoader como fallback
- Configurar code splitting en vite.config.ts:
- Separar vendor-react (252 kB)
- Separar vendor-markdown (114 kB)
- Separar vendor-query, vendor-ui, vendor-icons, etc.
- Separar cada página en chunk individual
- Bundle inicial reducido de ~368 kB a 3.29 kB (1.25 kB gzipped)
- Mejora significativa en tiempo de carga inicial
- Páginas se cargan bajo demanda al navegar
- Marcar como completadas: favoritos, historial, páginas faltantes, ErrorBoundary
- Actualizar estado de contenido visual (20 referencias añadidas)
- Ajustar porcentajes de completitud
- Reorganizar prioridades según estado actual
- Total: ~52-75 horas restantes (reducido de 72-105)
- Crear página GaleriaImagenes con vista de todas las infografías organizadas por bloques
- Añadir referencias a imágenes en capítulo de Collarín Cervical (10 imágenes)
- Añadir botón de acceso a galería desde índice del manual
- Corregir error de React Router (useNavigate sin importar en MenuSheet)
- Ajustar estructura de providers en App.tsx
- Total: 48 imágenes disponibles en galería y referencias en manual