PWA Fitness: App Sin App Store | Guía Técnica 2025
Como crear una PWA fitness que evita el 30% de comision. Desafios iOS, soluciones de video y estrategias de adopcion probadas en WorkoutGen.
- PWA
- Progressive Web App
- desarrollo móvil
- fitness tech
- entrenamiento
- Lemon Squeezy
La verdad sobre crear apps sin pasar por las App Stores
No necesitas el permiso de Apple o Google para lanzar una app móvil profesional. Con mi amigo entrenador deportivo, construí WorkoutGen - un generador de entrenamientos que crea programas de musculación en gimnasio personalizados - como una Progressive Web App que funciona perfectamente en todos los dispositivos sin tocar la App Store o Google Play.
Este artículo comparte mi experiencia real construyendo y desplegando una PWA en producción, incluyendo las ventajas económicas (conservar ~25% más de ingresos por cliente), los desafíos técnicos (especialmente los bugs de vídeo de Safari), y las estrategias de adopción de usuarios que implementé. La realidad es más matizada que el discurso de marketing, pero las oportunidades son reales.
¿Qué hace buena a una PWA de fitness?
Una PWA de entrenamiento profesional debe ofrecer (y WorkoutGen implementa todo esto):
- Arquitectura offline-first - Entrenamientos accesibles sin Internet
- Rendimiento nativo - Animaciones fluidas, respuestas instantáneas
- Gestión de medios - Vídeos o GIFs de ejercicios funcionando en todas las plataformas
- Prompts de instalación - Onboarding claro para usuarios no familiarizados con las PWA
- Integración de pagos - Facturación directa vía Lemon Squeezy (0% comisión plataforma vs 30% de las stores)
- Consistencia cross-platform - Experiencia idéntica en iOS, Android, desktop
Por qué elegí PWA en lugar de apps nativas
Los argumentos económicos son convincentes
App Stores tradicionales:
- Comisión del 30% en todas las transacciones (Apple, Google)
- Cuotas anuales de desarrollador ($99-$299)
- Sistema de compra in-app obligatorio
- Reparto de ingresos en suscripciones (año 1: 30%, año 2+: 19%)
PWA + Lemon Squeezy directo:
- 0% de comisión de plataforma
- Comisión de procesamiento Lemon Squeezy 5%+50¢
- Control total sobre la lógica de facturación
- Actualizaciones de pago instantáneas (sin retraso de 24-48h como en App Store)
Para una suscripción de $10/mes, conservas $7,00 con las app stores versus ~$9,00 con Lemon Squeezy. Eso es ~25% más de ingresos por cliente.
La realidad del desarrollo
| Característica | Apps nativas | PWA |
|---|---|---|
| Codebase | 2-3 separadas (iOS/Android/Web) | Codebase única |
| Actualizaciones | Revisión store (3-7 días) | Despliegue instantáneo |
| Distribución | Aprobación store requerida | Compartir URL directa |
| Instalación | Descargas 50MB+ | Assets cacheados 2-5MB |
| Soporte offline | Implementación manual | Estándar Service Worker |
¿Y las soluciones cross-platform?
Antes de apostar todo por PWA, evalué las principales alternativas cross-platform:
React Native / Flutter: Prometen "escribe una vez, ejecuta en todas partes" pero todavía requieren:
- Pipelines de build separados para iOS y Android
- Código específico de plataforma para funcionalidades nativas
- Envíos y aprobaciones en las app stores
- Descargas de app de 40-60MB+
- Aprender Dart (para Flutter) - un nuevo lenguaje con un ecosistema más pequeño que JavaScript
Capacitor (Wrapper híbrido): Útil para acceder a API nativas, pero añade complejidad:
- Overhead de 15MB solo para el wrapper
- Todavía necesitas aprobación de app stores para distribución
- Pierdes la ventaja de actualizaciones instantáneas de las pure web apps
- Mejor usarlo como mejora opcional, no como requisito
PWA + Capacitor (mi elección): Construí WorkoutGen como una pure PWA primero, con un wrapper Capacitor opcional para funcionalidades nativas después. Esto da:
- La experiencia principal funciona en todas partes vía web (sin necesidad de store)
- Wrappers de apps nativas disponibles para descubrimiento en App Store
- Una sola codebase con mejoras nativas condicionales
- Despliegue de actualizaciones web instantáneo, actualizaciones nativas cuando sea necesario
Los desafíos técnicos (y sus soluciones)
Reproducción de vídeo en iOS: bugs antiguos de Safari
El problema que no muere:
Safari en iOS tiene bugs de reproducción de vídeo persistentes y sin corregir que atormentan a los desarrolladores PWA desde hace años. Esto no es especulación - está documentado en el propio bug tracker de WebKit:
Problemas recientes:
- iOS 26 (2025): Los vídeos se congelan en el primer frame después de cerrar y reabrir la PWA (WebKit Bug #300990)
- iOS 15-18 (en curso): Los streams de vídeo getUserMedia() muestran pantalla negra ocasionalmente en PWA (WebKit Bug #252465, reportado feb 2023, marcado "corregido" pero todavía ocurre)
Patrones históricos:
- Bug #232076 (2021): Vídeos desde blob URLs consumían 200-300MB de memoria para vídeos de 2MB, tardaban 10+ segundos en empezar. Corregido en iOS 15 tras meses de investigación.
- Bug #198277 (2019-2022): El audio se detenía cuando las PWA pasaban a segundo plano. Tardó 3 años en corregirse (finalmente resuelto en iOS 15.4, febrero 2022).
- Reportes Stack Overflow: Los vídeos servidos desde el directorio
/public/no se cargan tras refrescar o instalar PWA en Safari (iOS y macOS). Solución: alojar vídeos en CDN externo.
El patrón es claro: los bugs de vídeo/media en PWA Safari se reportan, a veces se marcan "corregidos", luego reaparecen en nuevas versiones iOS.
Mi estrategia de workaround:
Para WorkoutGen, implementé múltiples enfoques de respaldo:
- Usar atributo
crossorigin="anonymous"en todos los elementos de vídeo - Añadir
playsInline,mutedyautoPlaypara compatibilidad iOS - Precargar metadata de vídeo para reducir problemas de carga
- Monitorizar bugs específicos de versiones iOS y adaptarse (vídeos separados para iOS 26)
- Diseñar UX asumiendo que los vídeos pueden fallar - proporcionar instrucciones de texto como respaldo
La realidad frustrante: Bugs como el #198277 tardaron 3 años en corregirse, y problemas supuestamente "resueltos" como la reproducción de vídeo getUserMedia() (#252465) continúan apareciendo en nuevas versiones iOS. El soporte PWA de Apple claramente recibe menos prioridad que las API de apps nativas, con correcciones requiriendo "cambios a nivel de plataforma subyacente" en lugar de parches WebKit rápidos.
Sin eventos de instalación nativos en iOS
Problema: Safari no dispara eventos beforeinstallprompt, haciendo imposible:
- Mostrar prompts de instalación nativos programáticamente
- Detectar si los usuarios ya instalaron tu PWA antes de cargar la página
- Seguir el éxito de instalación sin acción manual del usuario
Mi solución: Overlays de tutoriales en vídeo
Como los usuarios iOS no pueden obtener prompts de instalación automáticos, construí un flujo de onboarding personalizado:
// Lógica de detección de WorkoutGen
const isPWAInstalled = () => {
// Detección iOS
if (window.navigator.standalone) return true
// Android/Desktop
if (window.matchMedia("(display-mode: standalone)").matches) return true
return false
}
// Mostrar tutorial para navegadores sin beforeinstallprompt
const browserInfo = detectBrowser()
if (!browserInfo.canInstallPWA && !isPWAInstalled()) {
showVideoTutorial() // Tutorial personalizado con instrucciones de instalación
}
WorkoutGen muestra tutoriales en vídeo cortos mostrando a los usuarios exactamente cómo tocar "Compartir → En pantalla de inicio" en iOS. Los vídeos son contextuales - instrucciones diferentes para iOS 26 vs versiones anteriores, Safari vs Chrome en iOS.
Esta inversión UX fue crítica: sin prompts de instalación nativos, la adopción PWA en iOS depende completamente de la educación del usuario.
Estrategia de caché del Service Worker
Los entrenamientos offline requieren caché agresivo. WorkoutGen usa Vite PWA Plugin con Workbox:
// Config real de apps/frontend/vite.config.ts
VitePWA({
registerType: "prompt",
workbox: {
globPatterns: ["**/*.{js,css,html,ico,png,svg,woff,woff2}"],
globIgnores: ["**/*.mp4", "**/*.webm", "**/*.gif", "**/*.jpg", "**/*.jpeg", "**/*.webp"],
maximumFileSizeToCacheInBytes: 40 * 1024 * 1024,
cleanupOutdatedCaches: true,
navigateFallback: null,
},
})
Decisiones clave:
- Cachear assets estáticos (JS, CSS, fuentes) para carga instantánea
- Excluir medios grandes del precache - obtener bajo demanda vía CDN
- Límite de caché de 40MB para evitar problemas de cuota de almacenamiento en iOS (Safari limita a 50MB)
registerType: 'prompt'permite a los usuarios controlar cuándo actualizar- Caché runtime para medios de ejercicio con estrategia CacheFirst
Esto da a WorkoutGen funcionalidad offline completa mientras permanece dentro de los límites de almacenamiento iOS.
Lo que me decepcionó de las PWA (y por qué sigo optimista)
Soporte navegador limitado para funcionalidades de instalación
Safari (iOS): Sin evento beforeinstallprompt, sin UI de instalación automática, sin banner de
instalación. Los usuarios deben navegar manualmente vía menú Compartir → "En pantalla de inicio" -
un proceso de 4 toques que la mayoría de la gente desconoce.
Firefox (Desktop): Soporte de instalación PWA inconsistente. Algunas versiones lo soportan, otras no. El botón de instalación aparece impredeciblemente.
Chrome/Edge (Android): Funcionan perfectamente con prompts de instalación nativos, pero son minoría globalmente cuando consideras la cuota de mercado iOS.
¿La solución? Construir UX de instalación personalizada para cada navegador. Para WorkoutGen, implementé:
- Tutoriales en vídeo mostrando los pasos de instalación iOS
- Detección de navegador para mostrar instrucciones relevantes
- Botones "Añadir a pantalla de inicio" personalizados que activan guías contextuales
- Flujos diferentes para iOS 26 vs versiones anteriores
Esto añade carga de desarrollo, pero es manejable comparado con mantener codebases nativas separadas.
La mayoría de usuarios no saben que las PWA existen
Este es el desafío mayor. Cuando le dices a alguien "instala esta app", esperan ir a una app store. Explicar "en realidad, toca este botón en tu navegador" crea fricción.
Encontré que dos estrategias funcionan:
- No la llames PWA - solo di "Añade a tu pantalla de inicio para la experiencia completa"
- Muestra, no cuentes - usa tutoriales en vídeo que demuestren el proceso de instalación
La educación del usuario es trabajo real, pero vale la pena para evitar comisiones de plataforma del 30% y obtener despliegue instantáneo.
Por qué sigo optimista a pesar de estas limitaciones
Aquí está la cosa: las PWA están masivamente infravaloradas para una clase específica de aplicaciones.
Para productos SaaS, plataformas de contenido, y herramientas como WorkoutGen:
- ✅ Despliegas en todas las plataformas desde el día uno (iOS, Android, desktop, web)
- ✅ Experiencia a pantalla completa, capaz de funcionar offline sin app stores
- ✅ Actualizaciones instantáneas sin retrasos de validación
- ✅ Conservas ~90% de ingresos en lugar del 70% (comisiones Lemon Squeezy vs app store)
- ✅ Relación directa con usuarios (sin intermediario de plataforma)
Sí, el soporte Safari es frustrante. Sí, la concienciación del usuario es baja. Pero estos son problemas UX solubles, no limitaciones técnicas fundamentales. La tecnología core funciona magníficamente - solo está infrautilizada porque la mayoría de desarrolladores toman apps nativas por defecto sin evaluar seriamente las PWA.
¿Y la IA/ChatGPT para planificación de entrenamientos?
ChatGPT puede generar programas de entrenamiento, pero falla para el entrenamiento serio:
- Sin biblioteca de vídeos de ejercicios - ChatGPT puede describir ejercicios, pero no puede mostrarte la forma correcta. WorkoutGen incluye una base de datos de vídeos construida a medida cubriendo todos los ejercicios de musculación principales con demostraciones profesionales.
- Progresión estructurada - Sin seguimiento de sobrecarga progresiva semanal, periodización, o semanas de descarga
- Acceso offline - Requiere Internet para cada consulta (inutilizable en gimnasios con mala señal)
- Memoria de personalización - Pierde contexto entre sesiones a menos que mantengas manualmente el historial de conversación
- Sin interfaz de ejecución - Obtienes un plan de texto, pero no un reproductor de entrenamiento que te guíe a través de series, tiempos de descanso, y orden de ejercicios
Construir la base de datos de vídeos de ejercicios de WorkoutGen tomó meses de trabajo - filmación, edición, compresión, y optimización para reproducción móvil. Esto es algo que la IA no puede proporcionar porque opera puramente en texto. La combinación de algoritmos estructurados + demostraciones visuales + acceso offline es donde las PWA brillan sobre la IA conversacional.
¿Y YouTube para tutoriales de entrenamiento?
YouTube es increíble para aprender ejercicios pero terrible para el entrenamiento real:
- Sin estructura de entrenamiento - Ensamblas 6 vídeos diferentes
- Los anuncios interrumpen las series - Mata el momento en medio del entrenamiento
- Sin seguimiento de progresión - No puedes registrar repeticiones, peso, o mejoras
- Internet requerido - Inutilizable en gimnasios con mala señal
Una PWA te da lo mejor de ambos: contenido de vídeo curado dentro de un sistema de entrenamiento estructurado.
Mis recomendaciones honestas
Para desarrolladores construyendo apps fitness/productivity/SaaS:
- Comienza con PWA a menos que absolutamente necesites API nativas (HealthKit, ARKit, Background App Refresh)
- Usa React 19 + Vite 7 + Vite PWA Plugin + Workbox para experiencia de desarrollador óptima
- Añade Capacitor después solo si quieres wrappers nativos opcionales para presencia en app store
- Prueba en dispositivos iOS reales durante todo el desarrollo - los bugs PWA de Safari te sorprenderán
- Presupuesta tiempo para UX de instalación personalizada (tutoriales en vídeo, detección navegador, prompts contextuales)
Para emprendedores y fundadores bootstrapped:
- PWA primero para MVP - Despliega en todas las plataformas en semanas, no meses, con una sola codebase
- La economía favorece las PWA - Conserva ~90% de ingresos (Lemon Squeezy 5%+50¢) vs 70% (app stores 30%)
- Iteración instantánea - Despliega actualizaciones en segundos sin retrasos de validación
- App stores opcionales - Añade wrappers nativos después para descubrimiento si es necesario, pero el producto principal funciona en todas partes vía web
- Considera apps nativas solo después de $10K+ MRR para justificar la carga
Para usuarios:
- Prueba WorkoutGen PWA: my.workoutgen.app
- Instala vía menú navegador: toca Compartir → "En pantalla de inicio" (iOS) o botón instalación navegador (Android)
- Funciona offline, pantalla completa, se siente como app nativa - sin descarga de 50MB+
El balance final
Después de construir WorkoutGen como PWA de producción, esto es lo que aprendí:
Lo bueno:
- ✅ Conserva ~25% más de ingresos por cliente - Lemon Squeezy 5%+50¢ vs App Store 30%
- ✅ Despliega en todas las plataformas desde una codebase - iOS, Android, desktop, web simultáneamente
- ✅ Despliega actualizaciones instantáneamente - Sin retrasos de validación (horas vs días)
- ✅ Funcionalidad offline completa - Los Service Workers cachean todo lo que los usuarios necesitan
- ✅ Velocidad de desarrollo más rápida - Sin toolchains de build nativos o API específicas de plataforma
Los desafíos:
- ⚠️ El soporte Safari PWA es frustrante - Bugs de reproducción de vídeo sin corregir desde hace años, API limitadas
- ⚠️ Sin prompts de instalación automáticos en iOS - Requiere UX personalizada y educación del usuario
- ⚠️ La compatibilidad navegador varía - Lo que funciona en Chrome puede romperse en Safari
- ⚠️ La concienciación del usuario es baja - La mayoría de la gente no sabe que las PWA existen
- ⚠️ Sin descubrimiento vía app store - Necesitas tráfico orgánico o adquisición pagada
El veredicto:
Las PWA están masivamente infravaloradas para casos de uso específicos: herramientas SaaS, apps de productividad, plataformas de contenido, y aplicaciones como WorkoutGen donde el acceso offline estructurado importa más que la colocación en app store.
La tecnología es madura y lista para producción. Los desafíos son principalmente UX y educación del usuario - problemas solubles, no limitaciones fundamentales. Si estás construyendo una app donde puedes generar tu propio tráfico y quieres evitar comisiones de plataforma, las PWA ofrecen una alternativa convincente al desarrollo nativo.
WorkoutGen demuestra que funciona a escala. Los 2-3 problemas (bugs Safari, educación usuario) quedan ampliamente superados por los beneficios: despliegue instantáneo, cero comisiones de plataforma, y alcance cross-platform verdadero.
Comienza un programa de fuerza real gratis
Genera un plan progresivo con videos y seguimiento. App gratuita. WorkoutGen Max añade sugerencias de carga IA, personalización completa y analíticas avanzadas.
Generar mi programa gratis →Guías de WorkoutGen para leer después
Para seguir con el mismo objetivo, lee también:
- ¿Cómo instalar WorkoutGen en iPhone y Android?
- Las Mejores Aplicaciones Gratuitas de Fitness y Entrenamiento 2025: Clasificación Honesta de un Entrenador
- Dónde Encontrar Planes de Fitness Gratuitos Que Realmente Se Ajusten a Tu Horario