Inspiration

SFU students often struggle to decide which courses actually matter. Planning usually means digging through multiple SFU sites or waiting weeks for an advisor appointment. Even then, advising tools focus on academic concentrations, not concrete career paths.

Meanwhile, job market demands change faster than curricula. Departments adapt, but slowly. Students need a way to take control and deliberately choose courses that align with where they want to end up, not just what fits a degree checklist.

What it does

SFU C2C helps students translate a career goal into a concrete course plan. Students upload their SFU advising transcript and select a target role. The system parses completed courses, removes them from consideration, and ranks the most relevant remaining SFU courses for that role.

It then builds a realistic semester-by-semester plan based on actual course offerings and supplements it with internship statistics synthesized from real student reviews, giving students both an academic and industry-informed roadmap.

How we built it

SFU C2C is a full-stack Next.js application built around structured data pipelines. SFU advising transcripts are parsed from PDFs using local extraction first, with OpenAI LLM calls used as a fallback to handle inconsistent transcript formats.

OpenAI’s LLM is also used to infer role-relevant skills and departments, rank courses by relevance to a target role, and synthesize internship insights from real review data. Course outlines and offerings are pulled from SFU APIs, filtered against completed courses, and assembled into a realistic semester-by-semester plan based on actual availability.

Challenges we ran into

One major challenge was dealing with inconsistencies in the SFU Courses API. We wanted to filter out courses that satisfy the same requirements, such as CMPT 120 and CMPT 130, but some courses had missing or empty metadata fields in the API. This made reliably identifying equivalency groups difficult and prevented us from fully automating that filtering.

Another challenge was SFU’s course offering structure. Course availability is only officially published a limited time in advance, which made building long-term roadmaps difficult. To address this, we analyzed historical offering patterns for recommended courses and used them to predict future availability beyond the current semester.

We chose to surface the requirement-equivalency limitation transparently rather than hide it, since inaccurate filtering would be worse than clearly communicating uncertainty.

Accomplishments that we're proud of

We successfully shipped and deployed a working MVP with a clearly defined data pipeline from transcript parsing to course planning. The team collaborated effectively using Git, avoided major merge conflicts, and maintained momentum through iterative development.

Equally important, we worked through design disagreements, aligned on technical decisions, and converged on a shared product vision without stalling progress.

What we learned

Real-world data is often inconsistent, incomplete, or poorly structured. Building reliable systems means designing around those gaps, not assuming clean inputs. We learned to work with the data we had and apply pragmatic fallbacks instead of chasing perfect schemas.

We also learned the importance of having difficult technical discussions early. Challenging assumptions, debating approaches, and converging on a refined solution was essential to making progress as a team.

Finally, we saw how AI tools can be used effectively as scaffolding. Used deliberately, they significantly reduce iteration time and help teams move faster under tight deadlines without replacing core engineering judgment.

What's next for SFU C2C

A key next step is integrating directly with goSFU so students no longer need to upload transcripts. Pulling data directly from institutional systems would reduce friction and avoid privacy risks associated with sending sensitive student data to external services. This could be further strengthened by aligning with SFU’s internal AI initiatives and running models locally to keep student data on-campus.

We also plan to make the system more scalable by introducing a structured course database populated from the SFU Courses API. This database would include skill keywords, prerequisites, corequisites, and equivalency groups. By narrowing and structuring inputs before making LLM calls, we can reduce ambiguity, improve accuracy, and limit the model’s room for error.

Built With

+ 18 more
Share this project:

Updates