Timetabling for VIT is a web application designed to automate the unit timetabling process for the Victorian Institute of Technology. The platform optimizes class schedules, taking into account room availability, course requirements, and student availability to ensure efficient use of resources and a seamless scheduling experience.
https://vit-timetabling-230c1835ad5a.herokuapp.com
Login
Users can log in with a pre-set username and password provided by Team Jet Edge.
Welcome Page
After logging in, users are presented with two options:
- Generate Timetable: Starts the process of uploading a student enrolment Excel file to generate a new timetable.
- Modify Timetable: Allows users to edit existing timetables by navigating to the Timetable Page.
Upload File
- Selecting “Generate Timetable” on the Welcome Page brings up the "Upload File" pop-up window.
- Click UPLOAD FILE at the top to select and upload the student enrolment Excel file.
- After uploading, click PROCEED at the bottom to move to the Information Page.
Information Page
On the Information Page, users can edit room and unit information as needed.
- Certain columns (Campus, Course, Unit Code, Enrolled Students) in the Unit Table are parsed directly from the uploaded Excel file and cannot be modified.
- Right-clicking on a cell opens a context menu for more options, such as inserting or deleting rows.
Once editing is complete, click NEXT at the bottom right to proceed to the Generate Timetable page.
Generate Timetable
- Click GENERATE TIMETABLE to start the timetabling process.
- The processing icon will indicate progress and return to its original state once generation is complete.
- Click NEXT at the bottom right to move to the Timetable Page.
Display Timetable
- Users can view the timetable by campus by selecting campus names on the left-hand side of the page.
- Drag-and-Drop Editing: Users can drag and drop units to adjust room and time allocations as needed. Click SAVE CHANGES to apply edits to the database.
- Note: The system will display a warning if:
- A unit overlaps with another time slot (“OVERLAPPED”).
- A unit is assigned outside a designated room (“ASSIGN ACTIVITIES TO ROOMS ONLY”).
Download Timetable
If no further changes are needed, click DOWNLOAD TIMETABLE at the bottom to download the campus timetable as a ZIP file.
User Stories
Issue key | Epic Name | User Story Name | User Story | Priority |
---|---|---|---|---|
KAN-51 | Automate Timetable Generation | Add workdays to algorithms | As a student support team member, I want the scheduling algorithm to work across 5 working days instead of just one day, so that we can create timetables for the entire week, offering more flexibility and better scheduling options for students. |
High |
KAN-41 | Automate Timetable Generation | Connect to Azure database | As a Student Service team member, I want to store semester and campus information for later retrieval, So that I can view and edit them later down the line without having to re-enter all the data, which saves time and effort. |
High |
KAN-32 | Automate Timetable Generation | Constraint 1: no students have overlapping units | As a student service team member, I want to implement a constraint that ensures no student has overlapping classes so that students can attend all their enrolled classes without any scheduling conflicts. |
Highest |
KAN-45 | Automate Timetable Generation | Constraint 2: no overlapping units are in the same room | As a student service team member, I want to implement a constraint that ensures no two classes are scheduled in the same classroom at the same time so that there are no conflicts or double-bookings in the timetable, ensuring each class has a dedicated space. |
Highest |
KAN-34 | Automate Timetable Generation | Constraint 3: ensure room capacity is not less than allocated unit size | As a student service team member, I want to implement a constraint that ensures the room size is greater than or equal to the class size so that all scheduled classes have adequate space for all enrolled students. |
Highest |
KAN-52 | Automate Timetable Generation | Constraint 4: lab units prefer lab rooms | As a student service team member, I want to implement a constraint that ensures lab units are allocated to lab rooms whenever possible so that practical classes are held in appropriate environments conducive to hands-on learning. |
Highest |
KAN-53 | Automate Timetable Generation | Constraint 5 (Room Availability Constraint): Filter the room in Front End (if a room is labelled not available, do not sent it to the backend). | As a student service team member, I want to label the rooms as available or not, so that only available rooms are scheduled. |
High |
KAN-56 | Automate Timetable Generation | Front end persistence using indexedDB | As a Student Service Team member, I want all input data to be saved at least until I have finished inputting all data necessary for generating the timetable so that I can input all the data for the schedule process. |
High |
KAN-57 | Automate Timetable Generation | Store and get info from database | As a Student Service Team member, I want to store semester and campus information for later retrieval, so that I can view and edit them later down the line without having to re-enter all the data, which saves time and effort. |
Medium |
KAN-92 | General | Improve UI/UX design on frontend | As a Student Service Team member, I want the product to be aesthetically feasible, so that it would match with other VIT websites |
Lowest |
KAN-91 | General | Skip button straight to timetable page | As a Student Service Team member, I want to be able to modify my previously generated timetable right away so that I can save time |
High |
KAN-77 | Security | Basic Authentication at backend | As a Student Service Team member, I want to ensure that access to the backend is secured using Basic Authentication so that only authorized users can interact with the system. |
High |
KAN-76 | Security | Integrate with backend Basic Auth + reroute to login page | As a Student Service Team member, I want the application to be secure so that only authorised personnel can access the website to use its functionalities and view VIT’s timetables. |
High |
KAN-37 | Store Timetable Input Data | Allow classes to take up more than 1 timeslot | As a Student Service Team member, I want to be able to make timetables with class durations of varying length so that I can have flexibility in the classes I plan to have at my institution, and still be able to generate a timetable for them. |
Highest |
KAN-26 | Store Timetable Input Data | Build campus data input page | As a member of the Student Service Team, I want to input information about each campus so that the timetables I want to generate is specific to each campus. |
Medium |
KAN-27 | Store Timetable Input Data | Build classroom/lab data input page | As a member of the Student Service Team, I want to input information about each building and classroom so that lessons can be allocated to a physical location. |
Medium |
KAN-25 | Store Timetable Input Data | Build course data input page | As a member of the Student Service Team, I want to input information about each course so that the timetable for students enrolled in each course is different. |
Medium |
KAN-24 | Store Timetable Input Data | Build file upload page for enrolment info | As a member of the Student Service Team, I want timetables to be generated using the enrolment information of the current semester so that classroom/space allocation will be efficient and adjust dynamically between semesters. |
Highest |
KAN-36 | Store Timetable Input Data | Client side page routing | As a Student Service Team member, I want lower load time when navigating between pages, so that I can get my tasks done faster. |
Medium |
KAN-39 | Store Timetable Input Data | Connect Quarkus backend with React frontend | As a Student Service Team member, I want to enter data and for it to be processed to generate a timetable. so that I can have an automated and quick way to create timetables, without loads of manual labour. |
Medium |
KAN-20 | Store Timetable Input Data | Design data Input UI | As a member of the Student Service Team, I want the system to have an user-friendly data input interface, so that I can submit information for generating timetables quickly. |
High |
KAN-21 | Store Timetable Input Data | Setup database | As a Student Service Team member, I want to store semester and campus information for later retrieval, So that I can view and edit them later down the line without having to re-enter all the data, which saves time and effort. |
Highest |
KAN-43 | Store Timetable Input Data | Take into account classrooms and labs priority constraint | As a Student Service Team member, I want to prioritize the allocation of specific classrooms and labs based on their suitability for certain courses so that the timetable reflects the optimal use of resources, ensuring that specialized spaces are reserved for classes that require them. |
High |
KAN-59 | Store and get info from database | Store generated timetable to database | As a Student Service Team member, I want to store semester and campus information for later retrieval, so that I can view and edit them later down the line without having to re-enter all the data, which saves time and effort. This is not completed for Sprint 1 due to our change of backend framework. This will be moved to Sprint 2. |
Medium |
KAN-58 | Store and get info from database | Store student enrolment info from .xlsx file | As a Student Service Team member, I want to store semester and campus information for later retrieval, So that I can view and edit them later down the line without having to re-enter all the data, which saves time and effort. |
Medium |
KAN-69 | Testing and Deployment | Backend deployment | As a Student Service Team member, I want the backend of the application to be properly deployed so that it reliably processes data and supports frontend interactions. |
High |
KAN-62 | Testing and Deployment | Backend Unit Tests | As a developer, I want to thoroughly test the backend functions and modules, so that I can catch bugs early, validate the behaviour of APIs, and verify the correctness of business logic, ensuring that all unit tests pass when individual components are tested in isolation. |
High |
KAN-87 | Testing and Deployment | Connect deployed frontend to the deployed backend | As a Student Service Team member, I want the application to generate timetables using a deployed backend so that I don’t have to run the backend locally. |
Highest |
KAN-68 | Testing and Deployment | Frontend deployment | As a Student Service Team member, I want the front end of the application to be properly deployed so that I can access and interact with the system’s interface seamlessly. |
High |
KAN-65 | Testing and Deployment | Frontend Unit Tests | As a Student Service Team member, I want the application UI to be free of bugs so that I can work efficiently. |
Medium |
KAN-82 | Testing and Deployment | Integration Tests | As a Student Service Team member, I want the application to be able to communicate seamlessly with the backend so that I can work coherently. |
Medium |
KAN-83 | Testing and Deployment | Security Tests | As a backend developer, I want the backend to enforce secure access to endpoints, so that unauthorized users cannot access sensitive data or system functionalities. |
Medium |
KAN-94 | Testing and Deployment | System Tests | As a system tester, I want to test the entire timetable system comprehensively, including functional, usability, and performance aspects, so that I can ensure it meets the specified requirements and works seamlessly in real-world scenarios. |
High |
KAN-95 | Testing and Deployment | User Acceptance Tests | As a student service team member or administrator, I want to interact with the timetable system in a real-world scenario, so that I can verify that the system meets my needs, is easy to use, and satisfies all business requirements. |
High |
KAN-84 | View and Edit Timetable | Change website tab name to "Timetabling for VIT" | As a Student Service Team member, I want the application to have a consistent VIT theme so that this application is made for VIT. |
Low |
KAN-49 | View and Edit Timetable | Display Gantt Chart for received data | As a Student Service Team member, I want the auto-generated timetable to have a clear display format so that I can easily view and make modifications. |
High |
KAN-74 | View and Edit Timetable | Ensure database only stores one timetable for each campus at all times | As a Student Service Team member, I want to only have one timetable for each campus at all times, i.e. each time I generate a new timetable for a campus, any existing timetable for that particular campus should be removed So that I don’t have to sift through a lot of timetables and always be focused on just one |
High |
KAN-75 | View and Edit Timetable | Fix database, prevent leaking large input files | As a Student Service Team member, I want to have all the data I enter into the system saved So that I can retrieve these data later |
High |
KAN-50 | View and Edit Timetable | Handle download timetables | As a Student Service Team member, I want to download the auto-generated timetable(s) so that I view them locally on my own PC and set up timetables for my students. |
High |
KAN-60 | View and Edit Timetable | Handle dynamic routing with dynamic campus inputs | As a Student Service Team member, I want to view the timetable of 1 campus per Gantt chart so that any changes in room/time allocation I make will not clash with other classes happening on the same campus. If more campuses are added in the future, the web-application should be dynamic and display timetables for those new campuses in new tabs as well. |
High |
KAN-71 | View and Edit Timetable | Modify DB schema to allow storage of timetables by campus | As a Student Service Team member, I want to view timetables by campus So that I can know the classes happening for each campus during the semester and modify accordingly since classes can’t be changed across campuses. |
High |
KAN-86 | View and Edit Timetable | Remove the "Building" tab from input spreadsheets page | As a Student Service Team member, I want the UI to not contain unnecessary elements so that I can focus on my tasks. |
Low |
KAN-80 | View and Edit Timetable | Save unit drag-and-drop changes to database | As a Student Service Team member, I want to drag and drop to modify existing timetables and have those changes saved So that when I return to the timetable, it always has the latest changed applied, and I can keep modifying from there |
High |
KAN-73 | View and Edit Timetable | Split user input by campus before sending to backend | As a Student Service Team member, I want the application to generate 1 timetable for each campus so that each campus is constrained separately by their available buildings. |
High |
KAN-72 | View and Edit Timetable | Update frontend API method to match latest backend | As a Student Service Team member, I want the process of communicating with the backend to work seamlessly, so that I can generate a timetable from my input. |
High |
KAN-85 | View and Edit Timetable | Update pages to show loading state whilst processing data | As a Student Service Team member, I want the application UI to feel interactive when it’s loading, so that I know I am waiting on something to be done. |
High |
Before cloning and attempting to run this code, you will need:
- Node.js: Required for the frontend development, which uses JavaScript and Node.js.
- Java 11 or later: Required for running the backend developed with the Quarkus framework.
- Maven: For managing Java dependencies and building the backend.
- PostgreSQL: The database used in this project, along with pgAdmin for database management.
- Git: For version control and cloning the repository. (Optional, repo can also be downloaded as .zip)
- Heroku CLI: To deploy and manage the application on Heroku. (Optional, for deployment only)
Move into the frontend folder with:
cd frontend
Install all the packages with (only needs to be done once):
npm i
Run in development mode with:
npm run dev
Build for production with:
npm run build
Run in production mode:
npm run preview
Move into the backend folder with:
cd backend
Run in development mode with:
./mvnw compile quarkus:dev
Package the project as a JAR file with (only needs to be done once):
./mvnw package
Run in production mode:
java -jar target/quarkus-app/quarkus-run.jar
- Frontend: JavaScript with Node.js
- Backend: Java with Quarkus
- Database: PostgreSQL
- CI/CD: GitHub Actions
- Deployment: Heroku