De una Idea al Ping Pong Manager: Construyendo un Sistema de Torneos Full-Stack con Flask y Docker
¿Alguna vez te ha pasado que un simple juego de oficina o con amigos necesita "un poco de orden"? Lo que empezó como una necesidad para organizar partidas de ping-pong terminó convirtiéndose en una aplicación web completa, robusta y lista para la comunidad.
Hoy quiero compartirles el proceso de desarrollo de Ping Pong Manager, una herramienta diseñada para gestionar torneos desde cualquier dispositivo.
El Desafío Inicial
El objetivo era claro: crear una plataforma donde pudiéramos registrar jugadores, armar llaves de torneos (singles y dobles) y mantener un registro de los resultados. Pero como todo proyecto de software, lo que parece simple esconde retos interesantes.
Lo que construimos (El Stack Tecnológico)
Decidimos usar un stack moderno y eficiente que permitiera un desarrollo ágil:
- Python & Flask: Para la lógica del servidor.
- SQLAlchemy (SQLite): Para una persistencia de datos ligera pero potente.
- Docker: Para asegurar que cualquier persona pueda correr la app sin pelearse con las dependencias.
La Evolución del Proyecto
A lo largo del desarrollo, fuimos superando hitos que transformaron una herramienta básica en un producto profesional:
1. Gestión Inteligente de Jugadores
Implementamos un sistema de ABM (Alta, Baja, Modificación) completo. No solo registramos a los jugadores, sino que añadimos una función de "Convocatoria". Esto permite tener una base de datos de 50 personas pero generar el torneo solo con los 8 o 16 que están presentes en ese momento.
2. Lógica de Torneo Avanzada
El motor de la app genera automáticamente enfrentamientos aleatorios para:
- Singles (1 vs 1).
- Dobles (2 vs 2): Creando parejas dinámicas que no se rompen durante la competencia. Además, incluimos una Detección de Campeón que celebra la victoria con animaciones cuando se llega al final de la llave.
3. Seguridad y Personalización para el Admin
Añadimos un panel de administración protegido con Flask-Login. Como administrador, no solo controlas los resultados, sino que puedes personalizar tu perfil: cambiar tu nombre, actualizar tu contraseña y subir un Avatar personalizado con un sistema automático de limpieza de archivos en el servidor.
4. Experiencia Móvil (Responsive Design)
Sabíamos que la app se usaría mayormente desde el celular al lado de la mesa de juego. Implementamos un diseño responsivo donde las pesadas tablas de datos se transforman en tarjetas táctiles, facilitando la carga de puntos y la lectura de posiciones.
El Toque Final: Dark Mode
Porque todo desarrollador sabe que el Modo Oscuro es ley, implementamos un interruptor de tema persistente que utiliza localStorage para recordar tu preferencia, incluso si cierras el navegador.
Abierto a la Comunidad
Hoy, el proyecto ha llegado a su madurez técnica y he decidido liberarlo. Ya está disponible en GitHub para quienes quieran auditar el código y aportar lo que crean necesario.
¿Hasta dónde llegamos?
Lo que tenemos hoy es una aplicación que:
- Persiste datos en una base de datos real.
- Protege la gestión mediante sesiones seguras.
- Se adapta a cualquier tamaño de pantalla.
- Es fácil de instalar gracias a la contenedrización.
¿Qué sigue? El software libre nunca termina. Estoy pensando en integrar bots de Telegram para notificaciones en vivo o quizás un historial histórico de "Head-to-Head".
¡Te invito a probarlo y a dejar tus sugerencias! 🏓
Pantalla principal de la aplicación
Panel de Administración con Avatar subido desde una PC Local (Si no se quiere subir nada hay un avatar por defecto)
Seteo de un torneo de Singles
Mostrando a los campeones
Torneo de Dobles
Nos leemos en el Fediverso
Comentarios
Deja un comentario