π Live Demo β’ π Deployment Guide β’ π Backend API β’ π€ AI Service
The ultimate platform for hackathon enthusiasts to find events, form dream teams, and build award-winning projects
|
Deployed on Vercel β Auto-deploys from main branch |
hacktrack-server-674s.onrender.com Deployed on Render Auto-deploys from main branch |
hacktrack-embedding.onrender.com Deployed on Render β Sentence-Transformers |
- π 500+ Hackathons - Real-time aggregation from Devpost, MLH, and Clist
- π·οΈ Smart Status Labels - See ONGOING, UPCOMING, or FINISHED at a glance
- π€ AI Teammate Matching - Sentence-transformers powered recommendations (384-dim embeddings)
- π¬ Real-time Chat - Socket.io for instant team communication
- π Smart Bookmarks - Save and organize favorite events
- π Advanced Filters - Filter by platform, status, location, timeframe, and more
- π Personal Dashboard - Track your hackathon journey
- π Portfolio Building - Showcase your achievements
- π Event Management - Create and manage hackathons
- π Analytics Dashboard - Track engagement and registrations
- π₯ Participant Management - Review submissions and teams
- π’ Promotion Tools - Reach thousands of developers
- πΌ Professional Profile - Build your organizer brand
- Real-time Aggregation: Backend fetches events from multiple sources every 6 hours
- Smart Caching: Events are cached to reduce API load and improve performance
- Status Calculation: Real-time calculation of event status (ongoing/upcoming/finished)
- Advanced Filtering: 7 filter categories with instant results
- Pagination: Smooth pagination with 24/48/96 events per page
Events are automatically labeled based on their dates:
- π’ ONGOING - Event has started but not ended (with pulse animation)
- π΅ UPCOMING - Event hasn't started yet
- π΄ FINISHED - Event has ended
- Profile Embedding: User profiles are converted to 384-dimensional vectors using sentence-transformers
- Similarity Calculation: Cosine similarity computed between user embeddings
- Smart Filtering: Results filtered by location, college, skills, graduation year
- Ranking: Top 15 matches returned based on similarity score
- Real-time Updates: Recommendations update as profiles change
- Socket.io Connection: Persistent WebSocket connection for instant messaging
- Room-based Chat: Each team/event has its own chat room
- Message History: All messages stored in MongoDB
- Typing Indicators: See when teammates are typing
- Online Status: See who's currently online
- React 18 - UI library with hooks
- Vite 5 - Lightning-fast build tool
- TailwindCSS 3 - Utility-first CSS framework
- shadcn/ui - Beautiful component library
- React Router 6 - Client-side routing
- Axios - HTTP client with interceptors
- Socket.io Client - Real-time communication
- Node.js 18 - JavaScript runtime
- Express 4 - Web framework
- MongoDB Atlas - Cloud database (M0 free tier)
- Mongoose 8 - MongoDB ODM
- Passport.js - Authentication middleware
- Google OAuth 2.0
- GitHub OAuth
- LinkedIn OAuth
- JWT - Token-based authentication
- Socket.io - WebSocket server
- Express Session - Session management with MongoDB store
- Bcrypt - Password hashing
- Helmet - Security headers
- CORS - Cross-origin resource sharing
- Python 3.12.8 - Latest stable Python
- Flask 3 - Lightweight web framework
- Sentence-Transformers 3.3 - State-of-the-art embeddings
- Model:
all-MiniLM-L6-v2 - Dimensions: 384
- Speed: ~50ms per embedding
- Model:
- PyTorch 2.5 - ML framework (CPU-only for efficiency)
- NumPy 2.2 - Numerical computing
- Flask-CORS - CORS support
- Clist API v4 - Programming contests and competitions
- Devpost API - Hackathon platform
- MLH API - Major League Hacking events
- Custom Events - User-created hackathons
β
Node.js 18+ (LTS recommended)
β
MongoDB (local or Atlas account)
β
Python 3.12+ (for AI features)
β
Git# 1. Clone repository
git clone https://github.com/satvik-sharma-05/SE.git
cd SE
# 2. Install backend dependencies
cd server
npm install
# 3. Install frontend dependencies
cd ../client
npm install
# 4. Install AI service dependencies
cd ../embedding-service
pip install -r requirements.txtBackend - Create server/.env:
# Database
MONGO_URI=mongodb://localhost:27017/hacktrack
# Or use MongoDB Atlas:
# MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/HackTrack
# Authentication
JWT_SECRET=your_super_secret_jwt_key_min_32_chars_long
SESSION_SECRET=your_session_secret_key_also_32_chars
# Service URLs
FRONTEND_URL=http://localhost:5173
EMBEDDING_URL=http://localhost:5002
# OAuth (Optional - for social login)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL=http://localhost:5000/api/auth/google/callback
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
GITHUB_CALLBACK_URL=http://localhost:5000/api/auth/github/callback
LINKEDIN_CLIENT_ID=your_linkedin_client_id
LINKEDIN_CLIENT_SECRET=your_linkedin_client_secret
LINKEDIN_CALLBACK_URL=http://localhost:5000/api/auth/linkedin/callback
# Event Sources (Required for event aggregation)
CLIST_USERNAME=your_clist_username
CLIST_API_KEY=your_clist_api_key
# Email (Optional - for password reset)
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
# Environment
NODE_ENV=development
PORT=5000Frontend - Create client/.env:
VITE_API_BASE_URL=http://localhost:5000/api# Terminal 1 - AI Service (Port 5002)
cd embedding-service
python app.py
# Terminal 2 - Backend (Port 5000)
cd server
npm run dev
# Terminal 3 - Frontend (Port 5173)
cd client
npm run devVisit http://localhost:5173 π
hacktrack/
βββ client/ # React frontend
β βββ public/ # Static assets
β βββ src/
β β βββ api/ # API clients
β β βββ components/ # React components
β β β βββ events/ # Event-related components
β β β βββ layout/ # Layout components
β β β βββ ui/ # Reusable UI components
β β βββ context/ # React context (Auth)
β β βββ pages/ # Page components (30+)
β β βββ services/ # API services
β β βββ utils/ # Utility functions
β βββ .env # Environment variables
β βββ .env.production # Production env vars
β βββ package.json
β
βββ server/ # Node.js backend
β βββ data/ # Cache files
β βββ src/
β β βββ cache/ # API cache
β β βββ config/ # Configuration
β β β βββ db.js # MongoDB connection
β β β βββ passport.js # OAuth strategies
β β β βββ env.js # Environment config
β β βββ controllers/ # Business logic
β β β βββ auth.controller.js
β β β βββ events.controller.js
β β β βββ user.controller.js
β β βββ middleware/ # Express middleware
β β β βββ auth.js # JWT authentication
β β β βββ rateLimiter.js # Rate limiting
β β β βββ validation.js # Input validation
β β βββ models/ # MongoDB schemas
β β β βββ User.js
β β β βββ Event.js
β β β βββ Chat.js
β β β βββ Message.js
β β βββ routes/ # API routes
β β βββ services/ # External API services
β β β βββ clist.js # Clist API
β β β βββ devpost.service.js # Devpost API
β β β βββ mlhService.js # MLH API
β β βββ utils/ # Utility functions
β βββ .env # Environment variables (gitignored)
β βββ .env.example # Example env file
β βββ package.json
β
βββ embedding-service/ # Python AI service
β βββ app.py # Flask application
β βββ requirements.txt # Python dependencies
β βββ runtime.txt # Python version
β
βββ README.md # This file
βββ DEPLOY.md # Deployment guide
βββ CHANGES.md # Recent changes log
POST /api/auth/register # Register new user
POST /api/auth/login # Login with email/password
GET /api/auth/logout # Logout user
GET /api/auth/me # Get current user
GET /api/auth/google # Google OAuth login
GET /api/auth/github # GitHub OAuth login
GET /api/auth/linkedin # LinkedIn OAuth login
POST /api/auth/forgot-password # Request password reset
POST /api/auth/reset-password # Reset password with token
GET /api/events/live # Get live events (all sources)
GET /api/events/mlh # Get MLH events only
GET /api/events/devpost # Get Devpost events only
GET /api/events/:id # Get event by ID
POST /api/events/:id/bookmark # Toggle bookmark
GET /api/events/me/bookmarks # Get user's bookmarks
GET /api/events/statistics # Get event statistics
POST /api/teammates/find # Search teammates with AI
POST /api/teammates/recommend # Get AI recommendations
GET /api/teammates/form-teams # Auto team formation
GET /api/users/profile # Get current user profile
PUT /api/users/profile # Update profile
GET /api/users/:id # Get public user profile
GET /api/chats # Get user's chats
POST /api/chats # Create new chat
GET /api/chats/:id/messages # Get chat messages
POST /api/chats/:id/messages # Send message
GET /api/health # Backend health check
GET /health # AI service health check
- Frontend: https://hacktrack-frontend.vercel.app
- Backend: https://hacktrack-server-674s.onrender.com/api
- AI Service: https://hacktrack-embedding.onrender.com
All services auto-deploy on push to main branch:
git add .
git commit -m "your changes"
git push origin mainDeployment Times:
- Frontend (Vercel): 1-2 minutes
- Backend (Render): 2-3 minutes
- AI Service (Render): 2-3 minutes
Render Dashboard β hacktrack-server-674s β Environment:
# Required
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/HackTrack
JWT_SECRET=your_production_jwt_secret
SESSION_SECRET=your_production_session_secret
EMBEDDING_URL=https://hacktrack-embedding.onrender.com
FRONTEND_URL=https://hacktrack-frontend.vercel.app
# OAuth Callbacks
GOOGLE_CALLBACK_URL=https://hacktrack-server-674s.onrender.com/api/auth/google/callback
GITHUB_CALLBACK_URL=https://hacktrack-server-674s.onrender.com/api/auth/github/callback
LINKEDIN_CALLBACK_URL=https://hacktrack-server-674s.onrender.com/api/auth/linkedin/callback
# Event Sources
CLIST_USERNAME=your_username
CLIST_API_KEY=your_api_key
# Environment
NODE_ENV=productionVercel Dashboard β hacktrack-frontend β Settings β Environment Variables:
VITE_API_BASE_URL=https://hacktrack-server-674s.onrender.com/apiSee DEPLOY.md for detailed deployment instructions and troubleshooting.
We use all-MiniLM-L6-v2 for high-quality embeddings:
- Model Size: 80MB (lightweight)
- Dimensions: 384 (compact yet powerful)
- Speed: ~50ms per embedding on CPU
- Quality: State-of-the-art semantic similarity
- No GPU Required: Optimized for CPU inference
-
Profile Embedding Generation:
# Combine user data profile_text = f"{bio} {skills} {interests} {domain}" # Generate embedding embedding = model.encode(profile_text) # 384-dim vector
-
Similarity Calculation:
# Cosine similarity similarity = dot(vec1, vec2) / (norm(vec1) * norm(vec2))
-
Filtering & Ranking:
- Filter by location, college, graduation year
- Sort by similarity score (0-1)
- Return top 15 matches
-
Real-time Updates:
- Embeddings regenerated when profile changes
- Background job updates all embeddings nightly
# Generate embedding
POST /embed
{
"text": "Full-stack developer interested in AI and blockchain"
}
# Returns: {"embedding": [0.123, -0.456, ...]} # 384 numbers
# Calculate similarity
POST /similarity
{
"vec1": [0.123, ...],
"vec2": [0.456, ...]
}
# Returns: {"similarity": 0.87} # 0-1 score- API Response Time: < 100ms average
- Event Caching: 6-hour cache reduces API calls by 95%
- Database Queries: Indexed for fast lookups
- Rate Limiting: Prevents abuse and ensures fair usage
- Compression: Gzip compression reduces payload size by 70%
- Page Load: < 1.5s on 3G
- Code Splitting: Lazy loading reduces initial bundle
- Image Optimization: WebP format with fallbacks
- Caching: Service worker caches static assets
- Pagination: Only loads 24 events at a time
- Inference Time: < 500ms per request
- Memory Usage: ~150MB
- Concurrent Requests: Handles 10+ simultaneous requests
- Cold Start: < 5s (Render free tier)
Event Sources β 6-hour cache β Background refresh
User Profiles β Real-time β Nightly embedding update
Static Assets β CDN β Browser cache
API Responses β Redis (future) β Client cache
- β JWT Authentication: Secure token-based auth
- β Password Hashing: Bcrypt with salt rounds
- β HTTPS Only: All production traffic encrypted
- β CORS Protection: Whitelist of allowed origins
- β Rate Limiting: Prevents brute force attacks
- β Input Validation: Sanitizes all user input
- β SQL Injection Protection: MongoDB prevents SQL injection
- β XSS Protection: React escapes all output
- β CSRF Protection: SameSite cookies
- β Helmet.js: Security headers
- β Session Security: Encrypted session store
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch:
git checkout -b feature/AmazingFeature
- Commit your changes:
git commit -m 'Add some AmazingFeature' - Push to the branch:
git push origin feature/AmazingFeature
- Open a Pull Request
- Follow existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation
- Ensure all tests pass
This project is licensed under the MIT License - see LICENSE file for details.
- Clist API - Programming contest aggregation
- Devpost - Hackathon platform and API
- MLH - Major League Hacking events
- Shadcn/ui - Beautiful component library
- Vercel - Frontend hosting
- Render - Backend and AI service hosting
- MongoDB Atlas - Database hosting
- Sentence-Transformers - State-of-the-art embeddings
- Hugging Face - Model hosting
Developer: Satvik Sharma
GitHub: @satvik-sharma-05
Repository: https://github.com/satvik-sharma-05/SE
Issues: Report a bug
Discussions: Ask a question
- Event aggregation from multiple sources
- AI-powered teammate matching
- Real-time chat
- Event status labels (ongoing/upcoming/finished)
- Advanced filtering system
- OAuth authentication
- Bookmark system
- Personal dashboard
- Event reminders and notifications
- Calendar integration (Google Calendar, iCal)
- Team formation wizard
- Project showcase gallery
- Skill endorsements
- Hackathon ratings and reviews
- Mobile app (React Native)
- Email notifications
- Advanced analytics for organizers
- Sponsor matching for events
If you find HackTrack helpful, please consider:
β Starring the repository
π Reporting bugs and issues
π‘ Suggesting new features
π€ Contributing code
π’ Sharing with friends
Made with β€οΈ by developers, for developers