Inspiration
We built UW CourseMatch out of our own frustrations with planning classes at UW. Every quarter, we found ourselves juggling DARS, Time Schedule tabs, spreadsheets, and half-finished Google Docs just to figure out what we needed to take. We wanted something that felt intuitive, visual, and personalized — a tool that reduces stress instead of adding to it.
What it does
UW CourseMatch takes a student’s transcript and preferences to generate personalized class recommendations, fun summaries, requirement progress, and a clean weekly schedule. It identifies remaining Gen Ed requirements, suggests courses that match the student’s learning style, and automatically detects schedule conflicts. The result is a guided, interactive course-planning experience that is much easier than navigating UW systems manually.
How I built it
The backend is a Flask application that handles transcript uploads, extracts text, and uses a Claude API to parse courses, infer requirement progress, and generate tailored recommendations. The frontend includes a multi-step flow for gathering preferences, processing transcripts, selecting classes, and finalizing the schedule. After step six, the user is taken to a UW-themed dashboard that displays personalized data, requirement progress bars, recommended classes, and a generated weekly timetable.
Challenges I ran into
Getting the LLM to return perfectly structured JSON was harder than expected. Often, we had to refine prompts and clean its output to avoid formatting issues. Parsing real transcripts also came with unpredictable formatting quirks. Coordinating state across multiple frontend screens and Flask sessions required careful design. Finally, building accurate schedule logic with AM/PM handling and conflict detection involved lots of edge-case debugging.
Accomplishments that I'm proud of
We’re proud that the project works end-to-end: starting from raw transcripts and personal preferences, all the way to a polished dashboard and customizable schedule. The UW-themed UI, smooth animations, and conflict warnings give the tool a professional feel. We’re also proud that we used LLMs for real structured tasks rather than just a chatbox.
What I learned
We learned how to structure prompts for consistent JSON, how to architect a multi-step app using Flask sessions, and how to blend AI with practical scheduling logic. This project also reinforced the importance of clean UI design and thinking about real student needs, not just technical features.
What's next for UW CourseMatch
Next steps include integrating real UW Time Schedule and DARS data, expanding requirement logic, improving preference modeling, and making the dashboard more interactive. We also plan to add mobile support, exporting features, and smarter advising tools so students can explore alternatives, ask questions, and build multiple schedule scenarios.
Log in or sign up for Devpost to join the conversation.