DiegoBarrionuevo
← Trabajo seleccionadoP/02Producción

Un certificado para cada persona que se sentó a aprender.

Registro, acreditación y certificados en cuatro servicios, migrados sin downtime y con más de 1.700 tests.

Desarrollo y liderazgo técnico2023 — 2026
Node.jsFastifyTypeScriptReactPostgreSQLDirectusDockerCI/CD
El certificado

Un certificado por persona.

Cada certificado tiene su página pública: nombre, taller, fecha y un identificador verificable. Es lo que la persona comparte en LinkedIn y lo que un empleador abre para comprobar que existe. Abajo está esa página, re-creada: mové el puntero sobre el certificado y probá los otros de la colección.

La página ofrece el PDF para descargar, el link para compartir en redes y un botón de copiar el link de verificación. El PDF no vive en un disco: se compone bajo demanda con sharp y pdfkit a partir de la plantilla del taller, con el nombre como capa SVG, en el mismo paso que genera la tarjeta social de 1200 × 627.

PDF
compuesto bajo demanda
SVG
el nombre, como capa sobre la plantilla
1200 × 627
tarjeta social por certificado

¡Felicitaciones, Diego! Acá está tu logro.

Tu nuevo logro

Dominá Search Console para impulsar el SEO de tu sitio web en WordPress

Descargar
Certificado de asistencia: Dominá Search Console para impulsar el SEO de tu sitio web en WordPress
Registro y acreditación

Anotarse sin cuenta, acreditarse con un click.

Landing de registro, marca Cloud

2
marcas, una landing por taller
0
cuentas necesarias

Cada taller tiene su landing de registro con la marca que corresponde: DonWeb Cloud o la marca oficial de DonWeb. La persona deja nombre y mail, recibe la confirmación por correo y no necesita crear ninguna cuenta: el mail es la identidad.

El día del taller, la acreditación de asistencia es una página más: la persona confirma que estuvo, el sistema la marca presente y el certificado queda listo para emitirse. Los correos de confirmación, recordatorio y certificado salen por Customer.io con los datos de cada inscripción.

Migración

Las URLs de 2023 siguen vivas.

Las primeras URLs de certificado llevaban el id del curso y el mail de la persona a la vista: /72/72_persona@mail.com. Miles de esos links ya estaban publicados en LinkedIn y no se podían romper. Hoy cada certificado vive en /cloud/certificado/{uuid}, y la URL vieja sigue resolviendo: Caddy y un rewrite de Next la llevan a un resolver que responde 307 hacia la nueva.

La migración de junio de 2026 movió 121.087 inscripciones y 205 programas sin perder un registro, y reemplazó 43 GB de PDFs guardados en disco por certificados que se componen al pedirlos. El corte de nginx a Caddy duró unos 17 segundos; el servicio no se detuvo.

121.087
inscripciones migradas
205
programas, sin pérdidas
~17 s
de corte nginx → Caddy
2023 → 2026

El mismo certificado, dos generaciones.

A la izquierda, mi propio certificado de agosto de 2024 tal como lo renderizaba el pipeline original: una imagen fija, compuesta en el servidor y guardada en disco. A la derecha, el mismo certificado en la página pública de 2026: verificable, descargable y con toda la colección de la persona debajo.

Cambió el formato, el identificador y la forma de generarlo. No cambió ningún link ya publicado.

Certificado de Diego Barrionuevo de agosto de 2024, renderizado por el pipeline de 2023
2024, render del pipeline original
El mismo certificado en la página pública de certificados.donweb.com en 2026
2026, página pública
Primera versión

Mayo de 2023: un servicio, una persona.

Demo de la primera versión, 2023

La primera versión la construí solo, en mayo de 2023: Next 13 y Express, certificados compuestos con sharp y pdfkit, correos por Envialo Simple. Un único servicio que registraba, acreditaba y emitía.

Esa versión emitió los primeros certificados y definió lo que el sistema tenía que preservar: la URL pública como prueba y el mail como identidad. La renovación de 2026 heredó esas dos decisiones y reemplazó todo lo demás.

Plataforma

Cuatro servicios y un deploy de tres minutos.

La versión de 2026 son cuatro servicios: la API en Node 22 y Fastify con arquitectura hexagonal (dominio, aplicación, infraestructura), la web pública en Next 15, el panel de operación en Next 16 y la infraestructura con Docker Compose y Caddy, que resuelve TLS con un certificado wildcard. Directus se monta sobre la base MySQL heredada, así el equipo edita los datos históricos sin migrarlos a otro motor.

Cada cambio corre 2.180 casos de test en Vitest. Si pasan, GitHub Actions construye la imagen, la publica en GHCR y promueve el SHA inmutable a producción: unos tres minutos del merge a producción. Volver atrás es promover el SHA anterior.

2.180
casos de test en 128 archivos
~3 min
del merge a producción
4
servicios: api, web, panel, infra
Operación

Un panel para el equipo que dicta los talleres.

El panel de operación crea los talleres, programa las transmisiones en YouTube Live por la API de Google, sigue las inscripciones en tiempo real y dispara los correos de confirmación, recordatorio y certificado por Customer.io.

En un día de evento en vivo, los errores por hora bajaron de 5.718 a 8 después de la renovación. El equipo opera desde el panel; el soporte diario y la infraestructura siguen a mi cargo.

5.718 → 8
errores por hora en un evento en vivo
−99,86 %
de errores
Pantalla de ingreso al panel de operación de los talleres
Panel de operación
A julio de 2026
218cursos, talleres y webinars
138.109registros
123.253certificados emitidos

Más de 1.700 tests automatizados y migración sin downtime.

Cifras del panel de operación a julio de 2026.
Siguiente proyectoAda13 — Plataforma webLa plataforma web del Día del Programador 2023 en Buenos Aires: inscripciones, correos transaccionales y soporte durante el evento.