A web application that helps university students automatically generate optimal course routines for the upcoming semester. Students can upload their university's course offering PDF and receive personalized routine suggestions based on their preferences.
- PDF Upload & Parsing: Upload university course offering PDFs and automatically extract course data
- Course Selection: Choose which courses to include in your routine
- Preference Setting: Set preferred faculty and earliest class start time
- Routine Generation: Generate all possible valid routines without time conflicts
- Smart Ranking: Routines are ranked by how well they match your preferences
- Warning System: Each routine shows warnings for any mismatches with your preferences
- Upload PDF: Upload your university's course offering PDF
- Select Courses: Choose which courses you want to take
- Set Preferences: Choose preferred faculty and earliest start time
- Generate Routines: Get all possible routines ranked by preference match
- Conflict Detection: Automatically filters out routines with time conflicts
- Preference Matching: Ranks routines based on faculty and timing preferences
- Warning System: Shows warnings for non-preferred faculty or early start times
- Sorting Options: Sort routines by score, warnings, or start time
- Responsive Design: Works on desktop and mobile devices
- Frontend: React 19, Tailwind CSS
- PDF Processing: PDF.js for parsing course PDFs
- Build Tool: Vite
- Language: JavaScript/JSX
-
Clone the repository:
git clone https://github.com/yourusername/course-routine-planner.git cd course-routine-planner -
Install dependencies:
npm install
-
Start the development server:
npm run dev
# Development
npm run dev # Start development server
npm run serve # Start server accessible on network (for mobile testing)
# Building
npm run build # Build for production
npm run preview # Preview production build
# Maintenance
npm run clean # Clean build artifacts and cache
npm run clean:all # Clean everything and reinstall dependencies
npm run lint # Run ESLint for code quality
# Mobile Testing
npm run serve # Then access from mobile: http://[your-ip]:3000- Open your browser and navigate to
http://localhost:5173
- Click "Upload your course PDF" and select your university's course offering PDF
- The application will automatically parse the PDF and extract course data
- You'll see a success message with the number of parsed course sections
- Browse through available courses or use the search function
- Click on courses to select them for your routine
- View selected courses summary including total credits
- Timing: Set your preferred earliest class start time
- Faculty: Choose preferred faculty for each course (optional)
- These preferences will be used to rank routine suggestions
- View all possible valid routines ranked by preference match
- Each routine shows:
- Match score and quality label (Excellent, Good, Fair, Poor)
- Warnings for any preference mismatches
- Complete schedule with courses, sections, faculty, and timings
- Sort routines by score, warnings, or start time
The application is designed to work with university course offering PDFs that contain:
- Course codes and titles
- Section information
- Faculty names and initials
- Class timings and days
- Room numbers
- Credit information
The parser is robust and handles various PDF formats, including lossy table structures.
The application provides helpful warnings for:
- Faculty Mismatch: When a routine includes a faculty member other than your preferred choice
- Early Start Time: When a class starts before your preferred earliest start time
- Time Conflicts: Automatically filtered out, so no conflicting routines are shown
Routines are scored based on:
- +10 points: For each course with your preferred faculty
- -5 points: For each class starting before your preferred time
- Quality Labels:
- Excellent: Score ≥ 50
- Good: Score ≥ 20
- Fair: Score ≥ 0
- Poor: Score < 0
src/
├── App.jsx # Main application component
├── CourseRoutinePlanner.jsx # Main planner with step navigation
├── PdfUploadAndParse.jsx # PDF upload and parsing
├── CourseSelection.jsx # Course selection interface
├── PreferenceSettings.jsx # Preference configuration
├── RoutineGenerator.jsx # Routine generation and display
├── parseCourseTable.js # PDF parsing logic
└── main.jsx # Application entry point
- Combination Generation: Creates all possible combinations of sections for selected courses
- Conflict Detection: Filters out routines with time conflicts using time range overlap detection
- Preference Scoring: Ranks routines based on faculty and timing preferences
- Warning Generation: Identifies and displays preference mismatches
- Parses time ranges (e.g., "10:00 - 11:20")
- Checks for overlaps between different sections
- Handles multiple time slots per course (day1/time1, day2/time2)
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions:
- Check the console for error messages
- Ensure your PDF format is compatible
- Try with different course combinations
- Create an issue on GitHub with details about your problem
- Support for more PDF formats
- Export routine to calendar applications
- Save and load preferences
- Multiple semester planning
- Advanced conflict resolution
- Room capacity and availability checking
Made with ❤️ to help students create better course routines