- Agregar ARG en client/Dockerfile para NEXT_PUBLIC_API_URL
- Pasar build args en docker-compose.yml
- Asegurar que Next.js reciba la URL correcta del servidor
- Permitir acceso desde 192.168.1.131
- Agregar bandera hasReconnected para ejecutar reconexión solo una vez
- Evita que el useEffect se ejecute infinitamente
- Reduce carga del servidor significativamente
- Cambiar icono a power button (Heroicons)
- Mover botón debajo del nombre del agente en el lobby
- Hacer botón más compacto (circular)
- Mejorar layout del header del lobby
- Añadido sistema de sesiones con localStorage
- Nuevo hook useSessionStorage para manejar sesiones
- Botón de salir de la partida (ExitGameButton) en todas las pantallas del juego
- Botón de logout (LogoutButton) solo en el lobby
- Evento leave_game en servidor para cerrar partida cuando alguien sale
- Evento reconnect_session para reconectar jugadores después de recargar
- Actualizado GameBoard para incluir botón de salida
- Actualizado page.tsx para manejar sesiones y logout
- Mover timer de votación a esquina superior izquierda (fixed, 20px margen)
- Eliminar contador de votos rechazados en resultado de misión
- Ajustar posiciones de tokens de victoria/fracaso en el mapa
- Mantener mapa visible durante toda la fase MISSION_RESULT (eliminar timeout de 7s)
- Cambiar título intro de 'Guerra Total' a 'Traidores en París'
- Ajustar tamaño de cartas aceptar/rechazar líder a cuadradas (w-32 h-32)
TODO: Afinar posiciones de tokens 3, 4 y 5 en el mapa
- Intro: Change title to 'Sombras en París'
- Roll Call: Make screen fully responsive with fixed header
- Team Building: Clean up leader UI and make player tokens responsive
- Mission History: Fix expand/collapse interaction (z-index issue)
- Implementación completa del juego La Resistencia
- Sistema de roles: Aliados y Nazis (incluyendo Francotirador)
- Fases del juego: Selección de equipo, votación, misión, asesinato
- Interfaz de usuario con imágenes temáticas
- Sistema de WebSockets para multijugador en tiempo real
- Configuración Docker para desarrollo y producción
- Dockerfiles optimizados para cliente y servidor
- docker-compose.yml para desarrollo local
- docker-compose_prod.yml para despliegue en producción con Nginx Proxy Manager
- Base de datos PostgreSQL integrada
- Documentación de cambios y fases del juego
- Changed GameBoard background to show mission_success.png for ALLIED_WIN and mission_fail.png for NAZIS_WIN
- Hidden board area completely during victory phases
- Removed redundant background image from VictoryScreen component
- Fixed image extensions from .jpg to .png for victory backgrounds
Nuevas funcionalidades:
- Pantallas de victoria diferenciadas (NAZIS_WIN / ALLIED_WIN)
* Diseño visual diferenciado (rojo para Nazis, azul para Aliados)
* Timer de 30 segundos con auto-finalización
* Estadísticas de misiones (exitosas vs fracasadas)
* Opciones para el host: NUEVA PARTIDA o TERMINAR
* Mensaje de espera para jugadores no-host
- Sistema de reinicio de partida
* Método restartGame() que resetea todas las variables
* Reasigna roles y líder aleatorios
* Vuelve a fase REVEAL_ROLE manteniendo jugadores
- Sistema de finalización y expulsión
* Método finalizeGame() que expulsa a todos después de 5s
* Auto-expulsión si el host no decide en 30s
* Limpieza de partida del servidor
Mejoras en MISSION_RESULT:
- Eliminado oscurecimiento de fondo (bg-transparent)
- Tiempo de visualización aumentado de 5 a 7 segundos
- Ahora se puede ver claramente el tablero con las fichas
Lógica de transiciones:
- 3 misiones fracasadas → NAZIS_WIN
- 3 misiones exitosas → ASSASSIN_PHASE
* Asesino acierta (mata a Marlene) → NAZIS_WIN
* Asesino falla → ALLIED_WIN
Archivos modificados:
- shared/types.ts: Nuevas fases NAZIS_WIN y ALLIED_WIN
- server/src/models/Game.ts: Métodos restartGame() y finalizeGame()
- server/src/index.ts: Eventos restart_game y finalize_game
- client/src/hooks/useSocket.ts: Acciones restartGame() y finalizeGame()
- client/src/components/GameBoard.tsx: Renderizado de VictoryScreen
- client/src/components/MissionResult.tsx: Sin oscurecimiento, 7s
- client/src/components/VictoryScreen.tsx: NUEVO componente
Nuevas funcionalidades:
- Títulos y subtítulos en cartas de misión
* Título: 'MISIÓN X' (blanco, mayúsculas)
* Subtítulo: Nombre de la misión (amarillo dorado)
* Objeto missionNames con 5 nombres editables:
1. Sabotaje en el Tren
2. Rescate del Prisionero
3. Destrucción del Puente
4. Robo de Documentos
5. Asalto al Cuartel General
Correcciones:
- Timer de votación de líder ahora se inicia correctamente después de terminar una misión
- Importado GamePhase en server/src/index.ts para comparaciones de fase
- Agregada lógica en finish_mission_result para iniciar timer cuando vuelve a VOTE_LEADER
- Votación se resuelve automáticamente si no todos votan (mayoría sobre votos emitidos)
Archivos modificados:
- client/src/components/GameBoard.tsx: Títulos de misiones
- server/src/index.ts: Fix timer post-misión
- Timer de 10 segundos que se reinicia correctamente al cambiar de líder
- Votación por mayoría calculada sobre votos emitidos, no total de jugadores
- Si nadie vota, líder rechazado automáticamente
- Alemanes pueden ver carta de sabotaje en misiones
- Reset correcto de selectedTeam al cambiar de fase
- Contador de votos fallidos incrementa correctamente
- Logs mejorados para debugging
Fixes:
- Timer visual se reinicia con key basada en currentLeaderId
- Facción verificada correctamente (Faction.ALEMANES vs 'spies')
- forceResolveLeaderVote llama a resolución con votos actuales
- selectedTeam se limpia al salir de TEAM_BUILDING
- Cambiar nombre del juego de 'La Resistencia' a 'Francia Ocupada'
- Actualizar roles: Marlene, Capitán Philippe, Partisano, Comandante Schmidt, Francotirador, Agente Doble, Infiltrado, Colaboracionista
- Actualizar facciones: Aliados vs Alemanes
- Implementar timer de votación de líder con auto-avance
- Eliminar componentes de debug
- Servidor avanza automáticamente después de 5 segundos
- Resuelve problema de quedarse bloqueado en pantalla de votos
- Cliente muestra 'Procesando resultado...'
- Muestra resultado de la misión con animaciones
- Obtiene datos de missionHistory
- Muestra éxitos vs sabotajes
- Muestra progreso de misiones (Resistencia vs Espías)
- Botón CONTINUAR para avanzar
- Animaciones escalonadas para mejor UX
- Carta seleccionada: opacity-100 (brillante)
- Carta NO seleccionada: opacity-50 (apagada)
- Aplicado a las 4 cartas (2 éxito + 2 sabotaje)
- Botones deshabilitados después de votar
- Solución mucho más simple y elegante
- Borde amarillo brillante cuando está seleccionada
- Ring amarillo con glow
- Deshabilitar botón después de votar
- Falta aplicar a las otras 3 cartas
- Cambiar text-4xl a text-5xl para tics más grandes
- Agregar text-white para que los tics sean blancos
- Agregar font-bold para mejor visibilidad
- Mejorar layout con flex-col
- Agregar mensaje informativo
- Cambiar onClick para usar handleMissionVote
- Crear componentes MissionReveal y MissionResult
- Importar componentes en GameBoard
- Tracking de votos con feedback visual
- Usar imágenes vote_approve y vote_reject
Resuelve error: MissionReveal is not defined
- Cambiar mission_success/fail a vote_approve/reject
- Agregar estado missionVote para trackear voto del jugador
- Agregar función handleMissionVote
- Reset de voto cuando cambia la fase
- Falta: actualizar onClick y agregar feedback visual
- Mover useState de cardOrder al nivel del componente
- Eliminar IIFE que causaba violación de reglas de hooks
- Usar cardOrder directamente en lugar de successFirst
- Ahora la fase MISSION debería funcionar correctamente
- Fix: Usar currentLeaderId en lugar de player.isLeader (evita múltiples L)
- Fix: Mostrar estrella verde también en VOTING_TEAM
- Ahora solo aparece un icono L (líder actual)
- Estrellas verdes visibles para equipo propuesto
- Add: Icono de estrella ⭐ verde para identificar miembros del equipo
- Fix: Diferencia clara entre líder (L amarillo) y miembros del equipo (⭐ verde)
- Visible durante fases MISSION, MISSION_REVEAL y MISSION_RESULT
- Fix: isLeader ahora usa currentLeaderId del estado (evita múltiples líderes)
- Mejora: TEAM_BUILDING muestra claramente quién es el líder actual
- Mejora: Contador de jugadores seleccionados en TEAM_BUILDING
- Mejora: MISSION con cartas grandes en pantalla completa
- Feature: Posición aleatoria de cartas (izq/der) para evitar detectar votos
- Mejora: Animaciones mejoradas con Framer Motion
- Mejora: Mensajes más claros para jugadores que esperan