Saltar al contenido
Volver a la colecciónJuan Martín ValenciaManizales · Colección 2026 · 8 piezas
Fotograma del video de la app de entrenamiento de Raw Fitness Club con una rutina ficticia.
Raw Fitness Club: otra pantalla del proyecto.
Raw Fitness Club: otra pantalla del proyecto.

Referencia 02 · Web, sistema de gestión y app de entrenamiento para gimnasios

Raw Fitness Club

En producción desde agosto de 2026Talla L · 4 piezas conectadas

Tres productos de un gimnasio en uno: la web que atrae visitantes, el sistema que lleva socios y cobros, y la app de entrenamiento que funciona sin internet.

Lo que la hace distinta: la app guarda cada serie primero en el teléfono y sincroniza después. Si falla la conexión, el entrenamiento no se pierde.

Lo quiero para mi proyecto

Qué resuelve

Que un gimnasio sepa quién pagó, cuándo vence cada plan y cómo va su caja.

El problema: un gimnasio vive entre cuadernos y hojas sueltas. No sabe con certeza quién pagó, cuándo vence cada mensualidad ni cómo va la caja.

Lo usan prospectos, socios, entrenadores, recepción y el dueño. También existe una edición de la app para quien entrena por su cuenta, separada de la marca del gimnasio.

Probador

Pruébalo aquí: dos videos con datos de ejemplo.

Qué mirar (3 pasos)

  1. Abre una rutina de ejemplo en la app de entrenamiento.
  2. Registra una serie y mira cómo arranca el descanso.
  3. Cierra con el resumen de la sesión y el progreso.

El probador es la demo o el video para que lo pruebes aquí. En Raw son dos videos: la app de entrenamiento y la web.

El sistema de gestión lo muestro solo con personas y movimientos ficticios, nunca con socios reales.

Demo con datos de ejemplo
Alternativa en texto
  • App: una rutina ficticia, una serie registrada con su carga, el cronómetro de descanso y el resumen al terminar.
  • Web: la presentación de planes, entrenadores, instalaciones y ubicación, y el formulario para agendar una visita.

Funciones

Qué hace cada uno de los tres productos.

Web pública

  • Consulta planes, entrenadores, instalaciones y ubicación.
  • Responde las preguntas frecuentes y explica la política de datos.
  • Agenda una visita con un formulario y abre WhatsApp con el contexto de la consulta.
  • Guarda de qué enlace llegó cada interesado, cuando el gimnasio configura el receptor de contactos.

Sistema de gestión

  • Inicia sesión como personal del gimnasio.
  • Busca y registra socios y abre la ficha de cada uno.
  • Gestiona planes y mensualidades.
  • Cobra, renueva, congela y termina congelaciones.
  • Imprime recibos y consulta ingresos y egresos.
  • Anula movimientos con motivo y deja el rastro.
  • Prepara los avisos de renovación y abre el chat de WhatsApp para que una persona los envíe.
  • Envía mensajes a la app del socio.
  • Gestiona la autorización de datos y las peticiones del titular.
  • Pantallas: Hoy, Socios, Ficha, Cobrar, Finanzas, Avisos y Ajustes.

App de entrenamiento

  • Crea rutinas y carpetas y busca ejercicios.
  • Registra series, cargas, repeticiones y descansos.
  • Muestra el entrenamiento anterior como referencia.
  • Guarda el historial, los récords, la racha, los retos y los logros.
  • Dibuja un mapa muscular propio y registra medidas corporales.
  • Exporta e importa tus datos.
  • Recupera una sesión interrumpida y sigue sin conexión; sincroniza cuando hay red.
  • Muestra el carné de membresía y los mensajes del gimnasio.

No incluido hoy

  • Asistencia por QR o registro de entradas: lo retiré.
  • Pasarela de pagos: el panel registra los pagos, no los cobra.
  • Agentes de IA: esta pieza no tiene.
  • Envío automático de WhatsApp: los avisos los envía una persona.

Depende de configuración externa

  • El receptor de contactos de la web es opcional. Si falta, el flujo sigue por WhatsApp.
  • Las notificaciones de descanso requieren configuración y el permiso del navegador.

Qué tiene detrás

Lo que pasa por dentro, en dos niveles. Elige el tuyo.

Nivel de lectura
  1. Alguien visita la web y agenda una visita. Se abre WhatsApp con el contexto y, si el gimnasio configuró un receptor, queda registrado de dónde llegó.
  2. En recepción, el sistema de gestión guarda cada cobro, vencimiento y recibo en Supabase.
  3. Cada mañana a las 8:00, hora de Bogotá, el sistema prepara los avisos de renovación: dos días antes y el día del vencimiento.
  4. Recepción abre el chat de WhatsApp con el mensaje ya escrito y lo envía una persona.
  5. El socio ve su mensualidad y los mensajes en la app. Entrena aunque falle la señal: todo se guarda en el teléfono y se sincroniza después.
  • La web es Astro. El panel (/gestion) y la app (/entreno) son islas de Svelte 5. No hay servidor Astro: el backend operativo está en Supabase.
  • La app guarda primero en IndexedDB con Dexie (11 almacenes locales) y sincroniza de forma desacoplada. La sesión interrumpida se recupera.
  • De la app al servidor: HTTP con identificador de dispositivo y testigo, Edge Function entreno en Deno, RPC a PostgreSQL y respuesta en JSON validado.
  • El panel usa la clave pública y la sesión de Supabase Auth; las consultas y RPC pasan por RLS (permisos por fila). La clave de servicio queda en el borde.
  • rw_generar_avisos corre a diario a las 08:00 de Bogotá y al abrir el panel. Los avisos son idempotentes. Las notificaciones push de descansos las despacha pg_cron y el borde las cifra y las envía al servicio push del navegador.
  • El dinero va en tipo numeric, las fechas son civiles y las anulaciones son auditables. La salud corporal se queda en el teléfono.
  • CSP con scripts por hash, HSTS, bloqueo de marcos, nosniff y política de referencias; scripts/comprobar-csp.mjs controla los hashes del HTML compilado.
  • No cuento como activo: n8n (queda un flujo heredado y el backend actual usa la Edge Function) ni una API de WhatsApp (solo enlaces y mensajes preparados).

Despiece · 4 piezas conectadas

  1. 01Web pública
  2. 02Sistema de gestión
  3. 03App de entrenamiento, una PWA: una app que se instala desde el navegador
  4. 04Servidor en Supabase

Supabase es la base de datos en la nube con permisos por persona. Una Edge Function es un pequeño programa en la nube que recibe las peticiones de la app.

Composición y cuidados

Composición · Nº 02

Composición

  • Astro: arma la web y las páginas.
  • Svelte 5: el panel y la app.
  • Tailwind CSS 4: los estilos.
  • Dexie sobre IndexedDB: guarda en el teléfono.
  • Supabase (Postgres y Auth): datos, sesión y permisos.
  • Edge Function en Deno: puente entre la app y la base.
  • pg_cron: avisos y descansos programados.
  • Sentry: errores del panel y la app.

Dónde vive

  • Cloudflare Workers con archivos estáticos para la web, el panel y la app.
  • Supabase para la base de datos, el login y la Edge Function.
  • La publicación se define en un workflow de GitHub Actions.

Cuidados

  • Los avisos programados y las notificaciones push necesitan configuración y permisos.
  • El receptor de contactos de la web es opcional.
  • Versiones declaradas como rangos en package.json, no versiones instaladas verificadas: Astro ^7.1.6, Svelte ^5.56.8, Tailwind ^4.3.3, Dexie ^4.4.4, Supabase JS ^2.116.0, Node >=22.
  • La documentación indica PostgreSQL 17.6; no consulté el servidor para confirmarlo.

Hecho en Manizales · 2026

Guía de tallas

Talla L: lleva 4 piezas conectadas por dentro. La regla: S de 1 a 2 piezas, M 3, L 4 y XL 5 o más. La letra es una etiqueta; el dato es el conteo.

  1. Web pública.
  2. Sistema de gestión.
  3. App de entrenamiento, una PWA: una app que se instala desde el navegador.
  4. Servidor en Supabase.

Cifras de tamaño (verificado en el repositorio el 2026-10-08)

  • 110 commits.
  • 201 archivos de código (incluyen pruebas; excluyen SQL y dependencias).
  • 18 migraciones SQL.
  • 24 tablas persistentes, deducidas del esquema final.
  • 11 almacenes locales en el teléfono.
  • 1 flujo de n8n heredado.

S de 1 a 2 piezas conectadas, M 3, L 4 y XL 5 o más. La letra es una etiqueta; el dato es el conteo.

Certificado

Las pruebas que respaldan esta pieza.

Verificado en el repositorio · 2026-10-08

  • 579pruebas escritas en 42 archivosFuente: conteo de test(/it( en archivos .test/.spec versionados
  • 24tablas en el esquemaFuente: create table rw_* en db/*.sql
  • 18migraciones SQLFuente: db/*.sql
  • 110commitsFuente: git rev-list --count HEAD

Evidencia (verificado en el repositorio el 2026-10-08)

  • 42 archivos de prueba y 579 pruebas escritas (conteo en el código). Cubren cálculos, persistencia, sesión, privacidad, sincronización, búsqueda, traducciones y presentación.
  • Un banco de pruebas SQL en memoria y una prueba del recorrido completo: petición HTTP, SQL y respuesta.
  • 1 workflow de integración continua, el sistema que corre las pruebas cada vez que se sube un cambio: revisa tipos, Svelte, Vitest, base de datos, borde, build y CSP. La auditoría de dependencias es informativa y no bloquea.
  • CSP con scripts por hash, la regla que le dice al navegador qué puede ejecutar la página, más HSTS, bloqueo de marcos y permisos restringidos.
  • Sentry sin trazas, sin grabación de sesiones y sin datos de usuario, cookies ni cabeceras.

Lo que no afirmo

  • Que las pruebas pasen: no las ejecuté.
  • Disponibilidad ni rendimiento en producción.
  • Cumplimiento legal: son mecanismos técnicos, no una certificación.
  • Asistencia por QR, pasarela de pagos ni agentes de IA.
  • Que Sentry reciba eventos: no lo verifiqué.

pruebas escritas (conteo en el código)

Lo quiero para mi proyecto

Un gimnasio completo en un producto

Si tienes un gimnasio, un club o cualquier negocio de mensualidades, esto se parece a lo que necesitas: web, caja y app en el mismo lugar.

Cuéntame cómo cobras y cómo avisas hoy, y vemos qué parte se parece a tu caso.

Lo quiero para mi proyectoVolver a la vitrina
Siguiente pieza de la colección · Ref. 03Silla LlenaUn recepcionista por WhatsApp que agenda, cancela y recuerda citas de barbería mientras el equipo trabaja.Talla XL · Sistemas y apps