A modern, full-stack web application designed to streamline the process of booking and managing lecture rooms at the AGH University Faculty of Management. This project replaces a manual, error-prone system with a transparent, digital-first solution.
The current process for rescheduling classes or booking rooms for make-up sessions at the AGH Faculty of Management is time-consuming, non-transparent, and prone to errors. It relies on a series of manual arrangements, emails, and direct contact with a faculty coordinator, with limited visibility into room availability.
This Room Booking System is an intuitive web application that solves this problem by:
- Providing instant access to up-to-date room schedules and specifications.
- Enabling a collaborative search for suitable time slots based on the availability of both the lecturer and the student group.
- Streamlining the booking process through digital coordination and a mutual confirmation mechanism (lecturer + student representative).
- Reducing manual workload and minimizing the risk of scheduling conflicts.
The ultimate goal is to deliver a flexible and user-friendly tool that genuinely simplifies the daily organization of teaching activities at the Faculty.
This project is built with a modern, robust, and scalable technology stack.
Frontend:
Backend:
Infrastructure:
Follow these steps to get a local copy up and running.
You need to have Docker and Docker Compose installed on your machine.
-
Clone the repository:
git clone https://github.com/mplazax/booking-system-agh.git cd booking-system-agh -
Build and run the application with Docker Compose: This single command will build the frontend and backend images, start all containers (frontend, backend, database), and set up the necessary network.
docker-compose up --build
The application will be available at
http://localhost. -
(Optional) Populate the database with sample data: To test the application with pre-filled data (users, rooms, courses, etc.), open a new terminal window and run the following commands:
- First, create the database schema:
docker-compose exec backend python create_tables.py --force - Then, populate the tables with example data:
docker-compose exec backend python populate.py --force
- First, create the database schema:
The project is organized as a monorepo with two main packages: frontend and backend.
.
├── backend/ # FastAPI application
│ ├── routers/ # API endpoint definitions
│ ├── model.py # SQLAlchemy database models
│ ├── schemas.py # Pydantic data schemas
│ ├── Dockerfile # Instructions to build the backend image
│ └── ...
├── frontend/ # React application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── features/ # Components related to specific features
│ │ ├── pages/ # Top-level page components
│ │ ├── hooks/ # Custom React hooks
│ │ └── ...
│ ├── nginx/ # Nginx configuration
│ └── Dockerfile # Instructions to build the frontend image
├── docker-compose.yml # Defines and orchestrates all services
└── README.md # You are here
If you have populated the database using the script, you can log in with the following sample accounts to test different roles and functionalities:
| Role | Password | |
|---|---|---|
| Admin | admin@example.com |
admin123 |
| Coordinator | koord@example.com |
koord123 |
| Lecturer | j.kowalski@example.com |
teach123 |
| Student Rep | a.nowak@example.com |
stud123 |
To test the core feature (requesting a change):
- Log in as a Student Rep (
a.nowak@example.com). - Go to the Calendar, select an event, and create a change request.
- Go to the Recommendations page, select the newly created request, and propose a few available time slots.
- Log out and log in as the corresponding Lecturer (
j.kowalski@example.com). - Go to the Recommendations page, select the same request, and propose your availability, making sure at least one slot overlaps with the Student Rep's proposal.
- The "Recommended Terms" section should now display the common slot, ready for approval.