Intelligent course timetable builder with a frontend-first workflow.
EnrollMate helps students build course schedules, detect conflicts, apply filters, and export timetable views.
- Data source: browser-based extraction workflow
- App runtime: React + Vite frontend
- Processing: local (client-side)
- Storage: localStorage via Zustand persistence
EnrollMate/
├── frontend/ React application
│ ├── src/ Components, pages, state, utilities
│ ├── public/ Static assets
│ └── README.md Frontend-specific documentation
├── design-md/ Design reference packs
│ └── <brand>/README.md Brand-specific design guide
├── README.md This file
└── LOCAL-TESTING-GUIDE.md Local testing instructions
- Course selection and timetable visualization
- Conflict detection based on overlapping slots
- Filtering by free days, free times, and compatibility rules
- PDF/export-ready timetable view
- Persistent local state for selected courses
cd frontend
npm install
npm run devDefault local URL:
http://localhost:5173
Use the flow below after you enter the app.
- Open http://localhost:5173 in your browser.
- If courses are auto-loaded from the extension, go to the next guide.
- If courses are not loaded, click Paste Data and paste your course data.
- Confirm that course cards are visible on the page.
- Use the search box to find a course.
- Click a course card to add it to your selected list.
- Review conflict warnings before adding overlapping slots.
- Use filters to remove unwanted days, times, or conflicting options.
- Confirm your selected courses in the timetable view.
- Click the download or export action.
- Save the PDF and verify all selected courses are included.
- React 18
- Vite
- Zustand
- Tailwind CSS
- React Router
- React Hot Toast
- Radix UI
cd frontend
npm run buildDeploy the generated dist/ output to your preferred static host.
- No data loaded: verify the input format and browser console.
- Missing conflict checks: verify day/time slot formatting.
- Export issues: ensure at least one course is selected.
Educational and personal use.