Volver a proyectos
Caso de estudio

SisPasantías

Portal institucional de empleo y pasantías

Proyecto final académico en equipo · Full Stack

Bolsa de empleo y pasantías para un instituto terciario: conecta alumnos y egresados con empresas, mientras el instituto aprueba a quién participa, modera lo que se publica y audita cada acción relevante.

ReactNode.jsExpressPostgreSQLSequelizeJestPlaywright

La demo usa datos ficticios y cuentas de prueba disponibles en la pantalla de inicio de sesión.

Capturas reales de SisPasantías: espacio de reclutamiento, resumen de empresa y postulaciones del alumno

El problema

  • Alumnos y egresados necesitan un lugar confiable donde acceder a sus primeras oportunidades laborales y pasantías.
  • Las empresas necesitan publicar ofertas y gestionar sus procesos de selección con más de una persona del equipo.
  • El instituto necesita controlar quién participa y qué se publica, con trazabilidad de lo que ocurre.
  • Había que separar el gobierno institucional de la operación diaria del reclutamiento.

Del análisis a la implementación

El proyecto no empezó programando. Antes de escribir código se relevó el problema, se definieron requerimientos y se modeló la solución; el desarrollo vino después y se validó con tests.

  1. 1

    Relevamiento

    Identificación del problema, actores y necesidades del sistema.

  2. 2

    Requerimientos

    Definición de requerimientos funcionales y no funcionales.

  3. 3

    Modelado

    Casos de uso, diagramas, modelo de datos, riesgos y arquitectura.

  4. 4

    Desarrollo

    Implementación progresiva de frontend, backend y reglas de negocio.

  5. 5

    Testing

    Pruebas de backend, integración, E2E y validación de flujos por rol.

  6. 6

    Despliegue

    Publicación del frontend, backend, base de datos, archivos y servicios externos.

Documentación y análisis

El proyecto cuenta con documentación funcional y técnica desarrollada en equipo durante su etapa de análisis y diseño.

  • Requerimientos funcionales y no funcionales
  • Perfiles de usuario
  • Casos de uso
  • Diagrama de clases
  • DER
  • Gantt
  • FODA
  • Matriz de riesgo y mapa de calor
  • Diagramas de despliegue, componentes y secuencia
  • Diseño de interfaces
Ver documentación funcionalPDF · 31 páginas · 3 MB

Evolución del proyecto

El sistema evolucionó considerablemente respecto de la propuesta inicial. Durante el desarrollo se incorporaron nuevas reglas de negocio, roles internos de empresa, moderación, auditoría, chat, notificaciones, seguridad avanzada, testing automatizado y una arquitectura de despliegue más completa.

La solución

Un sistema multirrol con cuatro experiencias distintas. No hay autorregistro público: el instituto da de alta a los alumnos y aprueba a las empresas y a sus reclutadores.

Administrador del Sistema

Gobierna la plataforma: aprueba empresas y reclutadores, modera ofertas, gestiona usuarios, importa alumnos por CSV y consulta auditoría y estadísticas.

Administrador de Empresa

Gestiona la cuenta de la empresa: equipo, perfil, responsable de cada oferta y pausa o cierre de publicaciones. No crea ofertas: gobierna.

Reclutador

Crea y edita sus ofertas, revisa candidatos, avanza el pipeline de selección con notas internas y conversa con postulantes por chat.

Alumno / Egresado

Completa su perfil y CV, explora ofertas recomendadas y filtradas, se postula y sigue el estado de cada postulación.

Flujo principal

  1. 1

    Empresa solicita registro

  2. 2

    Instituto aprueba

  3. 3

    Reclutador crea oferta

  4. 4

    Moderación

  5. 5

    Alumno se postula

  6. 6

    Proceso de selección

  7. 7

    Chat

  8. 8

    Contratación

Arquitectura

Frontend

React + Vite

Vercel
REST API · proxy de Vercel

Backend

Node.js + Express

Render
Sequelize · migraciones

Base de datos

PostgreSQL

Neon

Archivos

Cloudflare R2

Bucket privado para CVs y público para imágenes

Email

Brevo

Notificaciones y recuperación de contraseña

CI/CD

GitHub Actions

Migraciones, tests, lint y build en cada push a main y PR

Seguridad y permisos

La seguridad se resolvió en el backend, que es la autoridad: el frontend guía al usuario pero no decide permisos.

  • JWT en cookie HttpOnly

    Sesión fuera del alcance de JavaScript, con control de sesiones y revocación por versión de token.

  • Protección CSRF

    Patrón double-submit: cookie y header deben coincidir.

  • RBAC en dos niveles

    Rol global (admin, alumno, egresado, empresa) + rol interno de empresa.

  • Helmet, CSP y CORS

    Cabeceras estrictas y lista blanca de orígenes, sin comodines.

  • Rate limiting

    Límites separados para autenticación, escrituras y exportaciones.

  • Contraseñas con bcrypt

    Hash con costo 12; nunca se almacenan en texto plano.

  • Validación front y back

    El frontend guía al usuario; el backend es la autoridad.

  • Archivos privados

    CVs servidos solo a usuarios autorizados; tipo verificado por MIME y magic bytes.

  • Auditoría

    Registro de acciones sensibles con filtros y exportación a CSV, Excel y PDF.

Testing y calidad

JestSupertestPlaywrightESLintOpenAPIGitHub Actions
  • Tests de backend con Jest y Supertest sobre la API y sus reglas de negocio.
  • Tests E2E con Playwright para los flujos de cada rol, sesión, notificaciones y vistas responsive.
  • CI que aplica migraciones, verifica que sean reversibles, detecta desvíos del esquema, corre los tests y valida lint y build.
  • API documentada con OpenAPI; el CI controla que la especificación esté actualizada.

Despliegue

Frontend
Vercel
Backend
Render
Base de datos
Neon
Archivos
Cloudflare R2
Email
Brevo

Capturas

Vistas de escritorio de SisPasantías: espacio de reclutamiento, panel de administración, chat y postulaciones del alumno
Escritorio · Reclutador, administración, chat y alumno
Vistas móviles de SisPasantías: panel del alumno y espacio de reclutamiento
Móvil · Alumno y reclutador

Mi participación

Proyecto académico desarrollado en equipo por cuatro integrantes para Prácticas Profesionalizantes III.

Mi rol inicial: Backend y arquitectura.

Durante la evolución del proyecto fui uno de los principales contribuidores técnicos del repositorio y participé en distintas áreas del sistema:

  • Backend y APIs REST
  • Reglas de negocio
  • Roles y permisos
  • Modelado y migraciones de base de datos
  • Seguridad de sesión
  • Archivos privados
  • Auditoría
  • Frontend por roles
  • Testing con Jest, Supertest y Playwright
  • CI/CD con GitHub Actions
  • Despliegue multi-servicio
  • Refinamiento de la experiencia de usuario

Desafíos y aprendizajes

RBAC entre roles globales e internos

Combinar el rol del usuario en la plataforma con su rol dentro de la empresa, aplicando los permisos en el backend y no solo en la interfaz.

Separar gobierno y operación

Definir qué decide el administrador de empresa y qué hace el reclutador, para que cada uno vea y modifique solo lo que le corresponde.

Seguridad de sesión

Manejar la sesión con cookies HttpOnly implicó resolver CSRF, CORS con credenciales y un proxy de Vercel hacia la API para mantener el mismo origen.

Migraciones confiables

Evolucionar el esquema con migraciones reversibles y un chequeo en CI que detecta diferencias entre la base y el esquema esperado.

Despliegue multi-servicio

Coordinar Vercel, Render, Neon, Cloudflare R2 y Brevo con variables de entorno y CORS consistentes entre entornos.

Crecer sin romper

Sostener una base de código grande apoyándose en tests de backend y E2E por rol antes de cada cambio importante.

¿Querés ver el sistema funcionando?