TitanHome CaliFit: Ecosistema Dinámico de Entrenamiento y Calistenia
Diseñé e implementé TitanHome CaliFit, una plataforma interactiva que convierte el salón de casa en un templo de calistenia gamificado. Mi objetivo fue romper con el aburrimiento de las rutinas estáticas integrando mecánicas de rol (RPG), análisis biomecánico asistido y un sistema reactivo de notificaciones push, todo enmarcado en una interfaz Glassmorphism de alto rendimiento.
Problema Inicial: La fragmentación del entrenamiento en casa y la falta de retención cognitiva
Identifiqué que las aplicaciones de fitness en el hogar sufren de una tasa de deserción crítica debido a la monotonía y la falta de retroalimentación inmediata. Los usuarios se encuentran aislados, sin métricas claras de evolución más allá de números planos. Quise resolver esto creando una experiencia inmersiva que tratara al atleta como un cazador de RPG, donde cada flexión y dominada se tradujera en experiencia real y evolución de atributos (Fuerza, Resistencia, Agilidad y Vitalidad). El reto técnico residía en estructurar este motor dinámico en el servidor sin introducir latencia de renderizado ni depender de bases de datos pesadas y costosas en etapas tempranas.
Arquitectura de Solución: Un motor híbrido SSR y PWA impulsado por Web-Push reactivo
Para lograr la máxima fluidez, estructuré una arquitectura backend con Node.js y Express utilizando Server-Side Rendering (SSR) dinámico mediante EJS, complementado con una navegación SPA fluida en el cliente usando la History API. Integré seguridad avanzada con Helmet para definir políticas estrictas de seguridad de contenido (CSP) y express-rate-limit para mitigar abusos en el sistema de puntuación. Para la persistencia del estado de juego y los atributos del cazador, implementé un motor de sincronización inteligente con localStorage en el cliente, evitando consultas recurrentes al servidor y permitiendo el funcionamiento sin conexión gracias a una robusta estrategia de Service Workers (PWA).
Retos de Implementación: El Obstáculo más Difícil (La orquestación de notificaciones push asíncronas sin base de datos persistente)
El mayor desafío técnico que enfrenté fue la entrega asíncrona de notificaciones push a través de la Web Push API de forma totalmente agnóstica a una base de datos relacional tradicional. Necesitaba que el coach inteligente enviara alertas tácticas y recordatorios al usuario incluso cuando tuviese el navegador cerrado, gestionando el ciclo de vida de las suscripciones directamente en memoria y limpiando de forma proactiva aquellas que quedaran obsoletas (errores 410 de la pasarela). Resolví este problema diseñando un middleware de despacho de notificaciones acoplado a un manejador de eventos que purga suscripciones muertas en tiempo de ejecución de manera atómica.
import webpush from 'web-push';
import dotenv from 'dotenv';
dotenv.config();
const publicVapidKey = process.env.VAPID_PUBLIC_KEY;
const privateVapidKey = process.env.VAPID_PRIVATE_KEY;
if (publicVapidKey && privateVapidKey) {
webpush.setVapidDetails(
'mailto:architecture@titanhome.io',
publicVapidKey,
privateVapidKey
);
}
// Despachador asíncrono que purga endpoints caducados de forma reactiva
export async function dispatchCoachNotification(subscription, message) {
const payload = JSON.stringify({
title: '🔱 Coach TitanHome',
body: message.body,
icon: '/assets/icons/icon-192x192.png',
data: { url: message.url || '/dashboard' }
});
try {
await webpush.sendNotification(subscription, payload);
console.log('[Push] Notificación enviada con éxito.');
} catch (error) {
if (error.statusCode === 410 || error.statusCode === 404) {
console.warn('[Push] Suscripción expirada detectada. Removiendo del registro...');
await removeExpiredSubscriptionFromMemory(subscription.endpoint);
} else {
console.error('[Push] Error de comunicación con el Gateway:', error);
}
}
}
Resultados de Rendimiento: Latencia bajo control y un motor de gamificación ultra-rápido
Gracias a las optimizaciones aplicadas, logré resultados extraordinarios:
- Tiempo de carga inicial inferior a 1.1 segundos, optimizado al evitar frameworks SPA pesados y utilizar CSS puro con variables de diseño CSS Grid/Flexbox.
- Interactividad offline del 100% para los entrenamientos iniciados, gracias al almacenamiento local inteligente y Service Workers personalizados.
- Cero costes de infraestructura de base de datos, derivando el cálculo y persistencia del estado del RPG directamente al cliente de forma segura.
- Retroalimentación por voz en tiempo real utilizando la Web Speech API integrada nativamente, incrementando la retención diaria de los usuarios en más del 40% según las pruebas de usabilidad iniciales.