Skip to content

Verificación Manual

Esta guía proporciona un checklist exhaustivo para verificar manualmente que todos los componentes de Vitality Gym funcionan correctamente después de un despliegue o cambio significativo.

  • Browser DevTools: Para inspeccionar requests y errores de consola
  • Cliente HTTP (Postman/Insomnia/Thunder Client): Para probar endpoints directamente
  • Terminal: Para verificar logs de contenedores

Terminal window
# Verificar que todos los servicios están corriendo
dokploy status
# Ver logs en tiempo real
dokploy logs api --follow
dokploy logs app --follow
Terminal window
# El endpoint /health debe devolver status OK
curl -s https://api.vitality-gym.com/health | jq
# Respuesta esperada:
# { "status": "ok", "timestamp": "..." }
  1. Acceder al contenedor de API
  2. Ejecutar una consulta de prueba a la base de datos
  3. Verificar respuesta exitosa
Terminal window
# Acceder al contenedor
dokploy exec api sh
# Dentro del contenedor, verificar conexión
bunx prisma db execute --stdin <<< "SELECT 1 as connection_test"

Respuesta esperada: Una fila con el valor 1 o la fecha/hora actual sin errores.


  1. Acceder al contenedor de API o Redis
  2. Ejecutar comando PING
  3. Verificar respuesta PONG
Terminal window
dokploy exec api sh -c "redis-cli -h redis ping"
# O desde el contenedor de Redis
dokploy exec redis redis-cli ping

Respuesta esperada: PONG


  1. Verificar que las variables SMTP están configuradas
  2. Probar envío de email desde la aplicación
  3. Verificar llegada del email
Terminal window
# Verificar variables de entorno SMTP en el contenedor
docker exec -it vitality-api printenv | grep SMTP
# Deberías ver:
# SMTP_HOST=mail.vitality-gym.com
# SMTP_PORT=587
# SMTP_USER=noreply@vitality-gym.com
# SMTP_PASS=***

Respuesta esperada: Conexión exitosa al puerto 587 y email recibido en la prueba funcional.


  1. Abrir el frontend en el navegador
  2. Abrir DevTools → Network
  3. Verificar que las peticiones al API responden correctamente
// En la consola del navegador (F12 → Console)
fetch('https://api.vitality-gym.com/health')
.then(r => r.json())
.then(console.log)
.catch(console.error)
// Respuesta esperada: { status: "ok", timestamp: "..." }

Respuesta esperada: Health check OK y headers CORS correctos.


Checklist de Conectividad:

  • API puede conectar a PostgreSQL (consulta retorna datos)
  • API puede conectar a Redis (PING retorna PONG)
  • API puede conectar al servidor SMTP (puerto 587 accesible, emails se envían)
  • Frontend puede alcanzar el API (health check OK, CORS configurado)

  1. Navegar a https://testing.app.vitality-gym.com/auth/register
  2. Completar el formulario con datos de prueba
  3. Verificar que se recibe el email de verificación
  4. Hacer clic en el enlace de verificación
  5. Confirmar que redirige correctamente al login

Checklist:

  • Formulario valida campos correctamente
  • Email de verificación llega en menos de 2 minutos
  • El enlace de verificación funciona
  • No hay errores en la consola del navegador
  1. Navegar a https://app.vitality-gym.com/auth/login
  2. Ingresar credenciales válidas
  3. Verificar redirección al dashboard

Checklist:

  • Login exitoso redirige al dashboard
  • Credenciales incorrectas muestran error apropiado
  • Token se guarda correctamente (verificar cookies)
  • Sesión persiste después de refrescar la página
  1. Navegar a login y hacer clic en “Continuar con Google”
  2. Autenticarse con cuenta de Google
  3. Verificar redirección exitosa

Checklist:

  • Popup de Google aparece correctamente
  • Después de autenticar, redirige al dashboard
  • Usuario se crea/actualiza en la base de datos
  1. Navegar a https://app.vitality-gym.com/auth/forgot-password
  2. Ingresar email registrado
  3. Verificar llegada del email
  4. Hacer clic en el enlace y establecer nueva contraseña
  5. Probar login con la nueva contraseña

Checklist:

  • Email de recuperación llega
  • Enlace expira después del tiempo configurado
  • Nueva contraseña funciona para login
  • Contraseña antigua ya no funciona
  • Botón de logout limpia la sesión
  • Usuario es redirigido al login
  • No puede acceder a rutas protegidas después del logout

  1. Acceder al panel de administración
  2. Navegar a la sección de entrenadores
  3. Crear al menos un entrenador de prueba
  4. Verificar que aparece en la lista

Checklist:

  • CRUD de entrenadores funciona
  • Datos del entrenador se guardan correctamente
  • Entrenador aparece disponible para asignar a clases
  1. Navegar a la gestión de clases
  2. Crear una clase de prueba asignando un entrenador
  3. Configurar horario y capacidad
  4. Verificar que aparece en el calendario

Checklist:

  • Crear nueva clase funciona
  • Editar clase existente funciona
  • Clase aparece en el calendario público
  • Cancelar clase funciona
  1. Navegar a la gestión de rutinas
  2. Crear una rutina de prueba con ejercicios
  3. Asignar la rutina a un usuario de prueba
  4. Verificar que el usuario puede verla

Checklist:

  • Crear rutina con ejercicios funciona
  • Asignar rutina a usuario funciona
  • Usuario ve la rutina en su dashboard
  1. Verificar que existen planes de membresía configurados
  2. Asignar manualmente una membresía a un usuario de prueba
  3. Verificar que el usuario tiene acceso

Checklist:

  • Ver todas las membresías
  • Asignar membresía manual funciona
  • Ver historial de pagos
  • Generar reportes (si aplica)
  • Lista de usuarios carga
  • Búsqueda y filtros funcionan
  • Editar usuario funciona
  • Asignar roles funciona
  • Desactivar usuario funciona

  1. Hacer login y navegar al dashboard
  2. Verificar que todos los componentes cargan
  3. Abrir DevTools y verificar que no hay errores rojos

Checklist:

  • Tarjeta de perfil muestra datos correctos
  • Carrusel de ejercicios carga
  • Carrusel de rutinas muestra rutinas asignadas
  • Carrusel de clases muestra reservas
  • Estadísticas de racha se muestran correctamente
  1. Navegar al perfil del usuario
  2. Editar información (nombre, avatar, etc.)
  3. Guardar cambios
  4. Refrescar y verificar persistencia

Checklist:

  • Datos del perfil se cargan correctamente
  • Edición guarda los cambios
  • Upload de avatar funciona
  • Cambios se reflejan inmediatamente

  1. Navegar al calendario de clases
  2. Verificar que las clases se muestran
  3. Filtrar por tipo o instructor

Checklist:

  • Calendario muestra clases disponibles
  • Filtros funcionan correctamente
  • Se muestra disponibilidad de cupos
  1. Seleccionar una clase disponible
  2. Confirmar la reserva
  3. Verificar que aparece en “Mis Clases”
  4. Verificar que el cupo disminuye

Checklist:

  • Reserva se confirma exitosamente
  • Notificación de confirmación aparece
  • Clase aparece en el historial del usuario
  • No permite reservar clases llenas
  1. Ir a “Mis Clases” o al historial de reservas
  2. Seleccionar una reserva activa
  3. Cancelar la reserva
  4. Verificar que el cupo se libera

Checklist:

  • Cancelación exitosa
  • Cupo se libera para otros usuarios
  • Reserva ya no aparece como activa

  • Lista de ejercicios carga correctamente
  • Imágenes/videos de ejercicios se muestran
  • Filtros por grupo muscular funcionan
  • Búsqueda por nombre funciona
  • Usuario puede ver sus rutinas asignadas
  • Detalles de rutina muestran ejercicios
  • Instrucciones y series/repeticiones son visibles
  1. Seleccionar una rutina o ejercicio
  2. Registrar un entrenamiento (peso, repeticiones, etc.)
  3. Guardar el log
  4. Verificar en el historial

Checklist:

  • Formulario de registro funciona
  • Datos se guardan correctamente
  • Historial muestra registros anteriores
  • Racha de entrenamientos se actualiza

  • Usuario puede ver su membresía actual
  • Fecha de vencimiento es correcta
  • Estado (activa/expirada) se muestra correctamente
  1. Navegar a la sección de membresías
  2. Seleccionar un plan
  3. Proceder al pago (usar tarjeta de prueba si es sandbox)
  4. Completar la transacción
  5. Verificar que la membresía se activa

Checklist:

  • Planes de membresía se muestran con precios
  • Widget de Wompi carga correctamente
  • Pago exitoso activa la membresía
  • Webhook de Wompi procesa la transacción
  • Historial de pagos muestra la transacción
ResultadoNúmero de Tarjeta
Aprobada4242 4242 4242 4242
Rechazada4111 1111 1111 1111
Pendiente4012 8888 8888 1881

CVV: Cualquier 3 dígitos, Fecha: Cualquier fecha futura


  1. Verificar que el navegador solicita permiso de notificaciones
  2. Aceptar el permiso
  3. Generar una notificación (reservar clase, lograr racha, etc.)
  4. Verificar que la notificación llega

Checklist:

  • Service Worker se registra correctamente
  • Suscripción push se crea
  • Notificaciones llegan al dispositivo
  • Clic en notificación abre la app
  • Badge de notificaciones muestra contador
  • Lista de notificaciones carga
  • Marcar como leída funciona
  • Borrar notificaciones funciona

Verificar que se envían emails para:

  • Verificación de cuenta
  • Recuperación de contraseña
  • Confirmación de reserva
  • Recordatorio de clase
  • Membresía próxima a expirar

  1. Registrar un entrenamiento
  2. Verificar que la racha incrementa
  3. Verificar el progreso en el perfil

Checklist:

  • Racha actual se muestra correctamente
  • Mejor racha histórica se guarda
  • Indicadores visuales son correctos
  • Logros desbloqueados aparecen en el perfil
  • Notificación de nuevo logro funciona
  • Progreso hacia próximo logro es visible

Terminal window
# Health check
curl -s https://api.vitality-gym.com/health
# Lista de clases públicas (si existe)
curl -s https://api.vitality-gym.com/api/v1/classes
Terminal window
# Obtener token primero
TOKEN=$(curl -s -X POST https://api.vitality-gym.com/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@test.com","password":"password123"}' | jq -r '.accessToken')
# Usar token en requests
curl -s https://api.vitality-gym.com/api/v1/users/me \
-H "Authorization: Bearer $TOKEN" | jq
Terminal window
# Hacer múltiples requests rápidos y verificar respuesta 429
for i in {1..100}; do
curl -s -o /dev/null -w "%{http_code}\n" https://api.vitality-gym.com/api/v1/auth/login \
-X POST -H "Content-Type: application/json" \
-d '{"email":"test@test.com","password":"wrong"}'
done | grep 429 | wc -l

PáginaTiempo Aceptable
Landing< 3s
Login< 2s
Dashboard< 3s
Lista de clases< 2s
MétricaScore Mínimo
Performance70+
Accessibility80+
Best Practices80+
SEO80+
Terminal window
# Ejecutar Lighthouse desde CLI
npx lighthouse https://app.vitality-gym.com --view

Terminal window
# Verificar headers de seguridad
curl -s -I https://api.vitality-gym.com | grep -E "(Strict-Transport|X-Frame|X-Content|Content-Security)"

Headers esperados:

  • Strict-Transport-Security
  • X-Frame-Options
  • X-Content-Type-Options
  • Content-Security-Policy
Terminal window
# Verificar que CORS permite solo orígenes autorizados
curl -s -I -X OPTIONS https://api.vitality-gym.com/api/v1/users/me \
-H "Origin: https://malicious-site.com" \
-H "Access-Control-Request-Method: GET" | grep -i access-control
  • Tokens CSRF se generan para mutaciones
  • Requests sin CSRF token son rechazados

Verificación Mínima (5 min)

  1. curl https://api.vitality-gym.com/health responde OK
  2. Frontend carga sin errores de consola
  3. Login funciona
  4. Dashboard carga con datos
  5. Una acción de escritura funciona (ej: reservar clase)

Verificación Completa (30 min)

  • Toda la sección de Autenticación (2.x)
  • Dashboard y perfil (3.x)
  • Reserva y cancelación de clase (4.x)
  • Registro de entrenamiento (5.x)
  • Al menos un pago de prueba (6.x)
  • Push notification funcional (7.x)

Si encuentras un problema durante la verificación:

  1. Captura evidencia: Screenshots, logs, requests fallidos

  2. Documenta los pasos para reproducir el problema

  3. Verifica los logs del servicio afectado:

    Terminal window
    dokploy logs api --tail 100
  4. Crea un issue con toda la información recopilada