A personal email scraper + dashboard that automatically finds hackathon and competition emails from your Gmail and displays them in a clean, filterable GUI.
🌐 Live Demo: https://hackradar-xw6o.onrender.com/
Built for VIT Vellore students (works with @vitstudent.ac.in Google Workspace accounts).
- 🔍 Auto-scrapes your Gmail for hackathon, competition, contest, emails
- 🔥 Smart tagging — flags Urgent deadlines, Upcoming events, and New announcements
- ⏰ Deadline extraction — pulls dates from email bodies using regex
- 🎛️ Filter by status and tag — sidebar navigation
- 🔎 Live search — search subject, sender, or snippet
- ⊞ Grid / List toggle — switch layouts
- 📋 Detail panel — click any card to see full preview + metadata
- ♻️ One-click refresh — re-fetches from Gmail in real time
└── hackradar/
├── README.md
├── app.py
├── DEPLOYMENT.md
├── LICENSE
├── render.yaml
├── requirements.txt
├── .env.example
├── hackradar-ui/
│ ├── package.json
│ ├── public/
│ │ ├── index.html
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src/
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── reportWebVitals.js
│ └── setupTests.js
└── .github/
└── workflows/
└── deploy.yml
You need a
credentials.jsonfile from Google Cloud Console. Never commit this file to GitHub.
- Go to console.cloud.google.com
- Sign in with your VIT Google account (
@vitstudent.ac.in) - Click the project dropdown at the top → New Project
- Name it
HackRadar→ click Create
- In the left sidebar → APIs & Services → Library
- Search for
Gmail API - Click it → click Enable
- Go to APIs & Services → OAuth consent screen (or Google Auth Platform → Branding)
- Under Audience, select Internal (since you're using a VIT org account — no verification needed)
- Click Next
- Fill in:
- App name:
HackRadar - User support email: your VIT email
- App name:
- Click Save and Continue
- On the Data Access step → click Add or Remove Scopes
- Search for
gmail.readonly→ check it → click Update - Click Save and Continue → Back to Dashboard
- Go to APIs & Services → Credentials (or Google Auth Platform → Clients)
- Click + Create Credentials → OAuth 2.0 Client ID
- Application type → Desktop App
- Name →
HackRadar Desktop - Click Create
- Click Download JSON
- Rename the downloaded file to
credentials.json - Place it in the
backend/folder
⚠️ Never pushcredentials.jsonortoken.pickleto GitHub. They are already in.gitignore.
cd backend
pip install -r requirements.txtpython app.pyOn first run, a browser window will open asking you to sign in with your Google account and grant read-only Gmail access. After approval, a token.pickle file is saved — you won't need to log in again.
Open your browser and visit:
http://localhost:5000/api/emails
You should see a JSON array of your scraped hackathon emails. ✅
npx create-react-app hackradar-ui
cd hackradar-uiReplace src/App.js with the contents of frontend/HackRadar.jsx, then:
npm start- Go to stackblitz.com → New React Project
- Paste the contents of
HackRadar.jsxintoApp.jsx - Done — live preview instantly
flask
flask-cors
google-auth
google-auth-oauthlib
google-api-python-client
Make sure your .gitignore includes:
# Gmail API secrets — NEVER commit these
credentials.json
token.pickle
# Python
__pycache__/
*.pyc
.env
# Node
node_modules/
Gmail API (OAuth2)
↓
Flask Backend (app.py)
• Searches Gmail with keyword queries
• Extracts subject, sender, date, body preview
• Detects deadlines using regex
• Tags emails: hackathon, contest, MLH, SIH, etc.
• Returns JSON at /api/emails
↓
React Frontend (HackRadar.jsx)
• Fetches from localhost:5000
• Renders filterable dashboard
• Status: Urgent / Upcoming / New
• Grid and List views
• Detail panel on click
The scraper searches your Gmail for emails containing:
hackathon · hack · devpost · competition · contest · challenge · ideathon · datathon · buildathon · smart india · SIH · MLH · IEEE · ACM · register now · deadline · submit project
You can add more in app.py by editing the KEYWORDS list.
| Problem | Fix |
|---|---|
403 org_internal error |
Your VIT org may block external OAuth. Try switching to External in the consent screen and add your email as a test user. |
| Browser doesn't open for login | Run python app.py in a terminal (not an IDE) so it can open a browser window |
token.pickle error |
Delete token.pickle and re-run — it will prompt login again |
| No emails showing | Check that your Gmail account actually has hackathon-related emails; try broadening keywords |
| CORS error in frontend | Make sure Flask is running on port 5000 and flask-cors is installed |
Pull requests are welcome! If you're a VIT student and want to add features (e.g., email notifications, calendar integration, auto-apply links), feel free to fork and open a PR.
MIT License — free to use, modify, and share.
Made with ⚡ at VIT Vellore