Una plataforma innovadora que conecta desarrolladores a través de mentorías personalizadas y desafíos técnicos colaborativos
SkillLink es una plataforma web diseñada para impulsar el crecimiento profesional de desarrolladores mediante la conexión con mentores experimentados y la participación en desafíos técnicos. La aplicación facilita la creación de perfiles técnicos detallados, la búsqueda de mentorías especializadas y la colaboración en tiempo real a través de chats integrados.
- Democratizar el mentoring: Hacer accesible la mentoría técnica para desarrolladores de todos los niveles
- Fomentar la colaboración: Crear un ecosistema donde los desarrolladores puedan aprender unos de otros
- Impulsar el crecimiento profesional: Proporcionar herramientas para el desarrollo de habilidades técnicas
- Conectar talento: Facilitar la conexión entre desarrolladores experimentados y aquellos en crecimiento
- Desarrolladores Junior: Buscan mentoría y oportunidades de aprendizaje
- Desarrolladores Senior: Comparten conocimiento y crean contenido educativo
- Estudiantes de Tecnología: Practican habilidades en desafíos reales
- Tech Leads y Mentores: Ofrecen sesiones de mentoría especializada
- Equipos de Desarrollo: Colaboran en proyectos y desafíos grupales
- Registro e inicio de sesión seguro con JWT
- Roles diferenciados (Developer, Mentor, Admin)
- Autenticación basada en tokens con expiración automática
- Creación de perfiles técnicos detallados
- Configuración de tecnologías y áreas de interés
- Niveles de experiencia (Junior, Intermediate, Senior)
- URLs a GitHub, LinkedIn y portafolios personales
- Control de visibilidad (Público/Privado)
- Creación de sesiones de mentoría one-on-one y grupales
- Programación de sesiones con fechas y duraciones específicas
- Filtrado por tecnologías y nivel de dificultad
- Sistema de participantes y gestión de cupos
- Creación de challenges de programación
- Definición de criterios de aceptación y entregables
- Soporte para desafíos individuales y en equipo
- Sistema de envío de soluciones con URLs de repositorios
- Mensajería directa entre usuarios
- Chats grupales para mentorías
- Salas de chat específicas para desafíos
- Historial completo de conversaciones
- Búsqueda avanzada en mensajes
- Búsqueda de contenido por tecnologías
- Filtros por dificultad y tipo de contenido
- Búsqueda de perfiles por habilidades
- Sistema de paginación optimizado
📁 src/main/java/com/bad/batch/
├── 🔐 config/ # Configuración (CORS, Seguridad, OpenAPI)
├── 🎮 controller/ # Controllers REST y documentación Swagger
├── 📊 dto/ # DTOs para requests y responses
├── ⚠️ exceptions/ # Manejo centralizado de excepciones
├── 🗃️ model/ # Entidades JPA y enums
├── 📦 repository/ # Repositorios JPA con consultas personalizadas
├── 🔧 service/ # Lógica de negocio e implementaciones
└── 🌐 websocket/ # WebSocket para chat en tiempo real
| Categoría | Tecnología | Versión | Propósito |
|---|---|---|---|
| Framework | Spring Boot | 3.3.1 | Framework principal |
| Lenguaje | Java | 21 | Lenguaje de desarrollo |
| Base de Datos | PostgreSQL | Latest | Almacenamiento principal |
| ORM | Spring Data JPA | - | Mapeo objeto-relacional |
| Seguridad | Spring Security | - | Autenticación y autorización |
| Tokens | JSON Web Tokens | - | Autenticación stateless |
| WebSockets | Spring WebSocket | - | Comunicación en tiempo real |
| Documentación | SpringDoc OpenAPI | - | Documentación automática API |
| Validación | Bean Validation | - | Validación de datos |
| Deploy | Render | - | Plataforma de despliegue |
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>- id (PK)
- email (UNIQUE)
- password (encoded)
- firstName, lastName
- role (DEVELOPER/MENTOR/ADMIN)
- isActive
- createdAt, updatedAt- id (PK)
- user_id (FK → User)
- bio, location, githubUrl, linkedinUrl
- experienceLevel (JUNIOR/INTERMEDIATE/SENIOR)
- visibility (PUBLIC/PRIVATE)
- technologies (Collection)
- interests (Collection)
- objectives- id (PK)
- content_type (DISCRIMINATOR)
- title, description
- creator_id (FK → User)
- status, difficulty
- requiredTechnologies (Collection)
- maxParticipants
- startDate, endDate- durationMinutes
- mentorshipType (ONE_ON_ONE/GROUP)
- isLive- problemStatement
- acceptanceCriteria
- allowsTeams
- challengeType (CODING/DESIGN/ARCHITECTURE)- id (PK)
- content, type
- sender_id (FK → User)
- recipient_id (FK → User) [para mensajes directos]
- challengeId, mentorshipId [para chats grupales]
- conversationType (DIRECT/CHALLENGE/MENTORSHIP)
- isRead, isDeleted
- createdAt- id (PK)
- user_id (FK → User)
- content_id (FK → Content)
- joinedAt
- status (ACTIVE/COMPLETED/CANCELLED)- User ↔ Profile: 1:1 (Un usuario tiene un perfil)
- User ↔ Content: 1:N (Un usuario puede crear múltiples contenidos)
- Content ↔ Participation: 1:N (Un contenido tiene múltiples participantes)
- User ↔ Participation: 1:N (Un usuario puede participar en múltiples contenidos)
- User ↔ Message: 1:N (Un usuario puede enviar múltiples mensajes)
| RF | Descripción | Prioridad |
|---|---|---|
| RF01 | Registro y autenticación de usuarios | 🔴 Crítico |
| RF02 | Creación y gestión de perfiles técnicos | 🔴 Crítico |
| RF03 | Creación y gestión de mentorías | 🔴 Crítico |
| RF04 | Creación y gestión de desafíos técnicos | 🔴 Crítico |
| RF05 | Sistema de chat en tiempo real | 🟡 Importante |
| RF06 | Búsqueda y filtrado de contenido | 🟡 Importante |
| RF07 | Sistema de participación en contenidos | 🔴 Crítico |
| RF08 | Gestión de entregas para desafíos | 🟡 Importante |
| RF09 | Notificaciones y mensajería | 🟢 Opcional |
| RF10 | Dashboard de estadísticas | 🟢 Opcional |
| RNF | Categoría | Descripción | Métricas |
|---|---|---|---|
| RNF01 | Seguridad | Autenticación JWT con expiración | Tokens válidos por 24h |
| RNF02 | Seguridad | Encriptación de contraseñas | BCrypt con salt |
| RNF03 | Seguridad | Protección CORS configurada | Origins específicos |
| RNF04 | Rendimiento | Tiempo de respuesta de API | < 500ms para consultas simples |
| RNF05 | Rendimiento | Consultas optimizadas con JOIN FETCH | Evitar N+1 queries |
| RNF06 | Escalabilidad | Conexión pooling para BD | HikariCP configurado |
| RNF07 | Escalabilidad | Paginación en listados | Máximo 20 items por página |
| RNF08 | Usabilidad | Documentación API automática | Swagger UI integrado |
| RNF09 | Usabilidad | Validación de datos en entrada | Bean Validation |
| RNF10 | Compatibilidad | API REST estándar | HTTP Status codes correctos |
| RNF11 | Mantenibilidad | Logging estructurado | SLF4J + Logback |
| RNF12 | Privacidad | Control de visibilidad de perfiles | Público/Privado |
- Lenguaje: Java 21 (LTS)
- Framework: Spring Boot 3.x
- Base de Datos: PostgreSQL (compatible con Supabase)
- Despliegue: Render (contenedores Docker)
- Arquitectura: Monolito modular con separación clara de responsabilidades
- Java 21+
- Maven 3.8+
- PostgreSQL 12+ o acceso a Supabase
- Git
- Clonar el repositorio
git clone https://github.com/R-Mutt22/alumnithon-bad-batch-backend.git
cd alumnithon-bad-batch-backend- Configurar variables de entorno
# Crear archivo .env en la raíz del proyecto
DB_URL=jdbc:postgresql://localhost:5432/skilllink
DB_USERNAME=your_username
DB_PASSWORD=your_password
JWT_SECRET=your_jwt_secret_key- Configurar application.properties
# Base de datos
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
# JPA/Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
# JWT
jwt.secret=${JWT_SECRET}
jwt.expiration=86400000
# CORS
cors.allowed-origins=http://localhost:3000,http://localhost:5173- Ejecutar la aplicación
cd batch
mvn clean install
mvn spring-boot:run- Verificar instalación
curl http://localhost:8080/api/keep-alive/ping
# Respuesta esperada: "Servidor activo - [timestamp]"- API Docs: http://localhost:8080/v3/api-docs
- Swagger UI: http://localhost:8080/swagger-ui.html
- Health Check: http://localhost:8080/api/keep-alive/status
POST /api/auth/register # Registro de usuario
POST /api/auth/login # Inicio de sesión
GET /api/auth # Datos del usuario autenticadoGET /api/profiles/me # Mi perfil
POST /api/profiles # Crear perfil
PUT /api/profiles # Actualizar perfil
GET /api/profiles/search # Buscar perfiles
GET /api/profiles/technologies # Tecnologías válidas
GET /api/profiles/interests # Intereses válidosGET /api/contents # Listar contenidos
POST /api/contents # Crear contenido
GET /api/contents/{id} # Obtener contenido
PUT /api/contents/{id} # Actualizar contenido
PUT /api/contents/{id}/publish # Publicar contenido
POST /api/contents/{id}/join # Unirse a contenido
GET /api/contents/{id}/participants # Listar participantesGET /api/messages/conversations # Mis conversaciones
GET /api/messages/direct/{userId} # Mensajes directos
GET /api/messages/challenge/{id} # Chat de desafío
GET /api/messages/mentorship/{id} # Chat de mentoría
GET /api/messages/search # Buscar mensajes
POST /api/messages/test/send # Enviar mensaje (test)GET /api/keep-alive/ping # Ping de conectividad
GET /api/keep-alive/status # Estado detallado del servidor
GET /api/users # Listar usuarios (autenticado)El proyecto incluye un script completo de testing que valida todos los endpoints:
# Ejecutar test completo
./test_final.sh
# El script valida:
# ✅ Conectividad del servidor
# ✅ Endpoints públicos
# ✅ Autenticación JWT
# ✅ CRUD de perfiles
# ✅ CRUD de contenidos
# ✅ Sistema de mensajería
# ✅ Búsquedas y filtros- Endpoints públicos: Keep-alive, documentación
- Autenticación: Registro, login, validación JWT
- Perfiles: Creación, actualización, búsqueda
- Contenidos: CRUD completo, publicación, participación
- Mensajería: Chats directos, grupales, búsqueda
- Casos edge: Manejo de errores, validaciones
El proyecto está desplegado en Render con las siguientes configuraciones:
URL de Producción: https://alumnithon-bad-batch-backend.onrender.com
Variables de Entorno Configuradas:
DB_URL=postgresql://supabase_connection_string
DB_USERNAME=postgres
DB_PASSWORD=your_supabase_password
JWT_SECRET=production_jwt_secretDockerfile:
FROM openjdk:21-jdk-slim
COPY batch/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]Build Script:
#!/bin/bash
cd batch
mvn clean package -DskipTests- Sistema de notificaciones push
- Integración con GitHub para validación automática de challenges
- Dashboard de analytics para mentores
- Sistema de rating y reviews
- Aplicación móvil (React Native)
- Integración con calendarios (Google Calendar, Outlook)
- Sistema de badges y gamificación
- API pública para integraciones
- IA para matching automático mentor-estudiante
- Videoconferencia integrada
- Marketplace de cursos
- Certificaciones digitales
- Migración a microservicios
- Implementación de Redis para caché
- CI/CD con GitHub Actions
- Monitoreo con Prometheus + Grafana
| Desarrollador | GitHub | Rol Principal |
|---|---|---|
| R-Mutt22 | @R-Mutt22 | Tech Lead & Backend Developer |
| Juan Valenzuela | @Juan-Valenzuela3 | Backend Developer |
| EV3TH | @EV3THlm | Backend Developer |
| Diógenes Quintero | @dio-quincarDev | Backend Developer |
- Backend Architecture: Diseño de APIs REST y WebSocket
- Database Design: Modelado de entidades y relaciones
- Security Implementation: JWT, CORS, validaciones
- Real-time Features: Chat WebSocket y notificaciones
- Testing & QA: Scripts automatizados y testing manual
- DevOps: Configuración de despliegue en Render
MIT License
Copyright (c) 2025 Bad-Batch Team - Alumnithon 2025
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
- ✅ Uso libre: Puedes usar este código para cualquier propósito
- ✅ Modificación: Puedes modificar y adaptar el código
- ✅ Distribución: Puedes distribuir el código original o modificado
- ✅ Uso comercial: Puedes usar este código en proyectos comerciales
⚠️ Atribución: Debes incluir el aviso de copyright original⚠️ Sin garantías: El software se proporciona "tal como está"
- 🌐 API Endpoint: https://alumnithon-bad-batch-backend.onrender.com
- 📚 Documentación: https://alumnithon-bad-batch-backend.onrender.com/v3/api-docs
- 🐛 Issues: GitHub Issues
- 🚀 Pull Requests: GitHub PRs