Inspiration
Choosing electives at SFU is often frustrating and time-consuming. Students spend hours navigating CourSys, department websites, and degree requirement pages, yet still struggle to find courses that match their interests, campus preferences, or WQB requirements. We were inspired to simplify this experience and build a tool that feels more like talking to an academic advisor than searching through filters.
What it does
PickMyElective allows SFU students to describe their goals in natural language, such as interests, year level, or requirements, and instantly receive a curated, explainable list of relevant SFU electives. Each recommendation includes clear reasoning, helping students confidently choose courses that align with both their interests and degree progress.
How we built it
We fetched official SFU course data using the CourSys API, cleaned and filtered the dataset, and transformed the courses into embeddings stored in a vector database. The platform leverages a dual-LLM architecture that combines the strengths of different AI models for optimal performance and cost efficiency. OpenAI's text-embedding-3-large model provides best-in-class semantic embeddings with 3,072 dimensions, ensuring highly accurate course matching. Google's Gemini 2.0 Flash handles query interpretation and match reasoning, offering fast and cost-effective text generation. Course data is stored in ChromaDB, a vector database optimized for semantic search, with rich metadata enabling complex filtering operations. The backend is built on Spring Boot with enterprise-grade security including JWT authentication and OTP-based email verification. The React 19 frontend with TypeScript provides a fast, accessible user interface. All course data is sourced directly from official SFU APIs, ensuring recommendations are always based on current course offerings.
Challenges we ran into
Timing - ran out of time to deploy the site
Accomplishments that we're proud of
We successfully built an end-to-end RAG system using real SFU course data, enabling meaningful and explainable course recommendations rather than simple keyword-based results. Through this process, we designed an intuitive, student-centered workflow that simplifies elective discovery and makes course planning more approachable. We also implemented user authentication and integrated Gemini’s API into a functional AI-driven application, bringing conversational intelligence and clear reasoning into the course selection experience.
What we learned
We learned how to collaborate effectively across different experience levels, with two complete beginners on our team gaining hands-on exposure to the full software development process and RAG systems.
What's next for PickMyCourses
Next, we plan to rerun our RAG data pipeline on previous semesters to build a larger, richer dataset by expanding coverage from Fall 2025 backward, and incorporate more historical course offerings into our vector database. We also want to add a favourites feature so students can save and revisit courses they’re interested in, fully deploy the application, and continue improving recommendation quality as the dataset grows.
Built With
- chromadb
- fastapi
- gemini-api
- jwt
- openai-api
- postgresql
- python
- react
- resend
- springboot
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.