Asistente inteligente para corredores amateur con planes personalizados, seguimiento de progreso y coach con IA.
Monorepo con Turborepo que incluye:
- Backend (NestJS): API REST con arquitectura hexagonal
- Frontend (Next.js): Interfaz web moderna con TailwindCSS
- Database: PostgreSQL + Prisma ORM
Domain → Application → Infrastructure
↓ ↓ ↓
Entities Use Cases Adapters
- Node.js >= 20
- Docker & Docker Compose
- npm >= 10
Windows (PowerShell):
.\start-dev.ps1Linux/Mac:
chmod +x start-dev.sh
./start-dev.shEste script:
- ✅ Crea el archivo
.envsi no existe - ✅ Verifica que Docker esté corriendo
- ✅ Inicia PostgreSQL con Docker Compose
- ✅ Limpia procesos Node.js previos
- ✅ Genera el cliente Prisma
- ✅ Inicia Backend (puerto 3001) y Frontend (puerto 3000) simultáneamente
# 1. Clonar e instalar dependencias
npm install
# 2. Crear archivo .env en la raíz
# Copia el siguiente contenido:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/ai_running_coach?schema=public"
JWT_SECRET="your-super-secret-jwt-key-change-in-production-12345678"
JWT_EXPIRATION="15m"
JWT_REFRESH_SECRET="your-super-secret-refresh-key-change-in-production-87654321"
JWT_REFRESH_EXPIRATION="7d"
API_PORT=3001
API_PREFIX="api"
FRONTEND_URL="http://localhost:3000"
NEXT_PUBLIC_API_URL="http://localhost:3001/api"
GEMINI_API_KEY="tu-api-key-de-gemini-aqui"
# 3. Levantar PostgreSQL con Docker
docker-compose up -d
# 4. Generar cliente Prisma y ejecutar migraciones
npm run db:generate
npm run db:migrate
# 5. Levantar ambos servicios (Backend + Frontend)
npm run dev
# O individualmente:
npm run dev:api # Solo Backend (puerto 3001)
npm run dev:web # Solo Frontend (puerto 3000)Una vez iniciado, accede a:
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001/api
- Swagger Docs: http://localhost:3001/docs
- Prisma Studio:
npm run db:studio→ http://localhost:5555 - pgAdmin: http://localhost:5050 (admin@admin.com / admin)
ai-running-coach/
├── apps/
│ ├── api/ # Backend NestJS
│ └── web/ # Frontend Next.js
├── packages/
│ ├── database/ # Prisma shared
│ └── typescript-config/
├── docker-compose.yml
└── turbo.json
npm run dev # Backend (3001) + Frontend (3000) simultáneamente
npm run dev:api # Solo Backend en puerto 3001
npm run dev:web # Solo Frontend en puerto 3000
npm run build # Build de producción
npm run lint # Linter
npm run test # Tests
npm run db:migrate # Migrar base de datos
npm run db:generate # Generar cliente Prisma
npm run db:studio # Abrir Prisma Studio (puerto 5555)Error: EADDRINUSE: address already in use
Solución:
# Windows
taskkill /F /IM node.exe
npm run dev
# Linux/Mac
pkill node
npm run devcurl -X POST http://localhost:3001/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "runner@example.com",
"password": "SecurePass123!",
"goal": "10K",
"level": "beginner"
}'curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "runner@example.com",
"password": "SecurePass123!"
}'curl -X GET http://localhost:3001/api/auth/profile \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"curl -X POST http://localhost:3001/api/training/plans \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"goal": "10K",
"level": "intermediate"
}'curl -X GET "http://localhost:3001/api/training/plans/PLAN_ID/weeks/1/sessions" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"curl -X PATCH "http://localhost:3001/api/training/sessions/SESSION_ID/complete" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"actualDistanceKm": 10.5,
"actualDurationMinutes": 60,
"notes": "Great run!"
}'Para usar el asistente IA necesitas una API Key de Google Gemini:
- Ve a Google AI Studio
- Inicia sesión con tu cuenta de Google
- Haz clic en "Create API Key"
- Copia la clave y agrégala al archivo
.env:GEMINI_API_KEY="tu-api-key-aqui"
Notas:
- El modelo usado es
gemini-2.0-flash-lite(gratuito) - Límites del tier gratuito: 15 requests por minuto
- La API Key NO debe compartirse públicamente
- Fase 1A: ✅ Setup + Auth MVP (JWT, bcrypt, Prisma)
- Fase 1B: ✅ Training Plans + Sessions (generación de planes, seguimiento de sesiones)
- Fase 2A: ✅ Gemini AI Coach (chat inteligente con contexto, análisis de progreso)
- Fase 2B: Analytics + State Management (Zustand, gráficas de progreso)
- Fase 3: Deploy & CI/CD (Docker, GitHub Actions, Vercel/Railway)
Por Fase:
- PHASE-1A-SUMMARY.md - Autenticación JWT completa
- PHASE-1B-SUMMARY.md - Training Plans y Sessions
- TESTING-PHASE-1B.md - Guía de testing para Fase 1B
Configuración y Ayuda:
- PORTS-CONFIG.md - Configuración de puertos
- TROUBLESHOOTING.md - Solución de errores comunes
MIT