A modern, full-stack event management application built with Spring Boot 4.0, React 19 (Vite), and MongoDB.
This application demonstrates a comprehensive dashboard featuring category filtering with two distinct modes: Client-side filtering (instant, in-memory) and Server-side filtering (fetching dynamically from database REST API endpoints).
Demo video:https://www.loom.com/share/5cf2c4f98785433288f6499b910fd11e
- Backend: Spring Boot 4.0 (Java 17/22), Spring Data MongoDB, Lombok
- Frontend: React 19, Vite, Axios, Vanilla CSS
- Database: MongoDB (Local or Atlas)
event_management_system/
├── src/ # Spring Boot Backend Source Code
│ ├── main/
│ │ ├── java/com/eventmanager/
│ │ │ ├── config/CorsConfig.java
│ │ │ ├── controller/EventController.java
│ │ │ ├── model/Event.java
│ │ │ ├── repository/EventRepository.java
│ │ │ ├── seeder/DataSeeder.java
│ │ │ └── EventManagerApplication.java
│ │ └── resources/application.properties
│ └── test/java/com/eventmanager/EventManagerApplicationTests.java
├── event-frontend/ # React + Vite Frontend
│ ├── src/
│ │ ├── api/eventApi.js
│ │ ├── components/
│ │ │ ├── EventCard.jsx
│ │ │ ├── EventList.jsx
│ │ │ └── FilterBar.jsx
│ │ ├── App.css
│ │ ├── App.jsx
│ │ ├── index.css
│ │ └── main.jsx
│ ├── package.json
│ └── vite.config.js
├── pom.xml # Maven Dependency Descriptor
└── README.md # Documentation
- Java Development Kit (JDK): Version 17 or higher
- Node.js & npm: Node 18+ and npm 9+
- MongoDB: A running MongoDB instance ( MongoDB Atlas connection string)
- Ensure MongoDB is running on
mongodb://localhost:27017/eventdb. If you are using a custom MongoDB connection or MongoDB Atlas, opensrc/main/resources/application.propertiesand replace:spring.data.mongodb.uri=your-connection-string - Navigate to the root directory of the project in your terminal.
- Start the Spring Boot application using the Maven wrapper:
- Windows:
.\mvnw.cmd spring-boot:run
- Linux / macOS:
./mvnw spring-boot:run
- Windows:
- The server will start on port
8080. - On startup, the application will detect if your
eventscollection is empty. If empty, the DataSeeder will automatically seed the database with 15 mock events.
- Navigate to the
event-frontenddirectory in your terminal:cd event-frontend - Install the node dependencies:
npm install
- Start the Vite local development server:
npm run dev
- Open your browser and navigate to
http://localhost:5173.
The dashboard implements two filtering modes which can be toggled in real time:
- How it works: When the dashboard mounts, the entire list of 15 events is loaded into the React state (
allEvents). When you select a category (e.g., Workshop), the filter logic runs instantly in the browser using JavaScript's.filter()array method. - Benefits: Instant rendering with zero additional network requests.
- How it works: When a category button is clicked, the React application sends a new HTTP GET request to the Spring Boot REST endpoint (
/api/events/filter?category={category}). The server queries MongoDB usingEventRepository.findByCategory(category)and returns the matching document list. - Benefits: Optimal for large-scale databases where loading all data at once into browser memory is inefficient.
The Spring Boot backend exposes the following CORS-enabled endpoints:
| Method | Endpoint | Query Param | Description |
|---|---|---|---|
| GET | /api/events |
None | Retrieve all events from database |
| GET | /api/events/filter |
category |
Retrieve events matching the specified category |