Verificación Mínima (5 min)
-
curl https://api.vitality-gym.com/healthresponde OK - Frontend carga sin errores de consola
- Login funciona
- Dashboard carga con datos
- Una acción de escritura funciona (ej: reservar clase)
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.
# Verificar que todos los servicios están corriendodokploy status
# Ver logs en tiempo realdokploy logs api --followdokploy logs app --follow# Verificar que todos los servicios están corriendodocker ps --filter "name=vitality"
# Ver logs en tiempo realdocker logs vitality-api -fdocker logs vitality-app -f# El endpoint /health debe devolver status OKcurl -s https://api.vitality-gym.com/health | jq
# Respuesta esperada:# { "status": "ok", "timestamp": "..." }# Desde el contenedor de APIdokploy exec api shbunx prisma db execute --stdin <<< "SELECT 1"# Desde el contenedor de APIdocker exec -it vitality-api shbunx prisma db execute --stdin <<< "SELECT 1"
# O verificar PostgreSQL directamentedocker exec -it vitality-database psql -U vitality_user -d vitality_db -c "SELECT 1"# Verificar conexión a Redisdokploy exec redis redis-cli ping# Respuesta esperada: PONG# Verificar conexión a Redisdocker exec -it vitality-redis redis-cli ping# Respuesta esperada: PONG# Acceder al contenedordokploy exec api sh
# Dentro del contenedor, verificar conexiónbunx prisma db execute --stdin <<< "SELECT 1 as connection_test"# Verificar desde el contenedor de APIdocker exec -it vitality-api bunx prisma db execute --stdin <<< "SELECT 1 as connection_test"
# O verificar directamente con psqldocker exec -it vitality-database psql -U vitality_user -d vitality_db -c "SELECT NOW()"# Si PostgreSQL está expuesto, puedes conectar directamentepsql postgresql://vitality_user:PASSWORD@localhost:5432/vitality_db -c "SELECT 1"Respuesta esperada: Una fila con el valor 1 o la fecha/hora actual sin errores.
dokploy exec api sh -c "redis-cli -h redis ping"# O desde el contenedor de Redisdokploy exec redis redis-cli ping# Desde el contenedor de Redisdocker exec -it vitality-redis redis-cli ping
# O verificar keys (debería haber algunas si la app está funcionando)docker exec -it vitality-redis redis-cli keys "*"# Si Redis está expuesto en el hostredis-cli -h localhost -p 6379 pingRespuesta esperada: PONG
# Verificar variables de entorno SMTP en el contenedordocker 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=***# Desde el contenedor de API, verificar conexión al puerto SMTPdocker exec -it vitality-api sh -c "nc -zv mail.vitality-gym.com 587"
# O usando telnetdocker exec -it vitality-api sh -c "timeout 5 bash -c 'echo QUIT | telnet mail.vitality-gym.com 587'"# Disparar un email de prueba usando la funcionalidad de la app# Por ejemplo, solicitar recuperación de contraseña para un email de pruebacurl -X POST https://api.vitality-gym.com/api/v1/auth/forgot-password \ -H "Content-Type: application/json" \ -d '{"email":"test@example.com"}'
# Verificar en el buzón que el email llegóRespuesta esperada: Conexión exitosa al puerto 587 y email recibido en la prueba funcional.
// 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: "..." }# Verificar que CORS permite el origen del frontendcurl -s -I -X OPTIONS https://api.vitality-gym.com/api/v1/users/me \ -H "Origin: https://app.vitality-gym.com" \ -H "Access-Control-Request-Method: GET" | grep -i access-control
# Debe mostrar: Access-Control-Allow-Origin: https://app.vitality-gym.com# Verificar conectividad desde el contenedor del frontenddocker exec -it vitality-app curl -s http://vitality-api:3000/health | jqRespuesta esperada: Health check OK y headers CORS correctos.
Checklist de Conectividad:
https://testing.app.vitality-gym.com/auth/registerChecklist:
https://app.vitality-gym.com/auth/loginChecklist:
Checklist:
https://app.vitality-gym.com/auth/forgot-passwordChecklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
Checklist:
| Resultado | Número de Tarjeta |
|---|---|
| Aprobada | 4242 4242 4242 4242 |
| Rechazada | 4111 1111 1111 1111 |
| Pendiente | 4012 8888 8888 1881 |
CVV: Cualquier 3 dígitos, Fecha: Cualquier fecha futura
Checklist:
Verificar que se envían emails para:
Checklist:
# Health checkcurl -s https://api.vitality-gym.com/health
# Lista de clases públicas (si existe)curl -s https://api.vitality-gym.com/api/v1/classes# Obtener token primeroTOKEN=$(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 requestscurl -s https://api.vitality-gym.com/api/v1/users/me \ -H "Authorization: Bearer $TOKEN" | jq# Hacer múltiples requests rápidos y verificar respuesta 429for 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ágina | Tiempo Aceptable |
|---|---|
| Landing | < 3s |
| Login | < 2s |
| Dashboard | < 3s |
| Lista de clases | < 2s |
| Métrica | Score Mínimo |
|---|---|
| Performance | 70+ |
| Accessibility | 80+ |
| Best Practices | 80+ |
| SEO | 80+ |
# Ejecutar Lighthouse desde CLInpx lighthouse https://app.vitality-gym.com --view# Verificar headers de seguridadcurl -s -I https://api.vitality-gym.com | grep -E "(Strict-Transport|X-Frame|X-Content|Content-Security)"Headers esperados:
Strict-Transport-SecurityX-Frame-OptionsX-Content-Type-OptionsContent-Security-Policy# Verificar que CORS permite solo orígenes autorizadoscurl -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-controlVerificación Mínima (5 min)
curl https://api.vitality-gym.com/health responde OKVerificación Completa (30 min)
Si encuentras un problema durante la verificación:
Captura evidencia: Screenshots, logs, requests fallidos
Documenta los pasos para reproducir el problema
Verifica los logs del servicio afectado:
dokploy logs api --tail 100docker logs vitality-api --tail 100Crea un issue con toda la información recopilada