What inspired us

Course registration at BYU can be an annoying mess: sections, overlapping meetings, professor quality, credit load, and degree rules live in different systems. We kept thinking, “There should be one place where I can see my week, my requirements, and ask something intelligent about tradeoffs.” One of our team members is a transfer student from Georgia Tech where the registration and planning process was much simpler; we wanted that experience for BYU, with real BYU catalog data and an AI layer that actually respects what’s offered this term, not generic advice from a model that’s never seen the schedule.

What we learned

  • Retrieval-augmented generation is very powerful. Without embeddings over the live catalog, an LLM will invent courses or sections. We learned to treat the model as a reasoning layer on top of a search layer (Voyage embeddings + cosine similarity), not as the source of truth.

How we built it

Layer What we used
Data Python scrapers for BYU’s schedule and RateMyProfessors; a merge step produces JSON the API loads at startup.
Backend Go: REST API for courses, terms, professors; POST /api/chat streams SSE; RAG builds context from a precomputed embedding index per term.
AI Voyage AI for document/query embeddings; Cerebras (Llama 3.3 70B) for the advisor, with a system prompt plus retrieved course context.
Frontend React + Vite + TypeScript pieces: weekly grid, search, constraints, workload estimate, major tracker with PDF upload, chat panel that applies parsed actions to schedule state. Appifex used to create the basic frontend UI and coder mode was used to edit and fine tune the design.

We glued it together to function efficiently: scrape data → merge → embed → serve to LLM → chat with retrieval.

Challenges we faced

  1. Embedding scale and rate limits — Thousands of sections mean many embedding calls; we had to batch and throttle requests, and cap token budgets so reindexing stays reliable.
  2. Prompt Engineering — We had to edit and tweak the prompts we gave the LLM in order to produce consistent, reliable results using the context we provided.
  3. Degree Progress Tracking — We had to be really creative when trying to icnrese the usefulness of this project with degree progress tracking. We needed to figure out a way to import this data without having to make a call to BYU. We settled on parsing a pdf provided by the user.

Built With

Share this project:

Updates