← Back to project summary Schedule Me
A closer look at the app, the systems I owned, and the features behind it.
What the app does
- Loads a real course database and lets students search it by course, professor, time, and day, with fuzzy matching so near-miss queries still work.
- Builds a schedule by dragging courses onto a calendar view, with conflict detection between time slots.
- Saves named schedules per user, with login, profiles, and a schedule management page.
- Answers academic questions through a chat advisor that reads the actual bulletin rather than making things up.
What I built
- Worked across all three services: the Java core and its Javalin controllers, the React frontend, and the Python advisor.
- Built the LLM integration end to end, including the backend controller that fronts it and the chat interface that consumes it.
- Implemented fuzzy search and the drag-and-drop schedule builder.
- Built the schedule management page and a round of quality-of-life work on the interface.
The AI advisor, specifically
- Processes the college bulletin and computer science degree sheets into chunks, embeds them with text-embedding-3-small, and stores them in a local FAISS index.
- Serves a RetrievalQA chain over that index with GPT-4o-mini behind it.
- The prompt is written to keep the model honest: it uses the student's schedule only when the question is actually about their schedule, answers course questions from retrieved documents alone, and is told to say it could not find something rather than invent it.
- A plain greeting gets a plain greeting back, instead of an unprompted schedule summary.
Engineering notes
- The Java core is covered by JUnit 5 tests for search, time-slot conflicts, schedules, courses, and users.
- Gson handles serialization, with a custom event deserializer for the polymorphic calendar events.
- A separate Ruby on Rails service handles shareable schedule links. It is listed on this site as its own project.