This project is a full-stack event management application that allows users to create events, browse available events, and register for them. The system is designed with a clean separation of concerns, efficient data handling, and a modern user interface.
The application demonstrates core backend engineering concepts such as REST API design, validation, pagination, and database interaction, along with a responsive frontend built using React.
- Create events with title, date, type, description, and optional image URL
- View a list of events with pagination
- View detailed information for a specific event
- Register users for events
- Prevent duplicate registrations for the same event
- Required field validation for all inputs
- Email format validation
- Proper error responses for invalid input
- Duplicate registration prevention with appropriate status codes
- Search events by title
- Filter events by type
- Pagination with next/previous navigation
- Optimized event listing using DTO projection (excludes large fields like description)
- Registration count per event (if implemented)
- Clean UI with card-based layout and responsive design
- Image support with fallback placeholder
- Debounced search for improved performance
The following requirements from the assessment have been implemented:
- Event creation with required fields
- Event listing and detailed view
- User registration for events
- Duplicate registration prevention
- Input validation and error handling
- Backend deployment with public URL
- Frontend deployment with public URL
- Database integration
Additional implemented improvements:
- Search and filtering functionality
- Pagination support
- Optimized database queries using projections
- Improved UI/UX with structured layout
- Debounced API calls for search
- Event detail navigation and routing
- Java
- Spring Boot
- Spring Data JPA (Hibernate)
- MySQL
- React (Vite)
- Axios
- React Router
- Backend hosted on Railway
- Frontend hosted on Vercel
The application follows a layered architecture:
Controller → Service → Repository → Database
- Controllers handle HTTP requests and responses
- Services contain business logic
- Repositories interact with the database
- DTOs are used for request/response separation and optimization
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/events | Create event |
| GET | /api/events | Get paginated events |
| GET | /api/events/{id} | Get event details |
| GET | /api/events/search | Search/filter events |
| POST | /api/events/{id}/register | Register user |
- Navigate to backend directory
- Configure database in
application.properties - Run:
mvn spring-boot:run
- Navigate to frontend directory
- Install dependencies:
npm install
- Start development server:
npm run dev
- Deployed on Railway
- Connected to MySQL database
- Deployed on Vercel
- Connected to backend via environment variables
Note: Backend may experience a short delay on first request due to cold start in free-tier hosting.
- Spring Boot was chosen for rapid backend development and strong ecosystem support
- JPA/Hibernate used for ORM abstraction and database interaction
- DTO projection used to reduce payload size and improve performance
- React used for modular and scalable frontend development
- RESTful APIs used for clear separation between frontend and backend
- Authentication and authorization (JWT)
- Image upload instead of URL input
- Advanced filtering (date range, categories)
- CI/CD pipeline integration
- Role-based access control
- Caching for frequently accessed data
Prashant