Volver a proyectos
EdTech / Sector público2026En solitario, del diseño al lanzamiento

Exámenes online y certificación automática

Problema

La fundación emite cualificaciones profesionales reconocidas oficialmente, y todo el proceso funcionaba sobre un sistema antiguo cuyo código fuente la fundación no tenía. Eso significaba que ningún otro programador podía ampliarlo ni siquiera corregir sus errores. Además, se había perdido el contacto con el único desarrollador responsable. El sistema era inestable y estaba lleno de fallos que ya no quedaba nadie para reparar. La fundación necesitaba dos cosas: un sistema reconstruido desde cero y alguien que se ocupara de él tras el lanzamiento, un programador con quien pudiera contar de verdad.

Solución

Construí un sistema que lleva todo este proceso de principio a fin en un solo lugar. El centro registra un examen en la aplicación, la fundación lo aprueba, el examinador lo dirige, el candidato lo realiza en el navegador y el certificado, con su número de registro, se genera solo como un PDF listo para imprimir. Cada quien ve únicamente lo que le concierne: el centro sus propios exámenes, el examinador sus fechas, la fundación todo.

Un examen no se crea desde cero cada vez. El sistema guarda plantillas de examen, un banco de preguntas y los resultados de aprendizaje. La fundación monta el examen a partir de piezas ya existentes, y cada pregunta está vinculada a un resultado de aprendizaje concreto, de modo que queda claro que el examen comprueba exactamente lo que exige la cualificación.

El tiempo del examen lo controla el sistema, no el ordenador del candidato. Si a alguien se le cae internet a mitad del examen, vuelve y sigue escribiendo, y las respuestas no se pierden. Cuando se agota el tiempo, el examen se cierra solo. Durante la fase de pruebas tenía una vista en directo de todo lo que ocurría en la aplicación, así que corregía los fallos antes de que nadie llegara a reportarlos.

Lo hice todo yo solo: diseñé la UX/UI a petición del cliente, escribí el código y desplegué el sistema.

En producción

Pantallas de la app

Algunas capturas del producto en vivo. Los pies de foto te dicen qué estás viendo.

Panel de gestión con estadísticas y navegación según el rolResultados de aprendizaje con filtros e importación desde CSVBanco de preguntas de examen vinculadas a las cualificaciones

Panel de gestión con estadísticas y navegación según el rol

4
Roles, cada uno con su propio panel
Solicitud → certificado
Todo el ciclo del examen en un solo sistema
Cero pérdida de datos
El examen sobrevive a una caída de la conexión

Qué hace

Capacidades clave

Proceso de examen de principio a fin

Desde que un centro registra un examen, pasando por la aprobación de la fundación y la conducción del examinador, hasta que el candidato lo realiza en el navegador, todo en un mismo lugar.

Exámenes robustos e imposibles de manipular

Una caída de la conexión no pierde respuestas, y el temporizador corre en el servidor, así que el reloj no se puede manipular desde el equipo del candidato.

Exámenes montados con bloques reutilizables

Plantillas, un banco de preguntas y resultados de aprendizaje; cada pregunta se asocia a un resultado, así que el examen comprueba de forma demostrable lo que exige la cualificación.

Certificados numerados automáticos

Al aprobar, se genera solo un certificado PDF listo para imprimir con su número de registro, sin papeleo manual.

Acceso según el rol

Cuatro roles con vistas separadas: el centro solo ve sus propios exámenes, el examinador solo sus fechas, el candidato solo su examen y la fundación tiene la imagen completa.

Datos aislados por entidad

Los datos de cada entidad quedan totalmente separados y protegidos, con aislamiento a nivel de fila en la base de datos.

Stack técnico

Tecnologías principales

Los paquetes e integraciones concretos están listados más abajo.

Flutter WebDartSupabasePostgreSQLClean ArchitectureBLoCFirebase HostingAzure App Insights

Arquitectura

Capas del sistema

Web
  • Flutter Web sobre Clean Architecture
  • Paneles según el rol: fundación, centro, examinador, examinando
  • Temporizador de examen gobernado por el servidor, con desconexión y reconexión
  • Responsive, desplegado en Firebase Hosting (no-cache, PWA off)
Backend
  • PostgreSQL con row-level security en cada tabla
  • RPC SECURITY DEFINER que rompen la recursión de RLS y acotan según el rol
  • Edge functions en Deno para correo transaccional (Resend)
  • pg_cron: cierre automático de exámenes caducados, tareas keep-warm
  • Numeración de certificados continua y por año

Librerías

Paquetes clave

  • flutter_blocgestión de estado con Cubit
  • freezedentidades y estados inmutables
  • dartzmanejo de errores con Either<Failure, T>
  • get_it + injectableinyección de dependencias
  • go_routerenrutado y guards según el rol
  • pdf + printinggeneración de certificados listos para imprimir

Integraciones

Servicios externos

  • SupabasePostgres, Auth, Storage, Edge Functions
  • Resendcorreo transaccional (invitaciones, cuentas)
  • Azure Application Insightsmétricas en vivo, errores, dependencias
  • Firebasehosting + analítica de producto con GA4
  • Sentryseguimiento de errores con breadcrumbs

¿Estás construyendo algo parecido?

Escribe unas líneas sobre el proyecto y te respondo con notas concretas y la fecha en que puedo empezar.

Hablemos