Smart Schedule App is a complete solution for the automatic generation and management of school timetables.
The project is built with a robust Java Spring Boot backend and a modern React/TypeScript frontend, ensuring a seamless user experience.
The application provides an efficient way to manage teachers, classes, subjects, and schedules, while respecting both hard constraints (e.g., availability, classroom conflicts) and soft preferences (e.g., teaching hours).
Key features include:
- Password-based authentication
- Teacher, class, and subject management
- Automatic timetable generation based on input data
- Export to Excel and PDF
- Change history, undo functionality, and conflict detection
- Backend: Java 17, Spring Boot, Maven
- Containerization: Docker
- Oracle 23AI container (runtime)
- MySQL container (database)
- Frontend: React + TypeScript
- Persistence: MySQL (Docker container)
- Optimization: OptaPlanner (constraint solver)

The login interface, where users must enter a password to access the application.

The introduction dashboard, offering quick navigation to Teachers, Classes, and Subjects management.

Teacher management view with filters, search bar, and add teacher functionality.

Detailed teacher information, including assigned classes, subjects, and homeroom responsibilities.

Overview of all classes, with options to filter, add, and export data to Excel or PDF.

Detailed class information, including associated teachers and profiles.

Subject management view with filters, add subject functionality, and export options.

Detailed subject allocation per class, with weekly teaching hours.

Generated timetable for primary school classes, with 7 fixed daily periods.

Generated timetable for middle and high school classes, ensuring no conflicts between teachers and classrooms.
- 7 fixed periods per day:
- 08:30 – 09:15
- 09:25 – 10:10
- 10:25 – 11:10
- 11:25 – 12:10
- 12:20 – 13:05
- 13:15 – 14:00
- 14:05 – 14:50
- Workdays: Monday – Friday
- Primary School: Grades 1A – 4D
- Lower Secondary School: Grades 5A – 9F
- Upper Secondary School: Grades 10A – 12D (Real/Humanities)
- Empty classes are excluded from generation
- Up to 10 teachers per subject
- Teachers may teach multiple subjects
- Subjects with subgroup sessions (e.g., CS, English, French, Technology)
- Class is split into subgroups, taught in parallel
- Primary School: 4–5 periods/day (max 7)
- Secondary: 5–6 periods/day (max 7)
- Balanced subject distribution
- Teacher rules:
- Hard: unavailability, no double-booking
- Soft: preferred times
The timetable is automatically generated using the data introduced by the user into the system.
The generation algorithm relies on:
- Classes defined in the system (grade, profile, level)
- Teachers and their weekly teaching hours
- Subjects associated with classes and teachers
- Classrooms and availability
- Teacher restrictions (hard) and preferences (soft)
-
Data Collection:
The system collects all input (teachers, classes, subjects, availability). -
Constraint Solving (OptaPlanner):
- Hard constraints (cannot be violated):
- No teacher in two places at once
- Class must not have overlapping lessons
- Classroom cannot be double-booked
- Soft constraints (preferences to optimize):
- Teachers prefer certain hours/days
- Balanced subject distribution
- Primary classes prefer morning hours
- Hard constraints (cannot be violated):
-
Automatic Assignment:
Each subject-hour is placed into the timetable considering all constraints. -
Conflict Detection & Resolution:
- If conflicts arise, the solver retries with adjustments
- Final timetable ensures feasibility and fair distribution
-
Result:
- A valid timetable with all periods filled
- Teacher and classroom availability respected
- Students and teachers have balanced schedules
- Manual Adjustments: Admin can move lessons
- Undo / Version History: Keep track of changes
- Export: Timetable downloadable as Excel or PDF
# Clone repo
git clone https://github.com/Ela689/Smart_Schedule_App_New.git
cd Smart_Schedule_App_New
# Backend
cd orar/backend
mvn spring-boot:run
# Frontend
cd orar/frontend
npm install
npm start