π Graphical Time Planner β UWaterloo Course Scheduler #
By InsertNameHere: Wahab Khan, Jialun Li, Donghao Zhao, Julian Kwan, Daniel Yim, Wong Cheuk Him Ariel
The Problem We Solved #
Every UWaterloo student knows the dread of course selection season: juggling prerequisites, time conflicts, graduation requirements, and QUEST’s clunky interface β all at once. Existing tools are either too rigid or too manual.
Graphical Time Planner is a full-stack Android app that replaces that chaos with one intelligent, visual, AI-powered system β built from scratch over 12 weeks.
β¨ Key Features #
π Visual Timetable #
An interactive, color-coded weekly grid that shows your schedule at a glance. The app supports multiple named timetables per term so you can compare options side by side. Automatic conflict detection warns you the moment two courses overlap. When you’re happy with your schedule, export it as a PNG image to share with friends or advisors.
π€ AI-Powered Schedule Generator #
Build a wishlist of courses you want to take, then let the generator do the work. A genetic algorithm explores the space of valid schedule permutations and surfaces the best ones based on your personal preferences:
- βοΈ Avoid early morning classes
- β±οΈ Minimize gaps between lectures
- π Cluster classes onto fewer days
- π Cap maximum daily hours
Pin preferred sections, tweak the weights, and export your favorite result directly into your timetable β no copy-pasting.
π§ AI Academic Advisor Chatbot #
This is where the app goes well beyond a scheduler. The LLM-powered chatbot has direct tool access to your data and can:
- π¬ Answer questions about courses, prerequisites, and graduation requirements
- π Parse your uploaded transcript PDF to understand your academic history
- π Pull real student reviews from UW Flow
- π οΈ Directly create, modify, and clear your timetable β no manual steps needed
- π§ Draft contextual emails to your academic advisor, with your schedule attached
Responses stream in real time. Chat sessions are saved with full history β create, rename, and revisit sessions at any time.
π Push Notifications #
The app monitors the UWaterloo course database every 6 hours and sends Firebase Cloud Messaging alerts if any of your enrolled courses change β time, location, section cancellation, or new section added. On logout, all topic subscriptions are automatically cleared so notifications never leak to the next user on the device.
π Advisor Finder #
Look up academic advisors by program and year level. Select an advisor and the AI generates a personalized email draft on your behalf β optionally including your current timetable for context.
π¬ App Demo & User Scenarios #
Three short videos walk through the app’s major features. Each can be watched independently.
πΉ Video 1 β Course Search & Preference-Based Schedule Generation #
π½οΈ Watch Video 1 β
Meet Alex, a 2B Software Engineering student building their Winter 2026 timetable. They have a few required courses locked in and a wishlist of electives β but no idea how to fit everything without early mornings or a fragmented week.
Step 1 β Search and add courses manually
Alex opens the Course screen, selects the Winter 2026 term, and searches for ECE 222. They browse the available sections, pick one, and tap Add. The app instantly checks for conflicts β when Alex accidentally picks an overlapping section for MATH 213, a warning appears immediately. They swap to a compatible section and the grid updates.
Step 2 β Build a wishlist for electives
Alex heads to the Assistant tab and adds ECON 101 and PSYCH 207 to their wishlist. They pin a preferred lecture section for one course but leave the other open for the generator to decide.
Step 3 β Set preferences and generate
Alex configures their preferences: no classes before 9 AM, minimize gaps between lectures, cluster everything onto four days, and cap at 6 hours per day. They hit Generate β the genetic algorithm runs and surfaces a ranked list of conflict-free timetable permutations. Alex browses the top results, picks their favourite, and exports it directly to their timetable with one tap.
πΉ Video 2 β Push Notifications & Advisor Email Generation #
π½οΈ Watch Video 2 β
Two weeks into the term, the app keeps Alex informed without any effort on their part.
Push Notifications
The app polls the UWaterloo course database every 6 hours. When ECE 222 LEC 001 moves to a new room, Alex receives a Firebase Cloud Messaging notification immediately β no need to check QUEST. The notification includes the course, what changed, and the new details.
Finding an Advisor and Drafting an Email
Alex wants to request a course substitution but isn’t sure how to phrase it. They open the Advisor Finder, select Engineering and their year level, and the app surfaces their academic advisor with contact details. Alex taps “Generate Email” β the AI drafts a professional, contextual email explaining the substitution request. Alex reviews the draft, makes a small edit, and copies it straight to their mail app.
πΉ Video 3 β AI Academic Advisor Chatbot #
π½οΈ Watch Video 3 β
Alex has bigger questions that need more than a search box.
Step 1 β Upload transcript and check prerequisites
Alex uploads their transcript PDF directly in the chat. They ask: “Have I completed the prerequisites for CS 341?” The agent reads the transcript, queries the course database for the full prerequisite chain, and replies with a clear breakdown β CS 240 and MATH 239 are both satisfied.
Step 2 β Get course recommendations
Alex asks: “What are some good technical electives for a 3A SE student that aren’t too heavy? Check UW Flow reviews.” The agent searches UW Flow, weighs ratings and review sentiment, and comes back with three recommendations with reasoning.
Step 3 β Let the AI modify the timetable directly
Convinced by the recommendation, Alex says: “Add ECE 358 LEC 001 to my timetable.” The agent calls its add_course tool server-side, writes directly to Firebase, and confirms: “Done β ECE 358 LEC 001 has been added. No conflicts detected.” Alex switches to the Home screen and sees it already there β no manual steps, no copy-pasting.
ποΈ Architecture #
The app uses two architectural styles working in concert:
Client-Server β The Android client handles all UI and direct Firestore CRUD. An AI chat interaction goes: Android β Flask backend (Python, port 5000) β LLM with tool access β Firestore write β streamed JSON events back to Android. All timetable mutations from the AI are executed server-side with the Firebase UID injected by the backend, so clients can never spoof write operations.
MVVM β Inside the Android app, AppState and ChatStateManager act as reactive ViewModels using Compose’s mutableStateOf. Screens observe state and recompose automatically β when the AI chatbot adds a course via a server tool, the timetable view updates instantly with no coordination code needed. CourseRepository and ChatRepository encapsulate all Firestore logic behind a clean Facade, so no screen ever touches a Firestore collection path directly.
Android App (Kotlin + Jetpack Compose + MVVM)
β
βββ Firebase Firestore ββ 61 UWaterloo subjects, user timetables, profiles, chat
βββ Firebase Auth ββ Email/password authentication
βββ Firebase FCM ββ Push notifications for course changes
β
βββ Flask Backend (Python)
βββ LLM Agent (SiliconFlow API)
βββ Tools: query courses Β· read transcript Β· add/remove courses
browse UW Flow Β· web search (SerpAPI) Β· draft emails
π By the Numbers #
| Metric | Value |
|---|---|
| UWaterloo subjects supported | 61 |
| Functional requirements implemented | 20 |
| AI chatbot tools | 8+ (query, add, delete, clear timetable, browse, search, email, transcript) |
| Architectural patterns | 2 (Client-Server + MVVM) |
| Design patterns | 2 (Facade + Observer) |
| Development timeline | 12 weeks |
π‘ Why Vote For Us? #
Most schedulers stop at showing you a timetable. Ours goes three steps further:
- It generates β a genetic algorithm finds optimal, conflict-free schedules from your wishlist with configurable preference weights, not just brute force
- It talks β an LLM chatbot understands your transcript, your goals, and your graduation requirements in natural language
- It acts β the AI agent modifies your actual timetable through server-side tools mid-conversation, with no manual steps from you
Every layer was built from scratch: the UWaterloo course scraper, the Firestore schema, the Jetpack Compose UI, the genetic algorithm, and the agentic Python backend with streaming tool-call responses.
Built with β and determination by Team InsertNameHere β CS 446 / ECE 452, Winter 2026