HackHub is a MERN platform with a Vite React frontend, Express backend, MongoDB, and scheduled scrapers.
┌─────────────┐ ┌──────────────┐ ┌─────────┐
│ Scrapers │────>│ Express API │────>│ MongoDB │
│ (Cron Jobs) │ │ (JWT Auth) │<────│ (Atlas) │
└─────────────┘ └──────┬───────┘ └─────────┘
│
┌──────▼───────┐
│ React Client │
│ Dashboard, │
│ Calendar, │
│ Team Finder │
└──────────────┘
- Cron jobs fetch from Devpost, Unstop, Devfolio, HackerEarth, MLH, Hack2Skill
- Normalize → deduplicate → store in MongoDB
- API exposes
/api/hackathonswith filters, search, Worth Score - Client renders listings, dashboard, calendar, teammate finder
- Reminders via cron + email/push before deadlines
User
{ name, email, passwordHash, skills:[String], interests:[String], avatar, teams:[ObjectId] }Hackathon
{ title, organizer, source, url, description, domains:[String], skills:[String],
mode: 'online'|'offline'|'hybrid', location, prizePool, registrationDeadline, submissionDeadline,
startDate, endDate, worthScore: Number, featured: Boolean }Team
{ name, hackathon: ObjectId, members:[ObjectId], lookingFor:[String], inviteCode }Saved / Registration
{ user: ObjectId, hackathon: ObjectId, status: 'saved'|'registered'|'ongoing'|'completed' }Pure function calcWorthScore(hackathon, userSkills) → 0-100. See WORTH_SCORE.md.
JWT (access + refresh), bcrypt, protected routes via middleware.
- Frontend: Vercel / Netlify (static
dist) - Backend: Render / Railway / Vercel Functions
- DB: MongoDB Atlas
- Cron: Vercel Cron or node-cron on server