EVM Wheels — Car Rental Management

A Spring Boot 3 + Thymeleaf + PostgreSQL web app for managing a self-drive car rental business.

Features

  • Public site — landing page with hero, search bar, and featured cars
  • Browse & detail/cars (with optional date-range availability filter) and /cars/{id}
  • Auth — username/password registration & login (Spring Security + BCrypt)
  • Customer flow — book a car, view your bookings at /my-bookings
  • Admin panel/admin dashboard, full CRUD for cars, manage all bookings & update status
  • Date-range conflict detection — prevents double-booking the same car

Stack

Layer Choice
Runtime Java 17, Spring Boot 3.3
Web Spring MVC + Thymeleaf
Data Spring Data JPA + Hibernate
DB PostgreSQL
Security Spring Security 6 + BCrypt
Build Maven

Prerequisites

  • JDK 17+
  • Maven 3.9+
  • PostgreSQL 13+ running locally

Database setup

CREATE DATABASE evm_wheels;

By default the app connects with postgres / postgres on localhost:5432/evm_wheels. Override via env vars or by editing src/main/resources/application.properties:

export DB_URL=jdbc:postgresql://localhost:5432/evm_wheels
export DB_USER=postgres
export DB_PASSWORD=postgres

Hibernate's ddl-auto=update creates the schema on first run, and data.sql seeds 6 demo cars. Users are seeded from DataInitializer.java using the real password encoder.

Run

mvn spring-boot:run

Then open http://localhost:8080.

Seeded accounts

Role Username Password
Admin admin admin123
Customer demo demo1234

Change these immediately if you deploy this anywhere real.

Project layout

src/main/java/com/evmwheels/carrental/
├── CarRentalApplication.java
├── config/         SecurityConfig, DataInitializer
├── controller/     Home, Car, Booking, Auth, Admin
├── model/          Car, User, Booking + enums
├── repository/     Spring Data JPA interfaces
└── service/        Business logic (booking conflict checks, etc.)

src/main/resources/
├── application.properties
├── data.sql                  seed cars
├── static/{css,images}/      assets
└── templates/                Thymeleaf views

Routes

Method Path Access
GET / public
GET /cars, /cars/{id} public
GET/POST /login, /register public
GET/POST /cars/{id}/book customer
GET /my-bookings customer
GET /admin admin
GET/POST /admin/cars, /admin/cars/** admin
GET /admin/bookings admin
POST /admin/bookings/{id}/status admin
S
Description
No description provided
Readme
9.1 MiB
Languages
HTML 45.9%
Java 42.1%
CSS 9.9%
JavaScript 2%