🔍 Revisión de Flujos por Rol - PuntoHack MVP
Fecha: 10 de Enero, 2025
Objetivo: Revisar y mejorar los flujos y acciones de cada rol de forma modular
📋 Roles del Sistema
- PARTICIPANT - Participantes de hackathons
- ORGANIZER - Organizadores de hackathons
- JUDGE - Jueces que evalúan proyectos
- SPONSOR - Sponsors y organizaciones
- ADMIN - Administradores del sistema
🎯 Metodología de Revisión
Para cada rol, revisaremos:
- Dashboard/Vista principal - ¿Está completo y funcional?
- Acciones principales - ¿Todas las acciones están implementadas?
- Validaciones - ¿Están todas las validaciones necesarias?
- Feedback al usuario - ¿Hay toasts/notificaciones apropiadas?
- Manejo de errores - ¿Los errores se manejan correctamente?
- UX/UI - ¿La experiencia es fluida y clara?
- Consistencia - ¿Sigue los mismos patrones que otros roles?
1️⃣ PARTICIPANT
Dashboard
- ✅ Vista principal:
/participanto/dashboard - ✅ Muestra: hackathons activos, equipos, notificaciones
- ✅ Empty states implementados
- ✅ Loading states con skeleton
Acciones Principales
1.1 Registrarse en Hackathon
- Ruta:
/hackathons/[slug] - Action:
registerForHackathon()(¿existe?) - Validaciones necesarias:
- ✅ Rol = PARTICIPANT
- ✅ Hackathon status = REGISTRATION
- ✅ Fechas válidas (
registrationOpensAt <= now <= registrationClosesAt)- ✅ No registrado previamente
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar implementación
1.2 Crear Equipo
- Ruta:
/hackathons/[slug]/teams/create - Action:
createTeam()ensrc/modules/teams/actions.ts - Validaciones necesarias:
- ✅ Usuario registrado en hackathon
- ✅ Hackathon status IN (REGISTRATION, RUNNING)
- ✅ now < submissionDeadline
- ✅ No pertenece a otro equipo
- Feedback: Toast de éxito con código del equipo
- Estado: ⚠️ Revisar validaciones completas
1.3 Unirse a Equipo
- Ruta:
/hackathons/[slug]/teams/join - Action:
joinTeamByCode()ensrc/modules/teams/actions.ts - Validaciones necesarias:
- ✅ Código existe
- ✅ Equipo pertenece al hackathon
- ✅ Equipo no lleno (maxTeamSize)
- ✅ Usuario registrado en hackathon
- ✅ No pertenece a otro equipo
- ✅ Hackathon status IN (REGISTRATION, RUNNING)
- ✅ now < submissionDeadline
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar validaciones completas
1.4 Salir del Equipo
- Ruta:
/hackathons/[slug]/teams/[teamId] - Action:
leaveTeam()(¿existe?) - Validaciones necesarias:
- ✅ Usuario es miembro del equipo
- ✅ Hackathon status IN (REGISTRATION, RUNNING)
- ✅ now < submissionDeadline
- ✅ Si equipo tiene submission y es último miembro: BLOQUEAR
- ✅ Si equipo vacío y sin submission: eliminar equipo
- Feedback: Toast de éxito/error con advertencia si aplica
- Estado: ⚠️ Revisar implementación
1.5 Enviar Submission
- Ruta:
/hackathons/[slug]/teams/[teamId]/submit - Action:
createSubmission()ensrc/modules/submissions/actions.ts - Validaciones necesarias:
- ✅ Usuario es miembro del equipo
- ✅ Hackathon status = RUNNING
- ✅ now < submissionDeadline
- ✅ Equipo no tiene submission previa
- ✅ Equipo tiene >= minTeamSize miembros
- ✅ Si challengeId, pertenece al hackathon
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar validaciones completas
1.6 Editar Submission
- Ruta:
/hackathons/[slug]/teams/[teamId]/submit - Action:
updateSubmission()ensrc/modules/submissions/actions.ts - Validaciones necesarias:
- ✅ Usuario es miembro del equipo
- ✅ now < submissionDeadline
- ✅ Hackathon status != JUDGING/FINISHED
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar bloqueo después de deadline
1.7 Ver Leaderboard
- Ruta:
/hackathons/[slug]/leaderboard - Query:
calculateLeaderboard()ensrc/modules/evaluation/queries.ts - Validaciones necesarias:
- ✅ Hackathon status = FINISHED (o permitir ver en JUDGING)
- Feedback: N/A (solo lectura)
- Estado: ✅ Implementado
Mejoras Identificadas
- Verificar que todas las validaciones estén implementadas
- Agregar validación de minTeamSize al crear equipo
- Mejorar feedback cuando no puede salir del equipo (último miembro con submission)
- Agregar countdown visual para submissionDeadline
- Verificar que el bloqueo de edición después de deadline funcione correctamente
2️⃣ ORGANIZER
Dashboard
- ✅ Vista principal:
/organizer - ✅ Muestra: hackathons, estadísticas
- ✅ Empty states implementados
- ✅ Loading states con skeleton
Acciones Principales
2.1 Crear Hackathon
- Ruta:
/admin/hackathons/create - Action:
createHackathon()ensrc/modules/hackathons/actions.ts - Validaciones necesarias:
- ✅ Rol = ORGANIZER/ADMIN
- ✅ Slug único
- ✅ Orden de fechas válido
- ✅ Datos válidos (Zod)
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
2.2 Editar Hackathon
- Ruta:
/admin/hackathons/[slug]/edit - Action:
updateHackathon()ensrc/modules/hackathons/actions.ts - Validaciones necesarias:
- ✅ Ownership o ADMIN
- ✅ Orden de fechas válido
- ✅ Si extiende fechas: solo fase siguiente, máximo +7d
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar validación de extensión de fechas
2.3 Publicar Hackathon
- Ruta:
/admin/hackathons/[slug]/dashboard - Action:
publishHackathon()(¿existe?) - Validaciones necesarias:
- ✅ Tiene al menos 1 criterio
- ✅ Tiene al menos 1 juez asignado
- ✅ now >= registrationOpensAt
- ✅ Orden de fechas válido
- Feedback: Toast de éxito/error con advertencia si falta algo
- Estado: ⚠️ Revisar implementación
2.4 Asignar Jueces
- Ruta:
/admin/hackathons/[slug]/judges - Action:
assignJudge()ensrc/modules/evaluation/actions.ts - Validaciones necesarias:
- ✅ Rol = ORGANIZER/ADMIN
- ✅ Juez tiene rol JUDGE
- ✅ Juez NO participa en el hackathon (bloqueo)
- ✅ Juez no está ya asignado
- Feedback: Toast de éxito/error con razón si se bloquea
- Estado: ⚠️ Revisar validación de conflicto de interés
2.5 Eliminar Participación
- Ruta:
/admin/hackathons/[slug]/dashboard - Action:
removeParticipation()(¿existe?) - Validaciones necesarias:
- ✅ Ownership o ADMIN
- ✅ Si usuario tiene TeamMember: eliminar también
- ✅ Si equipo queda vacío y sin submission: eliminar equipo
- ✅ Si equipo tiene submission: BLOQUEAR eliminación del último miembro
- Feedback: Toast de éxito/error con advertencia
- Estado: ⚠️ Revisar implementación
2.6 Expulsar Miembro de Equipo
- Ruta:
/admin/hackathons/[slug]/dashboard - Action:
removeTeamMember()(¿existe?) - Validaciones necesarias:
- ✅ Ownership o ADMIN
- ✅ Si equipo queda vacío y sin submission: eliminar equipo
- ✅ Si equipo tiene submission: BLOQUEAR si es último miembro
- Feedback: Toast de éxito/error con advertencia
- Estado: ⚠️ Revisar implementación
Mejoras Identificadas
- Verificar validación de extensión de fechas (solo fase siguiente, +7d max)
- Agregar validación de conflicto de interés al asignar jueces
- Mejorar feedback cuando no puede eliminar participación (último miembro con submission)
- Agregar validación de publicación (criterios, jueces, fechas)
- Verificar que todas las acciones de gestión de participantes estén implementadas
3️⃣ JUDGE
Dashboard
- ✅ Vista principal:
/judge - ✅ Muestra: asignaciones, progreso de evaluación
- ✅ Empty states implementados
- ✅ Loading states con skeleton
Acciones Principales
3.1 Ver Submissions
- Ruta:
/judge/hackathons/[slug] - Query:
getHackathonSubmissionsForJudge()(¿existe?) - Validaciones necesarias:
- ✅ Juez asignado al hackathon
- ✅ Hackathon status = JUDGING (o permitir ver antes)
- Feedback: N/A (solo lectura)
- Estado: ⚠️ Revisar implementación
3.2 Evaluar Submission (General)
- Ruta:
/judge/hackathons/[slug]/submissions/[submissionId]/evaluate - Action:
submitScores()ensrc/modules/evaluation/actions.ts - Validaciones necesarias:
- ✅ Juez asignado al hackathon
- ✅ Hackathon status = JUDGING
- ✅ Submission pertenece al hackathon
- ✅ Score value entre 0 y maxScore
- ✅ No ha evaluado previamente (unique constraint)
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
3.3 Evaluar Challenge
- Ruta:
/judge/hackathons/[slug]/submissions/[submissionId]/evaluate - Action:
submitChallengeEvaluation()ensrc/modules/evaluation/actions.ts - Validaciones necesarias:
- ✅ Juez asignado al hackathon
- ✅ Challenge pertenece al hackathon
- ✅ Submission eligió el challenge
- ✅ Scores entre 0-10
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
Mejoras Identificadas
- Verificar que no pueda ver submissions antes de JUDGING
- Verificar que no pueda ver scores de otros jueces durante JUDGING
- Agregar validación de que no puede participar en el mismo hackathon
- Mejorar feedback cuando intenta evaluar algo que ya evaluó
- Verificar que todas las validaciones de evaluación estén implementadas
4️⃣ SPONSOR
Dashboard
- ✅ Vista principal:
/sponsor - ✅ Muestra: organizaciones, sponsorships, challenges, shortlist
- ✅ Empty states implementados
- ✅ Loading states con skeleton
Acciones Principales
4.1 Crear Organización
- Ruta:
/sponsor/organizations/create - Action:
createOrganization()ensrc/modules/sponsors/actions.ts - Validaciones necesarias:
- ✅ Rol = SPONSOR/ADMIN
- ✅ Datos válidos (Zod)
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
4.2 Crear Sponsorship
- Ruta:
/sponsor/sponsorships/create - Action:
createSponsorship()ensrc/modules/sponsors/actions.ts - Validaciones necesarias:
- ✅ Usuario es miembro de la organización (OWNER/ADMIN)
- ✅ Hackathon existe y no está FINISHED
- ✅ Datos válidos (Zod)
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar validación de membership
4.3 Crear Challenge
- Ruta:
/sponsor/challenges/create - Action:
createChallenge()ensrc/modules/sponsors/actions.ts - Validaciones necesarias:
- ✅ Sponsorship existe
- ✅ Usuario puede gestionar la organización
- ✅ Hackathon no está FINISHED
- ✅ Datos válidos (Zod)
- Feedback: Toast de éxito/error
- Estado: ⚠️ Revisar validaciones completas
4.4 Agregar a Shortlist
- Ruta:
/sponsor/challenges/[id]/submissions - Action:
shortlistSubmission()ensrc/modules/sponsors/actions.ts - Validaciones necesarias:
- ✅ Submission pertenece al challenge
- ✅ Usuario puede gestionar la organización
- ✅ No duplicado (unique constraint)
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
4.5 Aprobar Evaluación de Challenge
- Ruta:
/sponsor/evaluationso/sponsor/challenges/[id]/evaluations - Action:
approveChallengeEvaluation()ensrc/modules/evaluation/actions.ts - Validaciones necesarias:
- ✅ Evaluación pertenece a challenge de la organización
- ✅ Usuario puede gestionar la organización
- ✅ Estado = PENDING
- Feedback: Toast de éxito/error
- Estado: ✅ Implementado
Mejoras Identificadas
- Verificar validación de membership en todas las acciones
- Agregar validación de que no puede ver scores durante JUDGING
- Mejorar feedback cuando no puede gestionar organización
- Verificar que todas las acciones de shortlist estén implementadas
- Agregar validación de que challenge pertenece al hackathon correcto
5️⃣ ADMIN
Dashboard
- ✅ Vista principal:
/admin - ✅ Muestra: estadísticas globales, usuarios, hackathons
- ✅ Empty states implementados
- ✅ Loading states con skeleton
Acciones Principales
5.1 Cambiar Rol de Usuario
- Ruta:
/admin/users - Action:
updateUserRole()(¿existe?) - Validaciones necesarias:
- ✅ Rol = ADMIN
- ✅ Nuevo rol válido
- ✅ No puede quitarse su propio rol ADMIN
- Feedback: Toast de éxito/error con advertencia
- Estado: ⚠️ Revisar implementación
5.2 Eliminar Usuario
- Ruta:
/admin/users - Action:
deleteUser()(¿existe?) - Validaciones necesarias:
- ✅ Rol = ADMIN
- ✅ Cascade: participations, team members, scores, etc.
- ✅ Advertencia antes de eliminar
- Feedback: Toast de éxito/error con advertencia
- Estado: ⚠️ Revisar implementación
5.3 Gestionar Hackathons
- Ruta:
/admin/hackathons - Actions:
createHackathon(),updateHackathon(),deleteHackathon()(¿existe?) - Validaciones necesarias:
- ✅ Rol = ADMIN
- ✅ Puede override validaciones (con advertencia)
- Feedback: Toast de éxito/error con advertencia si override
- Estado: ⚠️ Revisar implementación completa
Mejoras Identificadas
- Verificar que todas las acciones de gestión de usuarios estén implementadas
- Agregar advertencias cuando hace override de validaciones
- Agregar validación de que no puede quitarse su propio rol ADMIN
- Verificar que todas las acciones de gestión de hackathons estén implementadas
- Agregar confirmaciones para acciones destructivas
📊 Resumen de Mejoras por Prioridad
🔴 Alta Prioridad
- Validaciones faltantes en acciones críticas
- Feedback mejorado para acciones que pueden fallar
- Validación de conflictos de interés (juez participante)
- Validación de extensión de fechas (solo fase siguiente, +7d)
- Validación de membership en acciones de sponsor
🟡 Media Prioridad
- Countdown visual para deadlines
- Confirmaciones para acciones destructivas
- Advertencias cuando se bloquean acciones
- Validación de publicación de hackathons
- Mejoras de UX en flujos complejos
🟢 Baja Prioridad
- Optimizaciones de queries
- Mejoras visuales menores
- Documentación de flujos
- Tests adicionales
🎯 Próximos Pasos
- Revisar cada acción identificada
- Implementar validaciones faltantes
- Mejorar feedback al usuario
- Agregar confirmaciones donde sea necesario
- Verificar consistencia entre roles
Última actualización: 10 de Enero, 2025