← Back to selected work

Sierra Class Helper

A Discord course-finding assistant adopted by 40+ Sierra College students, searching approximately 2,000 course records with Python, FastAPI, and hybrid retrieval.

students adopted the bot
40+
course records searched
~2,000
course data refresh
Hourly
PythonFastAPIOpenAIFAISSDiscord

Why I built it

Finding classes meant juggling Sierra’s course search, instructor reviews, and a personal schedule. A registration-system update made that process more frustrating, so I built a Discord bot that lets students explore courses and ask follow-up questions in conversation.

Using the bot

Students can find course and instructor information through the bot, then check it against their own schedule and enroll on Sierra’s website.

What I learned

Building it also gave me hands-on experience with retrieval-augmented generation: finding relevant course information and using it to inform an AI-generated answer.

One thing I hadn’t anticipated was how much students appreciated asking questions in languages other than English. Making course information easier to access meant more than improving search.

The decisions behind it.

Search that understands both meaning and specifics.

FAISS vector search is combined with an IDF-weighted lexical channel. Semantic search finds related ideas; lexical search preserves distinctive words such as ‘linear’ in ‘linear algebra’.

Fresh data without interrupting a conversation.

A Playwright scraper refreshes course data hourly. The scheduler builds a new search index and atomically swaps its reference, so in-flight requests continue using a consistent snapshot.

One backend, separate client permissions.

The Discord bot uses authenticated bot-only routes. The web demo uses a separate endpoint that verifies a Google ID token before running the same retrieval and answer-generation pipeline. The website never receives the bot’s credentials.

Regression tests for real search failures.

The repository tests specific failure cases, including course-number matching and distinguishing linear algebra from college algebra. Each fix has an example that would catch the same problem again.

Rate limits and usage analytics.

The demo reserves one of three lifetime attempts per Google account in SQLite before retrieval or generation, with a separate daily cap. Discord usage analytics remain separate. Message size, conversation history, retrieved context, and generated output are bounded.

Instructor reviews alongside course information.

The bot combines course details with Rate My Professors information, reducing the need to move between separate sites. Students still check their personal schedule and enroll through Sierra.

Tests you can inspect

The search fixtures check specific retrieval failures. They are not a measurement of accuracy across the full course catalog or of the AI’s final answers. A broader hybrid-versus-vector-only benchmark has not been published.

Google sign-in and persistent demo quotas

Security tests use locally signed tokens and the real Google verifier with substituted certificate responses. They cover invalid tokens and verify that persistent quota admission happens before paid work, without real accounts or model calls.

Inspect source : Google sign-in and persistent demo quotas

Linear algebra vs. college algebra

A lexical-search fixture requires ‘linear algebra’ to rank Diff Equations/Linear Alg first. A separate fusion fixture checks that a strong keyword match can outrank the vector list’s first candidate.

Inspect source : Linear algebra vs. college algebra

What’s next

The website connects to the API through a Google-authenticated demo with three lifetime attempts per account. A broader retrieval-quality benchmark is next, to measure how often search returns the right courses.