Summer 2026 · Vanderbilt University
FEST (Faculty Evaluation System) is a desktop application built with Python and Tkinter that manages student academic records, visualizations, and campus resources. Originally developed as a monolithic script, the codebase has been refactored into a modular, object-oriented architecture with theme support, new features, and improved maintainability.
Before: Single main.py file (~1,500 lines) containing all functionality (UI, data management, authentication, and visualizations) & global variables.
We created eight distinct modules, each with a single responsibility:
- [PLACEHOLDER: TABLE EXPLAINING DIFF MODULES]
Reasoning: Separation of concerns allows independent development, testing, and debugging. Sofiya was also getting dizzy reading through the giant main.py file
Before: Hardcoded colors throughout the application with no way to switch themes.
After: ThemeManager class provides two palettes (dark and light) with a single toggle that refreshes the entire UI.
- Dark Mode: Deep charcoal background (#1A1A1A) with warm gold accents [PLACEHOLDER: SCREENSHOT DARK MODE]
- Light Mode: Cream/ivory background (#F5F0E8) with rich brown tones [PLACEHOLDER: SCREENSHOT LIGHT MODE]
Reasoning: Users can choose their preferred visual style. All (ideally) UI components now fetch colors dynamically via self.theme.get_color(), ensuring consistency.
Displays students with an average GPA of 3.5 or higher across all recorded coursework. Honors are presented with medal icons (🥇🥈🥉) for the top three performers. [PLACEHOLDER: SCREENSHOT DEAN's LIST] [PLACEHOLDER: SCREENSHOT CODE SNIPPET IN OPERATIONS.PY AND DATA.PY]
Comprehensive analytics including:
- Overview metrics (total students, courses, avg/max/min GPA)
- Grade distribution (A-F)
- Top 5 students with GPA rankings
- Major distribution summary
- [PLACEHOLDER: SCREENSHOT STATISTICS DASHBOARD]
- [PLACEHOLDER: SCREENSHOT CODE SNIPPET IN OPERATIONS.PY AND DATA.PY]
Manages campus clubs and organizations with:
- Searchable table of clubs
- Member counts and average GPAs
- Statistics card overview
- (Currently static data; future update for dynamic management)
- [PLACEHOLDER: SCREENSHOT STUDENT ORGS]
Student ID cards now display organization affiliations based on the student's major:
-
[PLACEHOLDER: SCREENSHOT TABLE CORRESPONDING MAJOR AND ORG]
-
[PLACEHOLDER: SCREENSHOT STUDENT ID CARD WITH STUDENT ORG HIGHLIGHTED]
-
(Currently static data; future update for dynamic management)
Reasoning: shows a student's campus involvement, giving a more complete student profile.
Find tutoring sessions by major:
- Dropdown selection of available majors
- Displays session details (days, times, subjects, locations)
- Styled with the application's theme system
- [PLACEHOLDER: SCREENSHOT TUTORING FINDER]
- Multiple team members contributed features independently using the original monolithic file structure.
- Committing directly into main (bad practice)
- Limited time prevented full refactoring of every feature to fully integrate into new architecture
- The final integration sprint was compressed, resulting in some features (e.g., Add/Edit/Delete in Student Organizations) being implemented as "Coming Soon" placeholders.
- Not all UI elements were fully migrated to use the ThemeManager for all colors, causing occasional style inconsistencies.
Currently, only the main menu supports scrolling. Every popup (e.g., Statistics Dashboard, Student Organizations) should be wrapped in a scrollable canvas to handle content that exceeds the window height.
- ThemeManager: Ensure every widget uses
self.theme.get_color()instead of hardcoded colors. - DataManager: Move static data (club lists, tutoring data, dean's list thresholds) from methods into the
DataManagerfor easier updates and persistence.
- Student Organizations: Add, Edit, Delete functionality
- Student Clubs: Dynamic membership tracking and enrollment
- Export Reports: PDF/CSV export for statistics and Dean's List
Implement unit tests for each manager class to ensure reliability as the codebase grows.
- [PLACEHOLDER: SCREENSHOT OF REPOSITORY STRUCTURE]
- Python 3.10+
matplotlib,seaborn,pandas,numpy- Tkinter