A distributed web application built for the Distributed Applications Development course at Universidad Rey Juan Carlos. The platform connects private tutors who publish lesson offers with students looking to hire them. Users can act as both tutor and student simultaneously.
- Browse tutor posts with pagination
- View tutor profiles and their offers
- Register a new account
- Publish and manage your own lesson offers
- Book a tutor by creating a contract
- Manage your contracts (as teacher or student)
- Report posts for policy violations
- Rate posts (1–5 stars)
- Edit your profile name and bio
- Delete your account
| Entity | Description |
|---|---|
User |
Platform account — can act as both tutor and student |
Post |
A tutor's lesson offer with title, description, price, and rating |
Contract |
A hiring agreement between a student and a tutor for a specific post |
Report |
A policy violation report on a post |
Ranking |
Running average star rating for a post |
┌───────────────────────────────────────────────────────────┐
│ HAProxy (port 443) │
│ Round-robin load balancer │
└──────────────────┬────────────────────┬──────────────────┘
│ │
┌────────▼───────┐ ┌────────▼───────┐
│ web1 (:8443) │ │ web2 (:8443) │
│ Spring Boot │ │ Spring Boot │
│ + Hazelcast │◄──► + Hazelcast │
└────────┬───────┘ └────────┬───────┘
│ │
┌───────────▼────────────────────▼──────────┐
│ MySQL 8 │
└────────────────────────────────────────────┘
│
┌────────▼───────┐
│ RabbitMQ │
└────────┬───────┘
│
┌────────▼───────┐
│ email-service │ (consumes queue, sends Gmail notifications)
└────────────────┘
Key technologies: Spring Boot 2.7, Spring Security, Spring Data JPA, Mustache templates, Hazelcast distributed sessions, RabbitMQ (AMQP), MySQL 8, HAProxy, Docker Compose.
The email microservice (servicio_correo) listens on a RabbitMQ queue and sends Gmail notifications for:
| Code | Event |
|---|---|
S |
User registration |
I |
New post published |
P |
Post deleted |
N |
New contract created |
C |
Contract cancelled |
R |
Report submitted |
D |
Account deleted |
Legend: Orange = Controller · Green = Template · Purple = Repository · Blue = Model · Violet = Config · Yellow = Service
- Docker and Docker Compose installed
- A Gmail account with an App Password configured
Before running, set the required environment variables. Either edit docker-compose.yml or export them in your shell:
export GMAIL_ADDRESS=your.email@gmail.com
export GMAIL_APP_PASSWORD=your_16_char_app_password
⚠️ Never commit real credentials to source control. Thedocker-compose.ymlin this repo uses placeholder values — replace them with your own before running.
docker compose up --buildAccess the app at https://localhost:9443 (self-signed certificate — accept the browser warning).
sudo apt install default-jre mysql-server rabbitmq-serversudo mysqlCREATE USER 'test'@'localhost' IDENTIFIED BY 'test.profesoresACasa';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION;
CREATE SCHEMA profesoresACasa;
exitcd profesores_a_casa && mvn clean package -DskipTests && cd ..
cd servicio_correo && mvn clean package -DskipTests && cd ..java -jar profesores_a_casa/target/profesores_a_casa-1.0.jar
java -jar servicio_correo/target/servicio_correo-1.0.jarBrowse to https://localhost:8443 once both services are running.
| Home | Login | Sign Up |
|---|---|---|
![]() |
![]() |
![]() |
| My Profile | Post Detail | Book a Tutor |
|---|---|---|
![]() |
![]() |
![]() |










