- Cliente
- Team Garin (asesoría deportiva online)
- Lo que hicimos
- Plataforma de asesoría deportiva: app del alumno (entrenamiento, nutrición, comunidad, gamificación, cuestionarios) y panel web del equipo (planes, seguimiento, moderación), sobre una base multi-asesoría con cobro recurrente — más la migración de la base de la generación anterior
- Plataforma
- App iOS y Android (React Native · Expo · base local RxDB) · Panel web (React + Vite) · API NestJS · MongoDB · AWS (Elastic Beanstalk, S3) · Stripe · Expo Push
- 1.168 alumnos
- registrados en la plataforma al 02/09/2026 — y, desde octubre, toda la base opera en la app nueva
- 416 mil series
- registradas con peso y repeticiones (99% completas) al 02/09/2026, migradas con los mismos identificadores
- 49% · 62%
- de la base entrenó en la semana y en el mes, al 02/09/2026: el uso que heredó la nueva generación
- 444 alumnos activos
- en Team Garin Pro, la app nueva, al 23/10/2026
El punto de partida
Team Garin vende acompañamiento: entrenador y nutricionista arman el plan, el alumno lo ejecuta y el equipo ajusta. La primera generación de la plataforma, también construida por Epicora, cumplía con eso — y la base de datos mostraba que cumplía bien. Al 02/09/2026 había 37.237 entrenamientos registrados, con un promedio de 7 ejercicios y 11 series por sesión y el peso completado en el 99% de las series. El alumno no marcaba asistencia: registraba lo que levantaba. Del otro lado, un equipo de 8 personas operando el día a día hacía unas 1.220 revisiones de plan por mes.
La medición se hizo justamente para encontrar lo que el uso no mostraba — y el producto anterior no tenía telemetría de navegación, solo lo que queda registrado en la base, así que cada número es un piso. Aun así, los huecos aparecieron claros. Y había un límite de arquitectura: la primera generación corría una instalación y una base de datos por asesoría, con app propia en la tienda. Le servía a Team Garin; no le servía a la siguiente asesoría.
- El 39% de la base estaba parada — 292 alumnos inactivos o que nunca entrenaron — y ningún disparador automático para traerlos de vuelta: las dos únicas notificaciones del sistema salían cuando el equipo publicaba un plan.
- La baja se decidía en el primer mes: el 49% de quienes se fueron nunca registró un entrenamiento. El desafío no era retener a quien entrenaba — era activar a quien llegaba.
- El diario de comidas no prendió: solo el 25% de quienes tenían plan registraba alguna comida en el mes, y en caída, y el 86% de las dietas diarias que el sistema pregeneraba nunca recibía un registro.
- Funciones sin uso y datos que faltaban: el módulo de cuestionarios tenía cero respuestas, el modelo de datos no vinculaba al alumno con su entrenador o nutricionista, y la percepción de esfuerzo había dejado de guardarse sin que nadie lo notara.
El punto de inflexión
La decisión fue diseñar la nueva generación sobre el retrato, no sobre una lista de deseos. El núcleo — el entrenamiento registrado serie por serie — quedó intacto y ganó lo que le faltaba alrededor. El alumno que se aleja necesita un motivo para volver que no dependa de que el equipo se acuerde de él: de ahí la gamificación, que puntúa entrenamiento completado, récord personal superado, comida registrada, cuestionario respondido y publicación en la comunidad, con logros por racha de días, volumen y antigüedad y un ranking general y trimestral; y la comunidad, donde el alumno publica su entrenamiento, comparte el logro y recibe likes y comentarios de quienes entrenan con él.
Cada hallazgo de la base se convirtió en una decisión en el sistema nuevo. La dieta del día dejó de pregenerarse para todos los alumnos y ahora nace en el primer registro o la primera lectura. El vínculo del alumno ganó profesionales responsables, y el panel pasó a filtrar la cartera por colaborador. El entrenamiento volvió a guardar la percepción de esfuerzo, y el cuestionario pasó a ser seguimiento recurrente — semanal, quincenal o mensual, con envío masivo y revisión del equipo. Y la comida registrada y el cuestionario respondido ahora suman puntos: el comportamiento que el producto anterior no reforzaba ganó refuerzo.
La tercera decisión fue de arquitectura: una plataforma, muchas asesorías. Cada registro lleva la asesoría a la que pertenece, y el aislamiento no depende de que cada consulta lo recuerde — un plugin de base de datos inyecta el filtro en toda lectura y escritura, y una consulta sin asesoría definida falla en lugar de devolver los datos de todos. Encima de eso: cobro recurrente vía Stripe, alta self-service de asesorías, tema y logo por espacio de trabajo y alumno con una sola cuenta en más de una asesoría. Team Garin es el primer espacio de trabajo; la base para el siguiente ya está en el código.
La app nueva es otra ficha en la tienda: nadie recibe una actualización, cada alumno tiene que descargarla. Por eso la base no cambió de una vez. La migración corrió por lotes definidos por la asesoría, con el sistema anterior atendiendo a quien todavía no había cambiado. Cada lote pasa por un ensayo en seco antes de escribir, llega con los mismos identificadores de la base anterior — el historial de entrenamiento, dieta y peso apunta a los mismos registros, sin remapeo — y con la misma contraseña, y termina con una reconciliación automática colección por colección. Los lotes registrados cerraron sin divergencias, y en octubre toda la base ya operaba en la app nueva.
Lo que entregamos
01 · La app del alumno, que funciona sin señal en el gimnasio
Entrenamiento, plan de alimentación, peso e historial viven en el dispositivo, en una base local sincronizada con la API: el alumno entrena y registra sin conexión, y todo sube cuando vuelve la señal — incluidos los puntos, porque el crédito ocurre en el servidor cuando llega la sincronización. Durante el entrenamiento, el iPhone muestra la sesión en la pantalla bloqueada; en la pantalla de inicio, un widget con el mapa de calor de los entrenamientos. La última carga aparece en la prescripción, el récord personal se detecta serie por serie y la evolución de cada ejercicio se vuelve gráfico. Al terminar, el entrenamiento se convierte en una imagen lista para compartir.
02 · Gamificación con reglas de contabilidad
Puntos por entrenamiento completado, récord superado, comida completa, cuestionario respondido y publicación en la comunidad, con el valor de cada uno definido por la asesoría; logros automáticos (racha de días, volumen, récords, entrenamientos, comidas, cuestionarios, antigüedad) y manuales, otorgados por el equipo; ranking general y trimestral, con cada trimestre cerrado y guardado automáticamente. Debajo, un libro mayor inmutable: los puntos nunca se borran ni se editan, y una corrección es un asiento de reversión, como en la tarjeta. Cambiar la tabla de puntos no reescribe el pasado, el mismo entrenamiento nunca puntúa dos veces y dejar de entrenar reinicia la racha, pero no quita puntos.
03 · La comunidad de la asesoría, con moderación de verdad
Feed con texto y hasta 4 fotos por publicación, likes, comentarios, publicaciones fijadas por el equipo y logros compartidos desde la app. Los likes llegan agrupados, como en Instagram, y el alumno activa o desactiva cada categoría de notificación — comunidad, gamificación, seguimiento, cuenta. El equipo modera desde el panel: cada denuncia entra en una cola de Contenido reportado, con acciones para ocultar, mantener o restringir el acceso del alumno a la comunidad; y el alumno puede bloquear a otro alumno, como exige la App Store a las apps con contenido de usuarios. Las fotos de las publicaciones son privadas y solo se abren con un enlace firmado y temporal.
04 · El panel del equipo: toda la cartera y cada alumno por dentro
El panel abre en un dashboard operativo: alumnos activos frente al límite del plan, cuestionarios esperando revisión, denuncias por moderar y el podio del ranking. Al abrir un alumno, el equipo entra en el Modo Alumno — resumen, entrenamiento, nutrición, cuestionarios, puntuación, material de apoyo y suscripción en un solo lugar. El cuestionario de seguimiento sale recurrente y masivo, con comparativo de fotos de evolución; los planes salen de plantillas de la asesoría; y cada alumno tiene sus profesionales responsables, el corte que faltaba para ver la cartera de cada entrenador y nutricionista.
Cómo lo garantizamos
Una migración que solo escribe después de ensayar
El script de migración lee la base anterior y nunca escribe en ella: antes del primer dato nuevo, volver atrás es solo reabrir el sistema anterior. Cada ejecución empieza en modo seco, que muestra lo que va a pasar y se detiene ante cualquier bloqueo — correo que ya existe en la plataforma, identificador numérico ocupado, ítem de catálogo faltante. La escritura es idempotente (correrla de nuevo reescribe lo mismo, no duplica) y termina con una reconciliación que cuenta, colección por colección, lo que llegó al destino.
La suciedad del legado, resuelta sin perder un documento
El ensayo contra la base real encontró lo que la base anterior toleraba y la nueva no: 38 correos repetidos en 115 cuentas, restos de invitaciones reenviadas. Ningún correo tenía dos cuentas vivas; la cuenta activa se quedó con la dirección, los restos ya borrados recibieron una dirección reservada que nunca se entrega, y cada documento mantuvo el mismo identificador. Lo mismo valió para perfiles huérfanos y numeración repetida: cada corrección quedó en el informe de la migración, nada se descartó en silencio.
Datos de salud cerrados por defecto
Fotos de evaluación, documentos y fotos de publicaciones viven en almacenamiento privado, por asesoría y por usuario, y solo se abren con enlaces firmados cuya duración depende de la sensibilidad — 5 minutos para fotos de cuestionario, 15 para documentos. La API verifica que el archivo citado pertenezca a quien lo envía, y el aislamiento entre asesorías se impone en el acceso a la base, no pantalla por pantalla. La eliminación de cuenta ocurre dentro de la app, como exigen las tiendas, y los errores de producción llegan a un monitoreo propio.
El resultado
El número que más importa en este caso todavía se está escribiendo — por eso viene con fecha. Al 02/09/2026, aún en la generación anterior, la mitad de la base entrenaba cada semana, unos 156 alumnos por día, con ~11 entrenamientos por mes por alumno activo. Ese es el piso: el uso que ya existía sin comunidad, sin gamificación y sin ningún disparador para el alumno parado. Desde octubre, toda la base de Team Garin entrena y publica en Team Garin Pro, publicada en la App Store y en Google Play: al 23/10/2026 eran 444 alumnos activos en la app nueva y 204 publicaciones en la comunidad.
Y la plataforma que hoy sostiene la asesoría no es una app de una sola asesoría. Aislamiento por espacio de trabajo, cobro recurrente, alta self-service y catálogo de temas ya están en el código, con Team Garin como primer inquilino. El próximo paso es convertir esa base en producto para otras asesorías — sobre la operación real de una asesoría con más de mil alumnos registrados, no sobre una demo.
¿Tus alumnos registran el entrenamiento pero no tienen un motivo para volver mañana?
Epicora construye la plataforma de tu operación a partir del uso medido — una app que funciona en el gimnasio, gamificación y comunidad con reglas de verdad — y con la base lista para el día en que se convierta en producto.
