Chrome extension to track upcoming competitive programming contests from multiple platforms.
- Multi-Platform: Codeforces, AtCoder, LeetCode, CodeChef, Kaggle, and more
- Smart Filters: Filter by platform and time (Today, Week, Month)
- Fast & Reliable: Contest data is served from scheduled, cached JSON updates with automatic background refresh
- Beautiful: Clean dark theme interface
- Secure: Backend API aggregates and caches CLIST data without exposing credentials
- Free Forever: No ads, no tracking, open source
- Clone this repository
- Open Chrome →
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
extensionfolder
algoradar/
├── api/ # Backend (Vercel serverless)
│ └── contests.js # Serves pre-generated contest data (no runtime CLIST calls)
│
├── data/ # Generated contest data
│ └── contests.json # Cached JSON updated via local scheduled script
│
├── extension/ # Chrome extension
│ ├── manifest.json # Extension manifest (MV3)
│ ├── background.js # Background service worker (fetch + cache logic)
│ ├── popup.html # Extension popup UI
│ ├── popup.css # Popup styles
│ └── popup.js # Popup interaction logic
│
├── .github/
│ └── workflows/
│ └── update-contests.yml # Cron job to fetch contests from CLIST
│
└── README.md
Development Backend Development bash# Install dependencies npm install -g vercel
vercel dev
vercel --prod
- Make changes in
extension/folder - Go to
chrome://extensions/ - Click reload icon on AlgoRadar
- Test changes
The backend is deployed on Vercel and serves pre-generated static contest data.
- Contest data is fetched via a scheduled GitHub Actions cron job
- Data is stored as static JSON and served to clients
- No runtime calls to CLIST API
- Eliminates rate-limit risks and cold-start issues
- Backend only reads cached data at request time
- GitHub Actions cron job fetched from CLIST API
- Worked for 1700+ commits
- Issue: Cloudflare bot protection started blocking GitHub Actions IPs (403 errors)
- Local macOS script runs every 3 hours + on system wake
- Uses residential IP (trusted by Cloudflare)
- Commits and pushes to GitHub automatically
- Vercel detects push and serves updated data
- Zero Cloudflare blocks
- Frontend: Vanilla JavaScript, HTML, CSS
- Backend: Vercel Serverless Functions
- Data Pipeline: Local scheduling script->GitHub->Vercel
- API: CLIST API
- Deployment: Vercel (backend), Chrome Web Store (extension)
- Architecture and design rationale:
https://github.com/nilanshucodes/algoradar/wiki/Architecture-and-Design-Rationale - Also Checkout: Wiki
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
- Contest data updates when maintainer's machine is online (typically every 3-6 hours)
- If machine is offline for extended periods, data may be slightly stale (contests are announced days/weeks ahead, so this rarely affects users)
- UI remains intentionally minimal to keep the extension lightweight
- Migrate to a 24/7 VPS for always-on updates (Oracle Cloud Free Tier or similar)
- Optional persistent storage (only if future scale requires it)
- Global Timezone: automatically detects your computer's system timezone.
- The "Time Remaining" now accurately matches the actual start time.
- Contests now remain visible and accessible right up until their official start time.
- No UI changes
GPL-3.0 License - see LICENSE
- Contest data powered by CLIST
- AlgoRadar is an independent community project
- Issues: GitHub Issues
- Contact: Website
Built with ❤️ for the competitive programming community