Inspiration
Every year, hundreds of UW–Madison students study abroad, and almost every one of them runs into the same problem: will this course actually transfer? They have to manually file through all partner programs' course catalogs and run it by advisors. Right now, that question gets answered through a Course Equivalent Request, a manual process where an advisor compares syllabi by hand and gives you an answer weeks later. Sometimes students don't find out a course doesn't count until they're already back on campus. We wanted to take that uncertainty out of the equation and give students (and advisors) a real answer before the semester even starts.
What it does
Credo compares a UW-Madison course against a course from a partner university abroad and generates a detailed equivalency report in seconds. You pick both courses, and Credo breaks down exactly which topics are covered, partially covered, or missing, along with supporting evidence pulled from the actual course content, a match percentage, and a written justification an advisor could use directly in a CER decision.
How we built it
We split the build four ways: one person on the frontend (course selectors, comparison UI, result cards), one on the AI matching logic that generates the topic-by-topic breakdown, one on course data and equivalency mapping, and one on the API layer connecting everything together. The frontend is built in Next.js with a component-based UI, selectors, loading and error states, and a results view that renders coverage pills, caveats, and the advisor justification. Course comparisons run through an API route that calls out to an LLM to analyze syllabus content and return structured match data, which we cache so repeat lookups are instant.
Challenges we ran into
Working across four people on the same codebase in parallel meant we hit real integration friction, merge conflicts in shared files, mismatched data shapes between what one person's function returned and what another's component expected, and a fair amount of "wait, why is this breaking on your machine and not mine." We leaned on mock data early so no one was blocked waiting on someone else's piece to finish, then swapped in real implementations as they landed. Getting the merge history clean by the end took more patience than we expected.
Accomplishments that we're proud of
We're proud that we shipped a working end-to-end flow, pick two courses, get a real, evidence-backed comparison, in the time we had. The topic-level breakdown, not just a single match score, is the part we think actually makes this useful to an advisor rather than just a novelty. And despite a genuinely messy merge process at one point, we kept moving and didn't lose any work.
What we learned
Coordinating shared interfaces early, agreeing on what a function returns before everyone starts building against it, saves way more time than it costs. We also learned a lot about handling merge conflicts under time pressure without panicking, and about how much a good mock/fixture layer lets a team build in parallel without blocking on each other.
What's next for Credo
Next, we want to expand course coverage beyond a handful of manually paired examples to a searchable catalog across all of UW's partner institutions, connect directly to MyStudyAbroad so a generated report can be submitted as an actual CER, and let advisors give feedback on match accuracy so the system improves over time.
Built With
- claude
- git
- github
- json
- next.js
- react
- react-pdf
- shadcn-ui
- tailwindcss
- typescript
- vscode
Log in or sign up for Devpost to join the conversation.