Volver al Portfolio

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)
Arquitectura del Sistema Ski Vesotel
Diagrama de Arquitectura y Flujo de Datos

Estructura de Datos

El núcleo del sistema es una base de datos relacional PostgreSQL que gestiona usuarios, empresas y registros de trabajo.

Esquema de Base de Datos
Diagrama Entidad-Relación

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.