Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ“ ClubConnect β€” College Club Management & Recruitment System

Java Spring Boot React Vite H2 Database License

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


πŸ“‹ Overview

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.


✨ Features

πŸ” Authentication & 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

πŸ‘¨β€πŸŽ“ Student Portal

  • 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

πŸ§‘β€πŸ’Ό Coordinator Dashboard

  • Create and manage clubs
  • Organize and schedule events for clubs
  • Review, approve, or reject student membership applications
  • View club analytics and member lists

πŸ›‘οΈ Admin Panel

  • 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

🌐 Public Pages

  • Landing page with platform overview
  • Browse clubs without authentication
  • View upcoming events across all clubs
  • Club detail pages with event listings

πŸ›  Tech Stack

Backend

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

Frontend

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

πŸš€ Getting Started

Prerequisites

  • Java 25 (or compatible JDK)
  • Node.js (v18+ recommended)
  • npm (v9+)
  • Maven (or use the included Maven wrapper)

1. Clone the Repository

git clone https://github.com/partheevg03/Club-connect.git
cd Club-connect

2. Start the Backend

cd backend
./mvnw spring-boot:run

The 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.

3. Start the Frontend

cd frontend
npm install
npm run dev

The frontend dev server will start at http://localhost:5173.

4. Access the Application

Open your browser and navigate to http://localhost:5173.

Default Accounts (Seeded Data)

The application seeds default accounts on first startup via DataSeeder.java:

Role Email Password
Admin (check DataSeeder.java) (check DataSeeder.java)

You can also register new accounts through the /register page.


πŸ“ Project Structure

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

πŸ“‘ API Reference

Base URL: http://localhost:8080/api

Authentication

Method Endpoint Description Auth
POST /auth/register Register a new user ❌
POST /auth/login Login and receive JWT ❌

Clubs

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

Events

Method Endpoint Description Auth
GET /events List all events ❌
POST /events Create a new event πŸ”’ Coordinator
GET /events/club/{clubId} Get events by club ❌

Applications (Membership)

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

Admin

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

πŸ”’ Role-Based Access

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βš™οΈ Configuration

Backend (application.properties)

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)

Frontend (vite.config.js)

The frontend is configured to proxy API requests to the backend at http://localhost:8080.


πŸ—„οΈ Database

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)

Entity Relationship

User (1) ──── (N) Application (N) ──── (1) Club
                                            β”‚
User (1) ──── (N) Club (as coordinator)     β”‚
                                            β”‚
                                       Event (N)

🀝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License.


About

ClubConnect is a comprehensive college event management system designed to streamline organizing, discovering, and registering for campus events. Built with a robust Java 25 & Spring Boot backend and a modern React & Vite frontend, it features secure JWT authentication, role-based access control, and a persistent H2 database backend.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages