Sistema integral de gestión de rally raids y competencias off-road desarrollado con Next.js y Spring Boot. Plataforma completa para la organización, administración y seguimiento de eventos de rally, desde la inscripción de participantes hasta la gestión de resultados y clasificaciones.
- Gestión completa de eventos: Creación, edición y administración de rally raids
- Gestión de etapas: Configuración detallada de cada etapa con distancias, dificultad y puntos de control
- Sistema de resultados: Registro y seguimiento de tiempos, posiciones y clasificaciones
- Gestión de penalizaciones: Sistema flexible de sanciones y descuentos por diversas infracciones
- Administración de participantes: Control total de inscripciones y datos de competidores
- Categorías múltiples: Soporte para motos, UTVs, carros y vehículos especializados
- Registro detallado: Información técnica completa de cada vehículo
- Validación de elegibilidad: Verificación automática de requisitos por categoría
- Historial de participación: Seguimiento del rendimiento histórico
- Información personal completa: Datos del piloto y copiloto
- Información médica: Alergias, medicamentos y condiciones especiales
- Contactos de emergencia: Sistema completo de contactos para situaciones críticas
- Gestión de documentos: Carga y validación de licencias, seguros y documentación requerida
- Clasificaciones en tiempo real: Rankings actualizados por etapa y general
- Sistema de puntuación: Cálculo automático de puntos y posiciones
- Gestión de premios: Configuración de categorías ganadoras y reconocimientos
- Reportes detallados: Análisis completo de rendimiento y estadísticas
├── 🎨 UI/UX Moderno
│ ├── Next.js 14 con App Router
│ ├── TypeScript para tipado estático
│ ├── Tailwind CSS para estilos responsivos
│ └── Radix UI para componentes accesibles
│
├── 🔐 Autenticación & Seguridad
│ ├── JWT para sesiones seguras
│ ├── OAuth2 con Google
│ ├── Contextos de autenticación
│ └── Protección de rutas por roles
│
└── 🏗️ Atomic Design
├── Átomos: Botones, inputs, iconos
├── Moléculas: Cards, formularios, selectores
└── Organismos: Tablas, headers, sidebars
├── ☕ API REST Robusta
│ ├── Spring Boot 3.x
│ ├── Spring Security para autenticación
│ ├── JPA/Hibernate para ORM
│ └── PostgreSQL como base de datos
│
├── 🔒 Seguridad & Autorización
│ ├── JWT con refresh tokens
│ ├── OAuth2 integrado
│ ├── Roles y permisos granulares
│ └── Validación de entrada robusta
│
└── 📊 Gestión de Datos
├── Entidades relacionales complejas
├── Transacciones ACID
├── Auditoría de cambios
└── Respaldos automáticos
- Gestión completa de eventos y etapas
- Administración de participantes y vehículos
- Control de resultados y penalizaciones
- Generación de reportes y estadísticas
- Configuración del sistema
- Inscripción a eventos disponibles
- Gestión de perfil y vehículos
- Consulta de resultados y clasificaciones
- Carga de documentación requerida
- Seguimiento de historial competitivo
- Node.js v18 o superior
- Java 17 o superior
- PostgreSQL 13 o superior
- pnpm (recomendado) o npm
# Clonar el repositorio
git clone <repository-url>
cd gpx-rally-management
# Instalar dependencias
pnpm install
# Configurar variables de entorno
cp .env.example .env.local
# Editar .env.local con tus configuraciones
# Ejecutar en desarrollo
pnpm dev# Navegar al directorio del backend
cd backend
# Configurar base de datos en application.yml
# Compilar y ejecutar
./mvnw spring-boot:run# Frontend
NEXT_PUBLIC_BACKEND_URL=http://localhost:8080
NEXT_PUBLIC_GOOGLE_CLIENT_ID=tu_google_client_id
NEXTAUTH_SECRET=tu_secret_key
NEXTAUTH_URL=http://localhost:3000
# Backend
DATABASE_URL=postgresql://localhost:5432/gpx_rally
JWT_SECRET=tu_jwt_secret
GOOGLE_CLIENT_ID=tu_google_client_id
GOOGLE_CLIENT_SECRET=tu_google_client_secretEsta es la configuración recomendada para el despliegue del sistema gpx Rally Management.
-
Crear servicio en Render:
- Conecta tu repositorio del backend
- Selecciona "Web Service"
- Configura el build command:
./mvnw clean package -DskipTests - Configura el start command:
java -jar target/gpx-rally-backend.jar
-
Variables de entorno en Render:
DATABASE_URL=postgresql://your-db-host:5432/your-db-name JWT_SECRET=your-super-secure-jwt-secret GOOGLE_CLIENT_ID=your-google-oauth-client-id GOOGLE_CLIENT_SECRET=your-google-oauth-client-secret SPRING_PROFILES_ACTIVE=production
-
Base de datos PostgreSQL:
- Crear una base de datos PostgreSQL en Render
- Copiar la URL de conexión interna
- Configurar en
DATABASE_URL
-
Instalar Vercel CLI:
npm i -g vercel
-
Configurar variables de entorno en Vercel:
vercel env add NEXT_PUBLIC_BACKEND_URL # Valor: https://gpx-back.onrender.com vercel env add NEXT_PUBLIC_GOOGLE_CLIENT_ID # Valor: tu_google_client_id vercel env add NEXTAUTH_SECRET # Valor: tu_secret_super_seguro vercel env add NEXTAUTH_URL # Valor: https://your-app.vercel.app
-
Desplegar:
vercel --prod
Ejecuta este script antes del despliegue para verificar la configuración:
# En Windows (PowerShell)
.\deploy-check.ps1
# En Unix/Mac
./deploy-check.shCORS Configuration (Backend):
@Configuration
@EnableWebSecurity
public class CorsConfig {
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOriginPatterns(Arrays.asList(
"https://*.vercel.app",
"https://your-domain.com",
"http://localhost:3000" // Solo para desarrollo
));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
configuration.setAllowedHeaders(Arrays.asList("*"));
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}OAuth2 Redirect URIs: Configurar en Google Cloud Console:
https://gpx-back.onrender.com/api/oauth2/callback/google
https://your-app.vercel.app/api/auth/callback/google
Environment Variables Security:
- Nunca commitear archivos
.envcon valores reales - Usar secrets seguros para JWT y OAuth2
- Rotar secrets regularmente
Vercel:
vercel logs --followRender:
- Ver logs en tiempo real desde el dashboard
- Configurar alertas de salud del servicio
- Error de CORS: Verificar configuración de dominios permitidos
- OAuth2 Redirect Mismatch: Validar URIs en Google Console
- Database Connection: Verificar URL y credenciales de PostgreSQL
- Environment Variables: Confirmar que todas las vars estén configuradas
- Build Failures: Revisar dependencias y versiones de Node.js/Java
- Acceso: Iniciar sesión con credenciales de administrador
- Crear Evento: Configurar nuevo rally con etapas y requisitos
- Gestionar Inscripciones: Aprobar participantes y verificar documentación
- Seguimiento en Vivo: Actualizar resultados y gestionar penalizaciones
- Generar Reportes: Exportar clasificaciones y estadísticas
- Registro: Crear cuenta y completar perfil
- Inscripción: Seleccionar evento y categoría de vehículo
- Documentación: Cargar licencias, seguros y documentos requeridos
- Competencia: Seguir resultados y clasificaciones en tiempo real
- Historial: Consultar participaciones anteriores y estadísticas
- Dashboard de métricas en tiempo real
- Análisis de rendimiento por etapa
- Estadísticas históricas de participantes
- Reportes personalizables en PDF/Excel
- Arquitectura de microservicios preparada
- Cache inteligente con Redis
- Optimización de consultas SQL
- CDN para contenido estático
- Interfaz adaptativa para móviles y tablets
- PWA (Progressive Web App) ready
- Modo offline para consultas básicas
- Sincronización automática
- Autenticación multifactor opcional
- Encriptación de datos sensibles
- Auditoría completa de acciones
- Backup automático de base de datos
- Validación estricta de entrada de datos
- Tema claro/oscuro automático
- Animaciones fluidas con Framer Motion
- Feedback visual inmediato en todas las acciones
- Navegación intuitiva con breadcrumbs
- Accesibilidad WCAG 2.1 compliant
- Integración con dispositivos GPS en tiempo real
- Sistema de notificaciones push
- API pública para terceros
- Aplicación móvil nativa
- Integración con redes sociales
- Sistema de streaming en vivo
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Para soporte técnico o consultas:
- 📧 Email: soporte@gpxrally.com
- 📱 WhatsApp: +XX XXX XXX XXXX
- 🌐 Web: www.gpxrally.com
- Conectar repositorio en Vercel Dashboard
- Configurar variables de entorno en Vercel:
# Variables requeridas en Vercel
NEXT_PUBLIC_BACKEND_URL=https://gpx-back.onrender.com
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_id
NEXTAUTH_SECRET=your_nextauth_secret_key
NEXTAUTH_URL=https://your-app.vercel.app
BACKEND_URL=https://gpx-back.onrender.com# Instalar Vercel CLI
npm i -g vercel
# Login y configurar proyecto
vercel login
vercel --prod
# Configurar variables de entorno
vercel env add NEXT_PUBLIC_BACKEND_URL
vercel env add NEXT_PUBLIC_GOOGLE_CLIENT_ID
vercel env add NEXTAUTH_SECRET
vercel env add NEXTAUTH_URL
vercel env add BACKEND_URL- Crear nuevo Web Service en Render Dashboard
- Conectar repositorio del backend Spring Boot
- Configurar Build Command:
./mvnw clean package -DskipTests - Configurar Start Command:
java -jar target/gpx-rally-backend.jar
# Base de datos PostgreSQL
DATABASE_URL=postgresql://user:password@hostname:port/database
SPRING_DATASOURCE_URL=${DATABASE_URL}
SPRING_DATASOURCE_USERNAME=your_db_user
SPRING_DATASOURCE_PASSWORD=your_db_password
# JWT y Seguridad
JWT_SECRET=your_jwt_secret_256_bits
JWT_EXPIRATION=86400000
# Google OAuth2
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=https://gpx-back.onrender.com/oauth2/callback/google
# Configuración de aplicación
SPRING_PROFILES_ACTIVE=prod
SERVER_PORT=8080
ALLOWED_ORIGINS=https://your-frontend-app.vercel.app
# CORS Configuration
CORS_ALLOWED_ORIGINS=https://your-frontend-app.vercel.app
CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
CORS_ALLOWED_HEADERS=*# Crear base de datos en Render
# 1. New > PostgreSQL
# 2. Configurar nombre: gpx-rally-db
# 3. Copiar DATABASE_URL generada# Alternativa más económica
# 1. Crear proyecto en Railway
# 2. Add PostgreSQL
# 3. Configurar variables de entorno- Variables hardcodeadas eliminadas (localhost:8080)
- Variables de entorno configuradas (.env.example como referencia)
- Google OAuth2 configurado con dominios de producción
- CORS configurado en backend para dominio de Vercel
- Base de datos PostgreSQL creada y configurada
- Frontend carga correctamente en dominio de Vercel
- API responde desde dominio de Render
- Autenticación Google funciona con URLs de producción
- Base de datos conecta y migraciones aplicadas
- Subida de archivos funciona (imágenes de perfil/eventos)
// En backend Spring Boot - CorsConfig.java
@CrossOrigin(origins = {"https://your-app.vercel.app"})# Verificar en Google Console:
# Authorized redirect URIs:
# https://your-backend.onrender.com/oauth2/callback/google# Verificar en Vercel
vercel env ls
# Verificar en Render
# Dashboard > Service > Environment# Verificar conexión
# En Render logs buscar:
# "Connected to PostgreSQL database"# Ver logs en tiempo real
vercel logs --follow
# Ver logs de build
vercel logs --build# En Render Dashboard:
# Service > Logs (tiempo real)
# Events > Deploy logs# .github/workflows/deploy.yml
name: Deploy to Vercel
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.ORG_ID }}
vercel-project-id: ${{ secrets.PROJECT_ID }}
vercel-args: "--prod"Desarrollado con ❤️ para la comunidad de rally raids y competencias off-road