Skip to content

laurasot/agendalo-max

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Agéndalo Max

Web platform that connects service providers with clients who need to book appointments. It lets businesses create profiles, publish services, manage available time slots, and schedule bookings by region and city.

Context

This was one of my first complete projects as a developer. I keep it as a record of my technical growth: here I consolidated fundamentals such as layered MVC, relational persistence, form validation, and authentication using a classic server-side rendering stack (Spring Boot + JSP).

Since then, I have moved toward more modern architectures — decoupled REST APIs, SPA frontends, cloud deployment, infrastructure as code, and a stricter separation between domain, application, and infrastructure layers.

Features

  • User registration and login with hashed passwords (BCrypt)
  • Business creation and management with Free and Premium plans
  • Service publishing with duration, price, description, and images
  • Service search by region, city, and service type
  • Weekly availability calendar with booking and cancellation
  • Appointment dashboard for clients and business owners
  • User profile editing

Architecture

Monolithic application with a layered MVC architecture. Spring Boot exposes controllers that delegate business logic to services and persistence to JPA repositories. The UI is rendered on the server with JSP and Bootstrap.

JSP (Views)
    ↓
Controllers (Spring MVC)
    ↓
Services
    ↓
Repositories (Spring Data JPA)
    ↓
MySQL

Tech Stack

  • Java 17
  • Spring Boot 2.7
  • Spring MVC + JSP
  • Spring Data JPA / Hibernate
  • MySQL
  • Bootstrap 5
  • Lombok
  • jBCrypt
  • Maven
  • Docker

Getting Started

Prerequisites

  • Java 17
  • Maven 3.6+ (or use the included wrapper ./mvnw)
  • MySQL 8+
  • Docker (optional)

Installation

git clone https://github.com/<user>/agendalo-max.git
cd agendalo-max

Set the database environment variables:

export MYSQL_URL=jdbc:mysql://localhost:3306/proyecto_agenda
export MYSQL_USER=root
export MYSQL_PASSWORD=root

Run

With Maven:

./mvnw spring-boot:run

With Docker:

docker build -t agendalo-max .
docker run -p 8080:8080 \
  -e MYSQL_URL=jdbc:mysql://host.docker.internal:3306/proyecto_agenda \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=root \
  agendalo-max

The application will be available at http://localhost:8080.

Project Structure

src/main/java/com/laurasoto/ProyectoAgenda/
├── controlador/       # MVC endpoints and routing
├── servicios/         # Business logic
├── repositorios/      # Data access (Spring Data JPA)
├── modelos/           # JPA entities
├── validator/         # Custom validators
└── utiles/            # Shared utilities

src/main/webapp/WEB-INF/   # JSP views
src/main/resources/
├── static/css/            # Stylesheets
├── static/js/             # Frontend scripts
├── application.properties # Configuration
└── messages.properties    # i18n messages

Roadmap

  • User authentication and registration
  • Business and service management
  • Geographic search and appointment booking
  • Free and Premium plans
  • Monitoring and observability
  • CI/CD

Lessons Learned

  • Server-side rendering with JSP: JSP was chosen over an SPA to speed up MVP development and keep presentation logic close to the backend on a small team.
  • Session-based authentication: User state is managed with HttpSession, which is sufficient for the current flow without the complexity of JWT.
  • Schedule calculation in the domain layer: Available slot generation lives in the Servicio entity, which centralizes the business rule but couples complex logic to the model — a good candidate for refactoring into the service layer.
  • Evolutionary schema with Hibernate: ddl-auto=update simplifies local development, but explicit migrations (Flyway/Liquibase) are preferable in production.
  • Multi-stage Docker: The container builds with JDK 17 and runs with JRE, reducing the final image size.

About

Web application for appointment scheduling and service management. Businesses can create and manage multiple services, configure availability calendars, and allow customers to book appointments online. Built with Java and Spring Boot.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors