A full-stack web application for managing college clubs, events, and membership recruitment with role-based access control.
Features Β· Tech Stack Β· Getting Started Β· Project Structure Β· API Reference Β· Screenshots
ClubConnect is a comprehensive platform designed for college campuses to streamline the management of student clubs. It provides a centralized system where students can discover and apply to clubs, coordinators can manage their clubs and events, and admins can oversee the entire ecosystem β all secured with JWT-based authentication and role-based authorization.
- Secure user registration and login with JWT tokens
- Role-based access control (Student, Coordinator, Admin)
- Protected routes with automatic token management
- Session persistence via localStorage
- Browse and discover all available clubs
- View detailed club information and member lists
- Apply to join clubs with a single click
- Track application status (Pending / Approved / Rejected)
- Personal dashboard with membership overview
- Create and manage clubs
- Organize and schedule events for clubs
- Review, approve, or reject student membership applications
- View club analytics and member lists
- System-wide dashboard with statistics
- Manage all users (view, promote, delete)
- Oversee and manage all clubs across the platform
- Approve or reject newly created clubs
- Landing page with platform overview
- Browse clubs without authentication
- View upcoming events across all clubs
- Club detail pages with event listings
| Technology | Purpose |
|---|---|
| Java 25 | Core programming language |
| Spring Boot 3.2.4 | Application framework |
| Spring Security | Authentication & authorization |
| Spring Data JPA | Database ORM |
| H2 Database | Persistent file-based database |
| JWT (jjwt 0.11.5) | Token-based authentication |
| Lombok | Boilerplate reduction |
| Maven | Build & dependency management |
| Technology | Purpose |
|---|---|
| React 18 | UI library |
| Vite 5 | Build tool & dev server |
| React Router v6 | Client-side routing |
| Axios | HTTP client for API calls |
| Lucide React | Icon library |
| React Hot Toast | Toast notifications |
- Java 25 (or compatible JDK)
- Node.js (v18+ recommended)
- npm (v9+)
- Maven (or use the included Maven wrapper)
git clone https://github.com/partheevg03/Club-connect.git
cd Club-connectcd backend
./mvnw spring-boot:runThe backend API will start at http://localhost:8080.
Note: The H2 database is file-based and will persist data across server restarts. Data is stored in
backend/data/clubdb.
cd frontend
npm install
npm run devThe frontend dev server will start at http://localhost:5173.
Open your browser and navigate to http://localhost:5173.
The application seeds default accounts on first startup via DataSeeder.java:
| Role | Password | |
|---|---|---|
| Admin | (check DataSeeder.java) | (check DataSeeder.java) |
You can also register new accounts through the
/registerpage.
Club-connect/
βββ backend/ # Spring Boot Backend
β βββ pom.xml # Maven configuration
β βββ data/ # H2 persistent database files
β βββ src/main/java/com/clubmanagement/
β βββ ClubManagementApplication.java # Entry point
β βββ config/
β β βββ SecurityConfig.java # Spring Security config
β β βββ CorsConfig.java # CORS configuration
β β βββ DataSeeder.java # Initial data seeding
β βββ controller/
β β βββ AuthController.java # Login & register endpoints
β β βββ ClubController.java # Club CRUD operations
β β βββ EventController.java # Event management
β β βββ ApplicationController.java # Membership applications
β β βββ AdminController.java # Admin operations
β βββ service/
β β βββ AuthService.java
β β βββ ClubService.java
β β βββ EventService.java
β β βββ ApplicationService.java
β β βββ AdminService.java
β βββ repository/
β β βββ UserRepository.java
β β βββ ClubRepository.java
β β βββ EventRepository.java
β β βββ ApplicationRepository.java
β βββ entity/
β β βββ User.java
β β βββ Club.java
β β βββ Event.java
β β βββ Application.java
β β βββ enums/
β β βββ Role.java # STUDENT, COORDINATOR, ADMIN
β β βββ ClubStatus.java # PENDING, APPROVED, REJECTED
β β βββ ApplicationStatus.java # PENDING, APPROVED, REJECTED
β βββ dto/ # Request/Response DTOs
β β βββ LoginRequest.java
β β βββ RegisterRequest.java
β β βββ AuthResponse.java
β β βββ ClubRequest.java
β β βββ ClubResponse.java
β β βββ EventRequest.java
β β βββ EventResponse.java
β β βββ ApplicationRequest.java
β β βββ ApplicationResponse.java
β β βββ UserResponse.java
β βββ security/
β βββ JwtUtil.java # JWT token generation/validation
β βββ JwtAuthFilter.java # JWT authentication filter
β βββ UserDetailsServiceImpl.java # Custom UserDetailsService
β
βββ frontend/ # React + Vite Frontend
βββ index.html
βββ package.json
βββ vite.config.js
βββ src/
βββ main.jsx # App entry point
βββ App.jsx # Root component with routing
βββ index.css # Global styles
βββ api/ # API service layer
β βββ axios.js # Axios instance with interceptors
β βββ authApi.js # Auth API calls
β βββ clubApi.js # Club API calls
β βββ eventApi.js # Event API calls
β βββ applicationApi.js # Application API calls
β βββ adminApi.js # Admin API calls
βββ components/ # Reusable components
β βββ Navbar.jsx # Navigation bar
β βββ Sidebar.jsx # Dashboard sidebar
β βββ PrivateRoute.jsx # Auth-protected route wrapper
β βββ UI.jsx # Shared UI components
βββ contexts/
β βββ AuthContext.jsx # Authentication context provider
βββ pages/
βββ LandingPage.jsx # Home/landing page
βββ LoginPage.jsx # User login
βββ RegisterPage.jsx # User registration
βββ ClubsPage.jsx # Browse all clubs
βββ ClubDetailPage.jsx # Individual club details
βββ EventsPage.jsx # Browse all events
βββ student/
β βββ StudentDashboard.jsx
βββ coordinator/
β βββ CoordinatorDashboard.jsx
β βββ CreateClubPage.jsx
β βββ CreateEventPage.jsx
βββ admin/
βββ AdminDashboard.jsx
βββ ManageUsersPage.jsx
βββ ManageClubsPage.jsx
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/auth/register |
Register a new user | β |
POST |
/auth/login |
Login and receive JWT | β |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/clubs |
List all clubs | β |
GET |
/clubs/{id} |
Get club details | β |
POST |
/clubs |
Create a new club | π Coordinator |
GET |
/clubs/my-clubs |
Get coordinator's clubs | π Coordinator |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/events |
List all events | β |
POST |
/events |
Create a new event | π Coordinator |
GET |
/events/club/{clubId} |
Get events by club | β |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/applications |
Apply to join a club | π Student |
GET |
/applications/my |
Get user's applications | π Student |
GET |
/applications/club/{clubId} |
Get club applications | π Coordinator |
PUT |
/applications/{id}/approve |
Approve an application | π Coordinator |
PUT |
/applications/{id}/reject |
Reject an application | π Coordinator |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/admin/users |
List all users | π Admin |
GET |
/admin/clubs |
List all clubs | π Admin |
DELETE |
/admin/users/{id} |
Delete a user | π Admin |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ClubConnect β
ββββββββββββ¬βββββββββββββββ¬ββββββββββββββββββββββββββββ€
β Student β Coordinator β Admin β
ββββββββββββΌβββββββββββββββΌββββββββββββββββββββββββββββ€
β Browse β Everything β Everything a β
β clubs β a Student β Coordinator can do β
β β can do β β
β Apply to β β Manage all users β
β clubs β Create & β β
β β manage clubs β Manage all clubs β
β Track β β β
β apps β Create β System-wide β
β β events β dashboard β
β Personal β β β
β dashboardβ Review β Approve/reject β
β β applications β clubs β
ββββββββββββ΄βββββββββββββββ΄ββββββββββββββββββββββββββββ
| Property | Default | Description |
|---|---|---|
server.port |
8080 |
Backend server port |
spring.datasource.url |
jdbc:h2:file:./data/clubdb |
H2 database location |
spring.h2.console.enabled |
true |
Enable H2 web console |
spring.h2.console.path |
/h2-console |
H2 console URL path |
jwt.secret |
(configured) | JWT signing secret |
jwt.expiration |
86400000 |
Token expiry (24 hours) |
The frontend is configured to proxy API requests to the backend at http://localhost:8080.
This project uses H2 Database in file-based mode for persistent storage.
- Console URL:
http://localhost:8080/h2-console - JDBC URL:
jdbc:h2:file:./data/clubdb - Username:
sa - Password: (empty)
User (1) ββββ (N) Application (N) ββββ (1) Club
β
User (1) ββββ (N) Club (as coordinator) β
β
Event (N)
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
Built with β€οΈ by partheevg03