A full-stack restaurant review application built with Spring Boot (Java) and React, featuring user authentication, role-based access control, and a modern, responsive UI.
This is a production-ready restaurant review platform that allows users to:
- Browse and search restaurants by cuisine type
- View detailed restaurant information with photos, location maps, and operating hours
- Write and manage reviews with ratings and photos
- Admin users can create, edit, and delete restaurants
- Java 21
- Spring Boot 3.5.7
- Spring Security
- OAuth2 Resource Server
- Keycloak
- Elasticsearch
- MapStruct
- Lombok
- Maven
- React 18
- Vite
- Tailwind CSS
- Framer Motion
- React Router
- Axios
- Keycloak JS
- React Hot Toast
- Docker Compose
- Keycloak
- Elasticsearch + Kibana
- User registration & login with Keycloak
- Custom login/signup UI
- Search restaurants by name or cuisine
- Detailed restaurant view (photos, maps, hours, reviews)
- Create/update/delete own reviews
- Rating + optional review photos
- Location map integration
- Create restaurants
- Edit restaurant details
- Delete restaurants
- Admin role indicators
- RESTful APIs
- JWT authentication
- File upload support
- Proper validation & error handling
- Responsive UI
- Smooth animations
- Unit tests
βββββββββββββββββββ β React Frontend β β (Port 3000) β ββββββββββ¬βββββββββ β HTTP/REST + JWT ββββββββββΌββββββββββββββββββ β Spring Boot Backend β β (Port 8080) β ββββββββββ¬ββββββββββββββββββ β ββββββ΄βββββ¬βββββββββββββββ β β β βββββΌββββ ββββΌββββ βββββββΌββββββ βElasticβ βKeycloakβ βFile Systemβ βsearch β β(9090) β β Storage β βββββββββ ββββββββββ βββββββββββββ
yaml Copy code
- Java 21+
- Node.js 18+
- Docker + Docker Compose
- Maven 3.8+
Your application includes a full production-grade security stack powered by Keycloak and Spring Security:
- π OAuth2 / OIDC authentication via Keycloak
- π JWT-based authorization (Resource Server)
- π Role-Based Access Control (RBAC):
user,admin - π§° Backend-side validation on all inputs
- π‘οΈ Protected routes on both frontend & backend
GET /api/restaurants GET /api/restaurants/{id} GET /api/restaurants/{id}/reviews GET /api/photos/{filename}
POST /api/restaurants/{id}/reviews PUT /api/restaurants/{id}/reviews/{reviewId} DELETE /api/restaurants/{id}/reviews/{reviewId} POST /api/photos
POST /api/restaurants PUT /api/restaurants/{id} DELETE /api/restaurants/{id}
- π± Fully responsive design (desktop, tablet, mobile)
- β¨ Framer Motion animations
- π Toast notifications for actions
- β Interactive star rating system
- πΌοΈ Photo galleries for restaurants & reviews
- πΊοΈ Map integration for restaurant locations
- β‘ Smooth page transitions & loading states
- Spring Boot best practices (controllers, services, repositories)
- OAuth2, JWT, RBAC security fundamentals
- Elasticsearch integration
- MapStruct mapper usage
- Layered architecture + dependency injection
- Validation & exception handling
- JUnit unit testing
- Maven project structure
- Component-driven React architecture
- REST API integration
- Secure auth with Keycloak JS
- React Router navigation
- Global state via Context API
- Tailwind CSS styling
- Animation systems (Framer Motion)
- Handling loading/error states gracefully
- Docker Compose multi-container environment
- Keycloak, Elasticsearch, Kibana orchestration
- Environment-based configuration
- Production-ready folder structure
Contributions, issues, and feature requests are welcome!
Feel free to fork the repo and submit a pull request.
This project is licensed under the MIT License.
Built as a portfolio project to demonstrate full-stack engineering proficiency and real-world application
