TEPY
Fisioterapia con IA para el dolor muscular: indica dónde te duele, recibe un plan de automasaje y ejercicios, y síguelo en video.
- Rol
- Desarrollador fullstack: toda la app móvil y sus Cloud Functions
- Cliente
- TEPY
- Periodo
- 2023 – actualidad
- Plataformas
- iOS y Android desde una única base de código Flutter
El producto
TEPY convierte la primera visita al fisioterapeuta en una conversación con el teléfono. Le muestras sobre un cuerpo en 3D dónde te duele, cuánto, desde cuándo, qué sientes y qué movimientos lo desencadenan; te responde con un plan de sesiones de automasaje y ejercicio repartidas a lo largo de las semanas siguientes.
Cada sesión es una lista de reproducción de videos cortos con temporizador, series y repeticiones, e indicaciones habladas. Alrededor del plan hay rutinas para el día (calentamiento, vuelta a la calma, movilidad, recuperación muscular, una pausa en el escritorio) y una pantalla de progreso que lleva la cuenta.
- 95%
- de los commits de la app son míos (547 de 574)
- 65k
- líneas de Dart, sin contar el código generado
- 7
- idiomas en la interfaz
- 3 años
- de desarrollo continuo, desde mayo de 2023
Recorrido
La app en acción
Elige una grabación o salta directamente a un capítulo.

Grabado a partir del código actual en tamaño de teléfono, sobre un backend sustituto con los ejercicios y videos de la propia app. Sin sonido.
Qué hace
De «me duele aquí» a un plan que sigues
01
Un onboarding que prepara el plan
Inicio de sesión con Apple o Google, o un código de empresa para los empleados de empresas asociadas. El consentimiento llega con una explicación clara de lo que el algoritmo hace y no hace. Después, un perfil breve (edad, cuerpo, tipo de jornada laboral, nivel de actividad, deportes y el material que tienes), que el backend usa para elegir los ejercicios.
02
El dolor, situado sobre un cuerpo en 3D
El cuerpo se puede girar y ampliar hasta que el toque cae en el punto exacto, que el backend asigna a una zona. La intensidad en una escala de 0 a 10 con una descripción para cada nivel, desde cuándo dura, las sensaciones alrededor y qué movimientos duelen y en qué punto; cada prueba se muestra como un video en bucle.
03
Un plan que sigue al dolor
El nivel de dolor más alto decide la duración del plan, de tres a unas siete semanas, y qué días son de automasaje, de ejercicios o de descanso. Cuando cambian los puntos de dolor, el plan pide que se recalcule; la franja semanal muestra lo pendiente y lo completado.
04
Sesiones en video a pantalla completa
Una sesión es una lista de reproducción. Cada ejercicio se reproduce a pantalla completa con un temporizador o un contador de repeticiones, indicaciones habladas y los detalles a un solo gesto; para pasar al siguiente basta con deslizar hacia arriba. Si se sale a mitad, el progreso se guarda para más tarde.
05
Rutinas para el resto del día
Calentamiento, vuelta a la calma, movilidad y recuperación muscular se crean a petición a partir de las zonas del cuerpo a trabajar y del material disponible. El área de bienestar añade rutinas cortas para la mañana, el escritorio y la noche.
06
Progreso y suscripción
La racha, el tiempo dedicado, los ejercicios realizados y una puntuación de bienestar muestran si el plan se cumple de verdad. El acceso completo es una suscripción a través de App Store o Google Play, verificada en el servidor antes de que se desbloquee nada.
Por dentro
Cómo se construyó
Estado y navegación
Riverpod en todo el proyecto, con providers generados y modelos inmutables (freezed, json_serializable). Una única redirección de go_router decide cada punto de entrada (inicio de sesión, consentimiento, perfil por completar, actualización obligatoria), para que un deep link o un reinicio lleven siempre al punto en que realmente se encuentra la cuenta.
Firebase y las funciones que hay detrás
Auth para el inicio de sesión con Apple, Google y enlace por correo; Firestore para el plan, las sesiones y el progreso del usuario; Crashlytics y Analytics. Las Cloud Functions que escribí junto con la app verifican en el servidor las suscripciones de App Store y Google Play, sintetizan las indicaciones habladas y envían los recordatorios programados. La lógica clínica (valoraciones, programas, selección de ejercicios) vive en una API REST construida por el equipo de backend.
Mantener una app de salud lista para publicar
Pruebas de integración con Patrol en el simulador de iOS y en un emulador de Android con páginas de 16 KB, la configuración que ahora exige Google Play. Una revisión de cumplimiento de la Ley de IA de la UE y de la normativa sobre dispositivos médicos: avisos de transparencia, redacción del consentimiento y nada que parezca un diagnóstico.
Grabar una app en producción
La app es real. Todo lo que muestra, no.
TEPY tiene detrás usuarios reales, datos de salud reales y una suscripción de pago. Nada de eso tiene cabida en un portfolio, así que las grabaciones usan una copia del código actual que funciona por sí sola.
- 1
El código actual, compilado para el navegador
Una compilación de Flutter web en tamaño de teléfono, configurada para creer que se ejecuta en un iPhone. Lo que solo existe en un teléfono (App Store, las notificaciones push, la solicitud de seguimiento, los informes de fallos) se reemplaza por pequeños sustitutos.
- 2
Firebase sin Firebase
El inicio de sesión y la base de datos funcionan sobre las implementaciones falsas en memoria que el proyecto ya usa en sus pruebas; una de ellas necesitó un parche de dos líneas para funcionar en una compilación de producción. Un parámetro en la URL carga o bien un primer arranque, o bien un usuario habitual con unas semanas de historial.
- 3
Un sustituto de la API REST
El cliente HTTP se cambia por uno que responde dentro de la app, con las rutas y las estructuras JSON que esperan los modelos: zonas de dolor, pruebas de movimiento, planes, rutinas y veinte ejercicios del servicio, con los nombres y los puntos clave que les da su catálogo.
- 4
Los medios de la propia app, grabados sin conexión
Las imágenes y el video de inicio de sesión son los que vienen incluidos en la app. Los videos de ejercicios, de pruebas de movimiento y de automasaje, sus miniaturas y los iconos vienen de la CDN desde la que la app los reproduce en streaming: un script los descargó una sola vez, los redujo y los incluyó en la demo. La herramienta de grabación rechaza cualquier petición que salga de la máquina, así que ninguna toma puede llegar al servicio real.
El logotipo, la interfaz, el modelo 3D del cuerpo, las imágenes, los ejercicios y sus videos son los de la propia app. El usuario, los puntos de dolor, los planes y el progreso son contenido de ejemplo creado para este portfolio.

Aquí no hay demo que probar: TEPY está en producción, así que esta página muestra grabaciones de una copia que funciona por sí sola.
Todas las pantallas
La colección completa de capturas
Inicio de sesiónApple, Google o un código de empresa. El fondo es un video en bucle. Cómo funciona y consentimientoLo que el algoritmo hace y lo que no hace, antes que nada. PerfilFecha de nacimiento, peso y altura en selectores de estilo nativo. Jornada laboralLa postura durante el día condiciona el programa. DeportesLista con búsqueda; la elección ajusta los calentamientos y la recuperación. Perfil completoSiguiente paso: registrar dónde duele, ahora o más tarde. SuscripciónProductos de la tienda con precios localizados (precios de ejemplo en la demo). SuscritoEl backend confirma la compra antes de que la app se desbloquee. InicioEl plan de la semana, a partir de hoy. HoyEl plan de la semana y la sesión de hoy. El punto exactoVista ampliada: el backend asigna el punto a una zona del cuerpo. CuántoIntensidad del dolor en una escala de 0 a 10, con una descripción para cada nivel. Qué se sienteSensaciones alrededor de la zona dolorosa. Qué movimientos duelenCada prueba sugerida se reproduce como un video en bucle. En qué punto del movimientoEn qué momento del movimiento empieza el dolor. ResumenTodo lo registrado para este punto de dolor, editable antes de confirmar. Plan desactualizadoLos puntos de dolor cambiaron: el plan pide que se recalcule. Plan nuevoLos días de automasaje y de ejercicio siguen el nivel de dolor. La sesión de hoyLa lista de reproducción del día, con tiempos e indicaciones. ReproductorA pantalla completa, con temporizador, indicaciones de audio y el siguiente ejercicio deslizando hacia arriba. Área de fitnessMovilidad, recuperación muscular, calentamiento y vuelta a la calma. Zonas a trabajarLa rutina se crea a partir de las zonas del cuerpo elegidas… Material disponible…y del material que tiene el usuario. Rutina de movilidadLa lista de reproducción generada. EjercicioTemporizador, series y repeticiones, detalles del ejercicio a petición. Área de bienestarAutomasaje, ejercicios guiados y rutinas cortas para el día. ProgresoRacha, tiempo dedicado, ejercicios realizados y una puntuación de bienestar. MenúPlan y suscripción, tutoriales, páginas legales.
Siguiente caso de estudio
Re.corder →