\section{Inspiration} \subsection{What Inspired You?} As a University of Waterloo Engineering student, I experienced firsthand the overwhelming challenge of choosing electives from hundreds of available courses across 11 different engineering programs. The process was frustrating---scattered information across multiple platforms, complex prerequisite chains, and no personalized guidance to align course choices with career goals. I realized that many students were making suboptimal decisions simply due to lack of accessible, personalized information.
This inspired me to build an AI-powered solution that would democratize access to course information and provide personalized recommendations, making the elective selection process as intuitive as having a conversation with an academic advisor.
\subsection{What You Learned} \textbf{Technical Skills} \begin{itemize} \item \textbf{Full-Stack Development:} Built a complete Next.js 15 application with TypeScript, React 18, and Tailwind CSS \item \textbf{AI/ML Integration:} Implemented OpenAI GPT-4o-mini with LangChain for conversational AI and \texttt{text-embedding-3-large} for semantic search \item \textbf{Vector Databases:} Mastered pgvector for semantic search across 284+ course descriptions \item \textbf{RAG Implementation:} Built a Retrieval Augmented Generation system for context-aware AI responses \item \textbf{Database Design:} Created a comprehensive PostgreSQL schema with JSONB columns and vector embeddings \item \textbf{Data Engineering:} Developed automated web scraping and data processing pipelines using Python, BeautifulSoup, and Pandas \end{itemize}
\textbf{Problem-Solving Skills} \begin{itemize} \item \textbf{Memory Optimization:} Solved critical memory leaks in production by implementing efficient data processing and limiting recursive calls \item \textbf{Search Algorithm Design:} Created multi-layered fallback systems for course recommendations with department-specific filtering \item \textbf{User Experience:} Designed an intuitive chat interface that simplifies complex academic decision-making \item \textbf{Performance Tuning:} Achieved sub-second response times through database indexing and query optimization \end{itemize}
\section{How I Built It} \subsection{Phase 1: Data Collection & Processing} Built a comprehensive data pipeline to collect course information from University of Waterloo's engineering programs. Using Python with BeautifulSoup and Trafilatura, I scraped course data including prerequisites, skills, workload estimates, and CSE classifications. This resulted in a database of 284+ courses across all 11 engineering programs.
\subsection{Phase 2: AI-Powered Backend} Implemented a backend using Supabase (PostgreSQL) with pgvector for semantic search. The system uses OpenAI's \texttt{text-embedding-3-large} to create vector embeddings for each course description. Integrated LangChain for conversation memory and context management.
\subsection{Phase 3: Intelligent Frontend} Built a modern Next.js 15 application with a chat-based interface that feels like talking to an academic advisor. Features include: \begin{itemize} \item Real-time chat with AI-powered recommendations \item Comprehensive course search with multi-criteria filtering \item User profile management with academic program tracking \item Responsive design with dark mode support \end{itemize}
\subsection{Phase 4: Advanced Features} \begin{itemize} \item \textbf{Vector Search:} Semantic search through course descriptions using pgvector \item \textbf{RAG System:} Retrieval Augmented Generation for context-aware responses \item \textbf{Program-Specific Filtering:} Smart recommendations based on user's engineering discipline \item \textbf{Multi-Layer Fallbacks:} Ensures recommendations always populate with intelligent fallback systems \end{itemize}
\section{Challenges I Ran Into} \begin{enumerate} \item \textbf{Memory Leak Crisis} \ \textit{Challenge:} Application was hitting Vercel's 2048 MB memory limit. \ \textit{Solution:} Simplified recursive calls, limited course processing, optimized queries, and reduced API calls.
\item \textbf{Complex Search Logic} \\
\textit{Challenge:} Users were receiving irrelevant recommendations. \\
\textit{Solution:} Implemented department-specific filtering, CSE classification logic, and exclusion lists.
\item \textbf{Data Consistency} \\
\textit{Challenge:} Multiple data sources with inconsistent formats. \\
\textit{Solution:} Automated Python scripts for cleaning, validation, and embedding generation.
\item \textbf{User Experience Optimization} \\
\textit{Challenge:} Presenting complex data in a simple interface. \\
\textit{Solution:} Designed conversational interface with progressive disclosure and context retention.
\end{enumerate}
\section{Accomplishments That I'm Proud Of} \begin{itemize} \item Delivered an AI-powered chatbot that simplifies course selection for Waterloo Engineering students \item Achieved sub-second semantic search performance across 284+ courses \item Solved production memory issues under strict Vercel limits \item Built a scalable and program-aware recommendation system \end{itemize}
\section{What I Learned} \begin{itemize} \item Mastery in modern full-stack web development (Next.js 15, React 18, Supabase) \item Practical AI/ML integration with LangChain, OpenAI embeddings, and RAG \item Advanced database design with pgvector and JSONB \item Performance tuning and debugging at production scale \end{itemize}
\section{What's Next for Coursely Elective Advisor Chatbot} \begin{itemize} \item Integration with UW Flow API for real-time course reviews \item Machine learning algorithms based on user behavior patterns \item Course scheduling and conflict detection \item Mobile app development with React Native \item Advanced analytics for recommendation improvement \end{itemize}
\section{Impact & Results} The application successfully addresses the core problem of elective selection complexity by: \begin{itemize} \item \textbf{Simplifying Decision-Making:} Converting complex course selection into conversational interactions \item \textbf{Improving Accuracy:} Providing context-aware recommendations with proper prerequisites \item \textbf{Saving Time:} Reducing research time from hours to minutes \item \textbf{Enhancing Accessibility:} Making course information accessible to all students regardless of technical background \end{itemize}

Log in or sign up for Devpost to join the conversation.