A comprehensive hackathon management platform that enables organizers to create, manage, and run hackathons while providing participants with tools to submit projects, form teams, and engage with the community.
- Hackathon Management: Create, edit, and manage hackathons with detailed information
- User Authentication: Secure login/signup system with role-based access
- Project Submission: Advanced submission system with file uploads and validation
- Team Management: Form teams, invite members, and collaborate
- Judging System: Comprehensive judge management and scoring system
- Real-time Comments: Nested comment system with reply functionality
- Organizers: Create hackathons, manage participants, oversee judging
- Participants: Join hackathons, submit projects, form teams
- Judges: Evaluate submissions, provide scores and feedback
- Leaderboard: Real-time ranking and scoring
- File Management: Secure file upload and storage
- Responsive Design: Mobile-friendly interface
- Dark/Light Theme: Customizable UI experience
- Search & Filter: Advanced hackathon and project discovery
- React 18 with TypeScript
- Vite for fast development and building
- Material-UI (MUI) for component library
- React Router for navigation
- Axios for API communication
- Spring Boot 3 with Java
- Spring Security for authentication
- Spring Data JPA for database operations
- MySQL database
- Maven for dependency management
This project implements 15 different design patterns to ensure maintainable, scalable, and well-structured code:
- Builder Pattern - Submission creation with step-by-step construction
- Chain of Responsibility - Validation chain for submissions (title, description, file size)
- Decorator Pattern - Enhanced notification system with email and Slack decorators
- Factory Pattern - Hackathon role creation and mail service adapter factory
- Observer Pattern - Real-time hackathon notifications and updates
- State Pattern - Hackathon lifecycle management (draft, published, judging, completed)
- Strategy Pattern - Flexible scoring strategies (simple average, weighted average)
- Template Method - Scoreboard generation for different phases
- Visitor Pattern - Analytics collection and data processing
- Iterator Pattern - Custom collections for hackathons, submissions, and teams
- Adapter Pattern - Mail service integration (Mailgun, organizer SMTP)
- Bridge Pattern - Score evaluation abstraction
- Proxy Pattern - Submission service with access control and caching
- Memento Pattern - Submission history and undo functionality
- Factory Pattern - UI component creation and role-based interfaces
- Builder Pattern - Dynamic form building and submission construction
- Node.js (v18+ recommended)
- Java (v17+ required)
- MySQL (v8.0+ recommended)
- Maven (v3.6+ recommended)
git clone https://github.com/your-username/wehack.git
cd wehack# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Build the frontend for production
npm run build# Navigate to backend directory
cd backend
# Configure database in application.properties
# Update database URL, username, and password
# Install dependencies and run (serves both frontend and backend)
./mvnw spring-boot:run- Application: http://localhost:8080
- API Endpoints: http://localhost:8080/api/*
Note: The Spring Boot backend serves the built React frontend, so the entire application runs on a single port (8080).
For development with hot reload:
# Terminal 1 - Frontend development server
cd frontend
npm run dev # Runs on localhost:5173
# Terminal 2 - Backend server
cd backend
./mvnw spring-boot:run # Runs on localhost:8080WeHack/
βββ frontend/ # React TypeScript frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Main application pages
β β βββ contexts/ # React contexts
β β βββ services/ # API service layers
β β βββ types/ # TypeScript type definitions
β β βββ utils/ # Utility functions
β βββ public/ # Static assets
β βββ package.json
βββ backend/ # Spring Boot backend
β βββ src/main/java/
β β βββ com/we/hack/
β β βββ controller/ # REST controllers
β β βββ service/ # Business logic
β β βββ model/ # JPA entities
β β βββ repository/ # Data access layer
β β βββ config/ # Configuration classes
β βββ src/main/resources/
β β βββ application.properties
β βββ pom.xml
βββ README.md
Update backend/src/main/resources/application.properties:
# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/wehack
spring.datasource.username=your_username
spring.datasource.password=your_password
# JPA Configuration
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=trueCreate .env file in frontend directory:
VITE_API_BASE_URL=http://localhost:8080
VITE_APP_NAME=WeHack- Advanced project submission with validation
- File upload support (ZIP, PDF, docs)
- Draft saving functionality
- Builder pattern implementation
- Hierarchical nested comments
- Real-time reply functionality
- Composite pattern for comment tree structure
- Modern dark theme UI
- Team creation and invitation system
- Member role management
- Collaborative project submission
- Comprehensive scoring interface
- Submission evaluation tools
- Real-time feedback system
POST /auth/login # User login
POST /auth/signup # User registration
POST /auth/logout # User logout
GET /hackathons # Get all hackathons
POST /hackathons # Create hackathon
GET /hackathons/{id} # Get hackathon details
PUT /hackathons/{id} # Update hackathon
DELETE /hackathons/{id} # Delete hackathon
POST /submissions # Submit project
GET /submissions/{id} # Get submission details
PUT /submissions/{id} # Update submission
GET /comments/{hackathonId} # Get comments
POST /comments # Add comment/reply
- JWT Authentication: Secure token-based authentication
- Role-based Access Control: Different permissions for users
- Input Validation: Comprehensive server-side validation
- File Upload Security: Safe file handling and storage
- SQL Injection Prevention: Parameterized queries
cd frontend
npm run testcd backend
./mvnw test# Frontend
cd frontend
npm run build
# Backend
cd backend
./mvnw clean package- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
- Follow TypeScript/React best practices
- Use consistent naming conventions
- Write comprehensive comments
- Include unit tests for new features
This project is licensed under the MIT License - see the LICENSE file for details.
- Material-UI for the excellent React components
- Spring Boot for the robust backend framework
- React Community for inspiration and best practices
- Open Source Contributors who made this project possible
For support, email support@wehack.com or join our Slack channel.
- Mobile App - React Native implementation
- Real-time Chat - WebSocket integration
- Advanced Analytics - Detailed hackathon insights
- API Gateway - Microservices architecture
- CI/CD Pipeline - Automated deployment
- Multi-language Support - Internationalization
Made with β€οΈ by the WeHack Team