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.
La demo usa datos ficticios y cuentas de prueba disponibles en la pantalla de inicio de sesión.
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
Relevamiento
Identificación del problema, actores y necesidades del sistema.
- 2
Requerimientos
Definición de requerimientos funcionales y no funcionales.
- 3
Modelado
Casos de uso, diagramas, modelo de datos, riesgos y arquitectura.
- 4
Desarrollo
Implementación progresiva de frontend, backend y reglas de negocio.
- 5
Testing
Pruebas de backend, integración, E2E y validación de flujos por rol.
- 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
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
Empresa solicita registro
- 2
Instituto aprueba
- 3
Reclutador crea oferta
- 4
Moderación
- 5
Alumno se postula
- 6
Proceso de selección
- 7
Chat
- 8
Contratación
Arquitectura
Frontend
React + Vite
Backend
Node.js + Express
Base de datos
PostgreSQL
Archivos
Cloudflare R2
Bucket privado para CVs y público para imágenes
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
- 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
- Brevo
Capturas


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?