Para que un Producto Mínimo Viable (MVP) cumpla su propósito, la velocidad de desarrollo y el coste de mantenimiento son dos factores clave. El reto en este proyecto era construir una aplicación web segura y multiusuario sin incurrir en costes de infraestructura ni en la complejidad de gestionar servidores dedicados.
La Pila Tecnológica (Stack)
Elegí un ecosistema moderno basado en Python, optimizado para el despliegue rápido y con un consumo de recursos muy eficiente:
- Frontend y Lógica de Aplicación (Streamlit): Permite crear interfaces dinámicas y profesionales en Python puro. Para el temporizador en tiempo real elegí la directiva
@st.fragment, logrando un conteo segundo a segundo sin recargar toda la página ni generar parpadeos en la pantalla. - Base de Datos Relacional (Neon PostgreSQL): Base de datos serverless que ofrece una capa gratuita permanente. Garantiza la persistencia segura de los registros de tiempo, usuarios y configuraciones de tarifas.
- Seguridad y Autenticación (Passlib / Bcrypt): Gestión de usuarios por roles (
participanteycoordinación) con contraseñas encriptadas mediante hashing seguro antes de guardarse en la base de datos. - Despliegue Continuo (Streamlit Community Cloud + GitHub): Alojamiento en la nube conectado directamente con el repositorio de GitHub. Cualquier cambio o mejora subida a la rama principal se despliega de forma automática en pocos segundos.

Decisiones Clave de Diseño Técnico
1. Gestión de Zona Horaria Centralizada
Uno de los fallos más habituales en aplicaciones con control de tiempo es el descuadre por el uso de distintas zonas horarias entre el cliente y el servidor. En la capa de consulta de PostgreSQL forcé la conversión explícita a la zona horaria objetivo (AT TIME ZONE 'Europe/Madrid'). De este modo, la hora mostrada siempre coincide con el horario real local, independientemente del servidor en la nube donde se ejecute la app.
2. Separación de Secretos y Variables de Entorno
Para mantener la seguridad del código al publicarlo en GitHub, abstraje la cadena de conexión de Neon mediante la librería python-dotenv en local y st.secrets en la nube. Esto garantiza que las credenciales de la base de datos nunca queden expuestas en el código fuente.
En el próximo capítulo explicaré el Panel de Coordinación, el diseño de los acuerdos por hora con herencia automática y cómo solucioné técnicamente los errores de redondeo en los importes económicos.