Ski Vesotel
Plataforma de gestión integral para escuela de esquí. Permite a los profesores registrar sus horas (clases particulares, cursillos) y a la administración gestionar nóminas, tarifas y usuarios.
Arquitectura del Sistema
El sistema sigue una arquitectura de microservicios contenerizada:
1. Frontend
- Contenedor:
vesotel_frontend_container - Framework: Next.js 14 (App Router)
- Puerto: 3000 (Expuesto vía Caddy)
- Build: Producción (Optimizado)
2. Backend
- Contenedor:
vesotel_backend_container - Framework: Python FastAPI / SQLAlchemy
- Base de Datos: PostgreSQL 16
- Auth: JWT + Soporte OIDC (Authentik)

Estructura de Datos
El núcleo del sistema es una base de datos relacional PostgreSQL que gestiona usuarios, empresas y registros de trabajo.
Tablas Principales
- Users: Tabla central con roles y perfiles.
- Companies: Escuelas de esquí o entidades legales.
- CompanyMember: Tabla pivote (Many-to-Many) que define roles por empresa.
- UserCompanyRate: Tarifas y retenciones específicas por usuario y empresa.
- WorkLog: Registro diario (horas o días), con cálculo automático de importes brutos y netos.
Seguridad y Despliegue
El acceso público sigue un esquema de Defensa en Profundidad con 3 capas, diseñado para exponer el servicio de forma segura.
Capa 1: Reverse Proxy
Plesk + Let's Encrypt SSL. Termina la conexión segura y redirige al túnel.
Capa 2: Túnel SSH
Conexión cifrada persistente (SystemD) entre el VPS público y el servidor local.
Capa 3: Docker
Red privada aislada. Contenedores con usuarios no privilegiados (UID 1000).
Nota: Este es un proyecto en producción real. La documentación completa incluye configuraciones de despliegue sensibles que se han omitido por seguridad.