← proyectosAgendaU
// proyecto — AgendaU

AgendaU

Porque nadie debería armar su horario del semestre a mano.

AgendaU — captura
01// historia

Mil horarios en segundo semestre

Mi primera inscripción de materias fue en segundo semestre, cuando todavía había muchísimas opciones. Me acuerdo de sentarme a pensar que, para no sentir que se me escapaba la combinación correcta, iba a tener que armar a mano cientos de horarios. Y encima: ¿cómo mezclar profesores?, ¿cómo tener todo en un solo lugar?

02// historia

Un script de Python en una tarde

La primera versión salió del empujón de mi novia de ese entonces. Quería hacerle la vida más fácil a alguien más, y con lo que sabía de Python escribí un script que leía las opciones desde una hoja de cálculo y generaba todas las combinaciones posibles en otra. Hasta coloreaba las celdas que compartían materia. Todo en una tarde, y la verdad funcionaba increíble.

03// decision

Mi papá dijo Java

Un semestre después quise convertirlo en un sitio web. No tenía mucha experiencia, así que le pregunté a mi papá cómo se hacía una página. Me dijo que necesitaba un lenguaje más robusto que Python y me recomendó Java. Le creí sin hacer muchas preguntas.

Seis meses después de la primera versión tenía todo el prototipo reescrito en Java. Intenté mezclarlo con otras cosas, pero al final quedó 100% Java. Nunca logré ponerlo en producción.

04// resultado

20 personas y un servidor que no podía pagar

Seis meses más tarde volví a intentarlo, esta vez sabiendo qué era una API y qué era una aplicación web. Hice una interfaz sencilla en React y el backend en Spring Boot, que era lo que menos migración pedía viniendo de Java. La API corría en Heroku y el frontend en Vercel.

Fue el semestre en que más avancé, y creo que se alinearon dos cosas: por fin tenía un servidor atendiendo usuarios reales, y todavía estaba en un semestre con muchas materias para elegir. A medida que avanzas en la carrera las opciones se reducen y la herramienta pierde valor. Ayudé a unas 20 personas. No es un número enorme, pero ver que lo usaban me hizo muy feliz. Lo malo: gasté 10 dólares o más en un solo mes de servidor y base de datos, con plata que no tenía.

05// decision

Migrar a FastAPI

Otros seis meses después, con el auge de los agentes de IA, migrar fue muchísimo más fácil. Pasé el backend a FastAPI y el frontend a Next.js. Siento que se perdió parte del esfuerzo que le metí a la versión anterior, pero esta es más rápida, más eficiente, se despliega completa en Vercel y encuentra mejores opciones de horario.

06// arquitectura

Detección de conflictos en O(1) con NumPy

En lugar de iterar con bucles anidados sobre cada intervalo de tiempo, modelé la semana académica como una matriz binaria de 12 franjas horarias × 6 días. La superposición de horarios se evalúa mediante una operación bitwise AND en NumPy, reduciendo la comprobación de cruces a O(1) por par de materias y filtrando miles de combinaciones inviables en milisegundos.

O(1) matricial
detección
12 horas × 6 días
grilla
FastAPI + Next.js
arquitectura
Grilla de combinaciones de horarios

↳ Visualización de combinaciones válidas sin cruces generadas por el motor.

07// decision

Grilla visual y exportación

El frontend permite navegar entre las alternativas generadas, marcar preferencias y exportar el resultado con un clic a formato Excel para tenerlo listo al momento de la inscripción.

Gestión de materias y secciones

↳ Panel de carga de asignaturas, grupos y restricciones horarias.

08// aprendizaje

La versión que ya no tengo

Si soy honesto, la versión que más recuerdo es la primera, y no la tengo: entre cambios de computador se perdió. Aun así la cuento entre mis mejores proyectos. Era un script de una tarde y yo apenas estaba en segundo semestre.

Construido con:Next.js, FastAPI, Python, NumPy, MySQL y Docker Compose.
siguiente proyecto
CoworkSpot→

Porque nadie debería elegir un coworking a ciegas ni trabajar rodeado de gente sin saberlo.