Login Seguro
Implementación de un sistema de login por roles con autenticación basada en JWT, garantizando la seguridad y privacidad de los usuarios.
Mi Trabajo de Fin de Grado consiste en el desarrollo de una plataforma digital de participación orientada al ámbito educativo, diseñada para trasladar al entorno online un proceso tan cotidiano y necesario como la votación. El sistema permite organizar consultas, encuestas y votaciones por categorías, facilitando que centros educativos de cualquier nivel —desde colegios e institutos hasta universidades, ciclos formativos o escuelas infantiles— puedan gestionar sus procesos participativos de forma centralizada y accesible.
La plataforma incorpora un sistema de votación flexible que permite elegir entre voto completamente anónimo o un modelo de voto verificable mediante identificador cifrado, donde cada usuario puede comprobar posteriormente que su voto no ha sido alterado sin comprometer la privacidad del proceso. De esta forma se combinan transparencia, seguridad y confianza dentro del sistema.
"Transformando el voto educativo en un proceso digital, seguro y transparente."
Además, el proyecto implementa una arquitectura de roles y permisos para adaptar cada votación a su contexto real. Existen perfiles diferenciados para alumnos, profesores, padres, asociaciones AMPA y administradores, permitiendo restringir la participación según el tipo de consulta. Esto hace posible, por ejemplo, crear votaciones exclusivas para docentes, encuestas dirigidas únicamente a familias o decisiones generales abiertas a toda la comunidad educativa.
Como complemento, la plataforma ofrece gráficas y visualización de resultados en tiempo real, proporcionando una representación clara e intuitiva de la participación y del resultado de cada proceso. El objetivo final del proyecto es modernizar la toma de decisiones en entornos educativos, haciendo la participación más accesible, organizada y transparente para todos sus integrantes.
Implementación de un sistema de login por roles con autenticación basada en JWT, garantizando la seguridad y privacidad de los usuarios.
Interfaz intuitiva para que los usuarios gestionen sus datos personales y preferencias dentro de la plataforma.
Elección modo anónimo o con tracking, permitiendo una experiencia de usuario fluida y segura.
Herramientas para administradores / profesores que permiten crear y configurar encuestas de forma sencilla.
Gráficas en tiempo real que muestran los resultados de la participación de manera clara.
De todos los frameworks que he probado, Nuxt es de mis favoritos. Su estructura clara, los autoimports y el routing automático hacen que desarrollar con él sea cómodo, rápido y ordenado.
Además, su integración con Vue y el uso de directivas como v-if y v-for me gusta mucho.
He elegido Magic UI como librería de componentes preconstruidos que me ha ayudado a crear interfaces modernas y atractivas sin tener que escribir código desde cero.
Durante el desarrollo de este proyecto he aprendido a utilizar el sistema de middleware de Nuxt para gestionar la autenticación y proteger rutas . Gracias a ello, validar el estado del usuario antes de cada navegación, redirigir automáticamente cuando no existe sesión activa y evitar llamadas innecesarias al backend.
Para tener gráficos he usado la librería Chart.js es la elegida porque no pesaba mucho y era fácil de integrar. El unificar los datos para pintar y enviarlos del backend me ha parecido una tarea interesante.
El framework elegido para el backend ha sido NestJS, principalmente por su enfoque estructurado y escalable. Su arquitectura basada en módulos, controladores y servicios me ha parecido muy organizada y fácil de mantener.
Además, su forma de trabajar con TypeScript y su filosofía modular hacen que el crecimiento de la aplicación sea más controlado y mantenible, lo que ha sido clave en el desarrollo de este TFG.
Para la gestión de la base de datos he utilizado TypeORM, con un enfoque orientado a entidades. He podido definir de forma organizada cómo se almacenan y relacionan los datos dentro del sistema.
Este enfoque ha facilitado la interacción con la base de datos, simplificando las consultas y operaciones CRUD.
En el backend también he trabajado con guards de NestJS para la protección de rutas, aplicando control de acceso en función del estado del usuario y su rol dentro del sistema. A través de @UseGuards() he podido restringir el acceso a determinadas funcionalidades según permisos específicos.
Además, mediante el uso de decoradores he definido roles de forma clara en cada endpoint, lo que me ha permitido implementar una gestión de permisos más organizada y mantenible dentro de la aplicación.
Otro aspecto clave del backend ha sido la correcta definición de interfaces y enums utilizando TypeScript. Gracias a ello, distintos estados y roles del sistema quedan bien definidos, facilitando el mantenimiento y la escalabilidad del proyecto.
He utilizado TypeScript en todo el proyecto me parece un lenguaje muy potente, facilita el mantenimiento. Su tipado estático permite capturar errores en tiempo de desarrollo.
He utilizado la IA como herramienta de apoyo en el desarrollo del proyecto. Me ha ayudado a generar código, a documentar el proyecto y a resolver problemas. En estos tiempos no usarla es sinonimo de quedarse atras y no aprovechar las herramientas que tenemos a nuestra disposición.