Cansado de buscar cursos gratis de verdad. Construí un catálogo.
YouTube y Udemy están llenos de cursos 'gratis' que en realidad tienen cupón con caducidad, o son la primera clase de un curso de pago. Construí cursos.unaividal.com: un catálogo que verifica cada curso a mano antes de listarlo.
Cada vez que buscás "curso gratis de X" te encontrás el mismo problema: la mitad de los resultados de Udemy son gratis con cupón, que caduca en días. La otra mitad son la primera clase de un curso de pago disfrazada de "gratis". Y en YouTube, encontrar un curso completo de verdad entre miles de vídeos sueltos es buscar aguja en pajar.
Construí cursos.unaividal.com: un catálogo de cursos gratuitos de YouTube y Udemy, verificados a mano, con la fecha exacta en que comprobé que cada uno seguía siendo gratis.
El problema
No hace falta que un curso sea malo para que no sirva — basta con que ya no sea gratis quince minutos después de encontrarlo. El diferencial no iba a ser "más cursos". Iba a ser confianza: que cuando algo dice "gratis" en este catálogo, lo sea de verdad, hoy.
Eso significa un compromiso incómodo pero honesto: nada se publica solo. Cada curso de Udemy lo reviso a mano — sin cupón, sin caducidad. Los de YouTube se sincronizan automáticamente desde canales curados, pero también entran como pendientes, no publicados, hasta que alguien los revisa.
La decisión
Next.js 16 + Postgres (Supabase) + un panel de admin propio. Nada de un CMS genérico — el catálogo necesitaba modelar algo muy específico: estado de publicación, plataforma, fecha de verificación, categoría con su propia taxonomía. Cada ficha lleva un número de catálogo al estilo biblioteca (005.032) y un sello que dice cuándo se comprobó por última vez — la fecha coloreada según cuán reciente es, para que "verificado" no se vuelva una etiqueta decorativa que nadie mira.
Corre entero en una Raspberry Pi propia, detrás de un túnel de Cloudflare. Sin servidor en la nube, sin factura mensual — el mismo criterio de "sin gastos que no se justifiquen" que aplico al resto de mis side projects.
Descubrimiento sin perder el control
La parte que más me gustó resolver: cómo encontrar cursos nuevos sin convertir el catálogo en spam. La respuesta fue un cron semanal con dos mecanismos:
- Canales curados (freeCodeCamp, CS50, midudev, MoureDev, Gentleman Programming...) — sincroniza lo nuevo de cada uno.
- Búsqueda dirigida fuera de esos canales, para que un canal que no está en la lista todavía pueda aparecer igual.
Los dos escriben como pending, nunca como publicado. Cada semana me llega un email con lo que encontró — reviso, publico lo que vale, descarto el resto. El catálogo crece, pero nada entra sin que alguien lo mire antes.
El proceso con IA
Construí esto con Claude Code como par de trabajo real, no como autocompletado glorificado. La arquitectura — filtros por URL sin JavaScript, acciones en lote en el panel de admin, el propio sistema de descubrimiento — se decidió y discutió, no se generó a ciegas. Cuando encontré un bug real en producción (un ID de vídeo con guión bajo rompía la validación del slug), lo diagnostiqué, lo entendí, y lo arreglé con tests de regresión — no lo parcheé y seguí para adelante.
Es la misma filosofía que uso en todos mis proyectos con IA integrada: la herramienta acelera, pero las decisiones y la responsabilidad del código siguen siendo mías.
El repo
github.com/unaivv/cursos-gratis
Abierto, con su propio README explicando cómo está montado — desde el sync automático hasta el despliegue en Raspberry Pi.
Si buscás cursos gratis y estás cansado de que "gratis" sea mentira, cursos.unaividal.com está para eso. Y si conocés un curso que merece estar ahí, hay un formulario para sugerirlo.