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.
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.
- 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 logroDominá Search Console para impulsar el SEO de tu sitio web en WordPress

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.
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
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.


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.
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
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

Más de 1.700 tests automatizados y migración sin downtime.
Cifras del panel de operación a julio de 2026.







