Logo
02. Trabajo de Fin de Grado

Decidim

Decidim Icon

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.

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.

Gestión de Perfiles

Interfaz intuitiva para que los usuarios gestionen sus datos personales y preferencias dentro de la plataforma.

Proceso de votación

Elección modo anónimo o con tracking, permitiendo una experiencia de usuario fluida y segura.

Creación de Encuestas

Herramientas para administradores / profesores que permiten crear y configurar encuestas de forma sencilla.

Visualización de Datos

Gráficas en tiempo real que muestran los resultados de la participación de manera clara.

Cosas que hacen interesante el proyecto

/ FRONTEND

__ Nuxt

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.

__ Componentes

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.

__ Middleware

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.

__ Gráficos

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.

/ BACKEND

__ NestJS

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.

__ Consultas BBDD

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.

__ Protección de rutas

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.

__ Tratar los datos

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.

/ TYPESCRIPT

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.

/ USO DE LA IA

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.