Todos los posts
Next.jsSupabaseSide ProjectOpen SourceAI Workflows

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.

9 de septiembre de 20263 min de lectura

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.

YouTubeUdemycientos de cursos, sin filtrarverificaciónmanual¿gratis de verdad?status: pending005.032GRATISCurso completo de SQLJovianverificado 2026-09-08cursos.unaividal.comsin cuentas · sin pagos · fecha de verificación en cada ficha
YouTube + Udemy → verificación manual → catálogo público, siempre 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:

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.