Aplicación frontend moderna para la gestión de entrenamientos, atletas y rutinas de ejercicio. Construida con Vue 3, TypeScript y Tailwind CSS, diseñada para conectarse con la Workout App API.
- Descripción
- Stack Tecnológico
- Características
- Requisitos
- Instalación
- Configuración
- Ejecución
- Estructura del Proyecto
- Funcionalidades Implementadas
- Componentes Principales
- API Integration
- Desarrollo
- Contribución
Aplicación frontend para la gestión completa de entrenamientos y atletas. Ofrece una interfaz moderna y responsiva para entrenadores y atletas, permitiendo el registro, autenticación y gestión de sesiones de entrenamiento a través de una API REST robusta.
- Framework: Vue 3 (Composition API)
- Lenguaje: TypeScript
- Build Tool: Vite
- Estilos: Tailwind CSS + DaisyUI
- Routing: Vue Router 4
- State Management: Pinia
- HTTP Client: Axios
- Validación: Joi
- Icons: Lucide Vue Next
- Linting: ESLint + Prettier
- 🔐 Sistema de autenticación completo (Login/Register/Logout) con persistencia de sesión
- 🧑💻 Gestión de estado global con Pinia (stores tipados, lógica desacoplada)
- 🧩 Navegación protegida y guards reactivos según el estado de autenticación
- 🗂️ Estructura modular: rutas separadas por dominio (auth/dashboard), layouts reutilizables y sidebar dinámico
- 🧑🎤 Componentes UI avanzados: Drawer, Sidebar, Navbar, Container, Iconos SVG personalizados
- 🏋️♂️ Dashboard de atletas (estructura inicial y vistas de ejemplo)
- 🧹 Eliminación de código legacy: migración de useLogin a store Pinia
- 🎨 UI moderna y responsiva con Tailwind CSS y DaisyUI
- 🌙 Tema claro/oscuro con persistencia
- 📱 Diseño mobile-first
- 🔒 Rutas protegidas con guards de autenticación
- 🚀 TypeScript para type safety
- 📦 Componentes reutilizables y modulares
- ⚡ Hot Module Replacement con Vite
- 🧪 Configuración de testing lista para usar
- Node.js 18+
- Yarn o npm
- Workout App API ejecutándose en el backend
# Clonar el repositorio
git clone https://github.com/tu-usuario/workout-app-front.git
cd workout-app-front
# Instalar dependencias
yarn install
# o
npm install- Configurar variables de entorno:
# Copiar el archivo de ejemplo
cp .env.example .env
# Editar las variables de entorno
VITE_API_URL=http://localhost:3000- Asegurar que la API esté ejecutándose:
- Seguir las instrucciones de la Workout App API
- La API debe estar ejecutándose en
http://localhost:3000
# Iniciar servidor de desarrollo
yarn dev
# o
npm run devLa aplicación estará disponible en http://localhost:5173
# Verificar tipos
yarn type-check
# Construir para producción
yarn build
# Previsualizar build
yarn previewsrc/
├── components/ # Componentes reutilizables
│ ├── auth/ # Componentes de autenticación
│ ├── common/ # Componentes comunes (buttons, inputs, etc.)
│ └── icons/ # Iconos SVG personalizados
├── composables/ # Lógica reutilizable de Vue
│ ├── useAuth.ts # Manejo de autenticación
│ ├── useForm.ts # Manejo de formularios
│ ├── useLocalStorage.ts # Persistencia local
│ └── useTheme.ts # Gestión de temas
├── config/ # Configuración de la aplicación
├── layouts/ # Layouts de páginas
│ ├── auth/ # Layout para autenticación
│ └── dashboard/ # Layout para dashboard
├── router/ # Configuración de rutas
├── schemas/ # Schemas de validación Joi
├── services/ # Servicios HTTP y API
├── types/ # Definiciones de tipos TypeScript
├── utils/ # Utilidades y helpers
└── views/ # Páginas/vistas principales
├── auth/ # Vistas de autenticación
└── dashboard/ # Vistas del dashboard
- Login de usuarios
- Registro de nuevos usuarios
- Logout
- Persistencia de sesión
- Rutas protegidas
- Manejo de tokens JWT
- Tabla de atletas con paginación, búsqueda y filtrado por nombre/email
- Barra de búsqueda accesible y genérica, con integración DaisyUI/context7
- Selector de campo para filtrar atletas (nombre/email)
- Tabs reutilizables para vistas de detalle de atleta (perfil, stats, etc.)
- Botón de acción "Editar" en cada fila de atleta
- Componentes de tabla (
DefaultTable,TableRow,TableHeader) refactorizados y tipados - Paginación minimalista con SVG y sin bordes, accesible
- Store de atletas con búsqueda reactiva y filtrado
- Estilos context7/DaisyUI en todos los componentes nuevos/refactorizados
- Carga y error visualmente consistentes en la UI
- Store de autenticación con Pinia (login, logout, persistencia, guards)
- Refactor de rutas: separación por dominio (auth/dashboard)
- Drawer y sidebar navegable en dashboard
- Componentes base: Drawer, Sidebar, Container, Iconos SVG
- Eliminación de useLogin y migración a Pinia
- Manejo de errores mejorado en login y forgot password
- Vistas iniciales de atletas y perfil en dashboard
- Sistema de temas (claro/oscuro)
- Componentes base reutilizables
- Navegación responsiva
- Formularios validados
- Estados de carga
- Manejo de errores
- Dashboard de atletas (más detalles y edición)
- Gestión de ejercicios
- Sesiones de entrenamiento
- Estadísticas y gráficos
- Perfil de usuario
- DefaultButton: Botón reutilizable con variantes
- DefaultInput: Input con validación integrada
- DefaultNavbar: Barra de navegación principal
- DefaultAlert: Sistema de alertas
- DefaultSpinner: Indicador de carga
- ThemeController: Controlador de tema claro/oscuro
- DefaultLayout: Layout base para autenticación
- DefaultDashboardLayout: Layout para el dashboard con navegación
- LoginView: Página de inicio de sesión
- RegisterView: Página de registro
- DefaultDashboardView: Dashboard principal
La aplicación se conecta con la Workout App API a través de:
POST /auth/login- Autenticación de usuariosPOST /auth/signup- Registro de usuarios
// src/services/api.service.ts
const apiService = {
baseURL: VITE_API_URL,
headers: {
'Content-Type': 'application/json'
}
}# Desarrollo con hot reload
yarn dev
# Verificación de tipos
yarn type-check
# Build de producción
yarn build
# Linting
yarn lint
yarn lint:check
# Formateo de código
yarn format
yarn format:check
# Lint + Format
yarn lint-and-formatVSCode con las siguientes extensiones:
- Volar (deshabilitar Vetur)
- TypeScript Vue Plugin
- Tailwind CSS IntelliSense
El proyecto utiliza TypeScript con configuración estricta. Los tipos para archivos .vue son manejados por vue-tsc.
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Usar TypeScript estricto
- Seguir la guía de estilos de Vue 3 Composition API
- Usar Tailwind CSS para estilos
- Componentes en PascalCase
- Archivos de composables con prefijo
use
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
⚡ Desarrollado con Vue 3 + TypeScript + Vite
yarn buildLint with ESLint
yarn lint