Never miss a competitive programming contest again.
A beautiful, fully-automated alarm app that wakes you up before every contest — even if you forget.
Landing Page |
Contest Calendar |
|
|
Full-Screen Alarm |
Settings |
|
|
You're a competitive programmer. You know that feeling:
"Wait, there was a Codeforces round today?!"
You set calendar reminders. You forget to check them. You rely on willpower. You oversleep. You miss Div. 2 rounds, weekly LeetCode contests, and CodeChef starters — over and over again.
CodeBuzzer exists to make that impossible.
Not just one gentle notification. CodeBuzzer hits you with a cascade of escalating reminders:
| Time Before Contest | Alert Type |
|---|---|
| ⏳ 30 minutes | Push notification |
| ⏳ 10 minutes | Push notification |
| 🔊 5 minutes | Full-screen ringing alarm (loud, with vibration) |
| 🟢 Contest start | Push notification |
The full-screen alarm rings even when your phone is locked or the app is closed. It's like a phone call you can't ignore.
- Horizontal scrollable calendar with contest indicators on each day
- Smart date-snapping — auto-jumps to the next contest day on launch
- Filter by platform to see only contests you care about
- Platform-specific timeline mode for focused browsing
CodeBuzzer now features a Dynamic Custom Platforms Engine. It reads contest data from a remote JSON gist, allowing unlimited platforms to be supported seamlessly!
| Platform | Source | Status |
|---|---|---|
| Codeforces | Live API (codeforces.com/api) |
✅ Real-time |
| LeetCode | Hardcoded schedule (Weekly + Biweekly) | ✅ Always available |
| CodeChef | Hardcoded schedule (Weekly) | ✅ Always available |
| CodingNinjas | Hardcoded schedule (Weekly) | ✅ Always available |
| Custom Sites | Remote JSON Sync (e.g. Repovive, AtCoder) |
✅ Dynamic sync |
LeetCode, CodeChef, and Coding Ninjas contests follow fixed schedules, so they're generated locally. Custom platforms are fetched dynamically and automatically integrate into your filter chips and Settings!
CodeBuzzer uses Android's WorkManager to silently sync contests every 48 hours in the background. Even if you don't open the app for a month, your alarms will keep updating themselves.
When the alarm rings, you get a beautiful full-screen experience:
- Swipe left → Dismiss
- Swipe right → Snooze (5 min)
- Or just tap the labels directly
No accidental dismissals. Inspired by the phone call UX.
Have a mock contest? A study session? An interview?
- Tap "Add Alarm" on any date to create your own custom reminder
- Set a title, description, and exact time
- Full alarm support — just like contest reminders
Keep track of your contests without even opening the app!
- Today's Contests: See all contests scheduled for today right on your home screen.
- Dynamic Platform Colors: Widget cards automatically match the theme of the contest's platform.
- Smart Empty States: Easily see if there are contests coming up tomorrow when today is clear.
- Clean Design: A beautiful dark-mode interface with a minimalist, un-obtrusive layout.
- Glassmorphism design with frosted blur effects
- Interactive Coach Marks (Tutorial Overlays) for seamless onboarding
- Smooth micro-animations and transitions
- Green accent color palette (
#1CD065) - Google Sans typography throughout
- Timezone-Aware: All contest times automatically convert to your local timezone seamlessly.
- Toggle platforms on/off independently
- Custom alarm sounds — pick any audio file from your phone
- Permission manager — one-tap setup for exact alarms, notifications & overlays
- Battery optimization tips built-in
| Layer | Technology |
|---|---|
| Framework | Flutter (Dart) |
| State Management | Provider |
| Alarms | alarm package |
| Notifications | flutter_local_notifications |
| Background Sync | workmanager |
| HTTP | http |
| Storage | shared_preferences |
| Permissions | permission_handler |
lib/
├── main.dart # App entry + WorkManager setup
├── data/
│ └── dsa_quotes.dart # Hardcoded DSA tips and quotes database
├── models/
│ └── contest.dart # Contest data model
├── providers/
│ └── contest_provider.dart # State management & alarm scheduling
├── services/
│ ├── alarm_service.dart # Alarm & notification scheduling
│ ├── api_service.dart # API calls + hardcoded contest generation
│ └── tutorial_service.dart # Coach marks & interactive onboarding
└── ui/
├── screens/
│ ├── alarm_ring_screen.dart # Full-screen alarm with swipe actions
│ ├── home_screen.dart # Calendar + contest list
│ ├── landing_screen.dart # Animated onboarding
│ ├── main_screen.dart # Bottom nav shell
│ ├── settings_screen.dart # Platform toggles, sounds, permissions
│ └── splash_screen.dart # App initialization with DSA typewriter
└── widgets/
├── add_alarm_popup.dart # Manual alarm creation sheet
├── contest_card.dart # Modular contest list item
├── contest_filter_chips.dart # Dynamic platform filter chips
├── glass_container.dart # Reusable liquid glassmorphism UI component
├── horizontal_calendar.dart # Scrollable date selector
├── mesh_background.dart # Decorative background widget
└── skeleton_loader.dart # Pulsing loading animation for contests
- Flutter SDK
>=3.10.4 - Android Studio / VS Code
- An Android device or emulator (API 21+)
# Clone the repo
git clone https://github.com/sambhandavale/CodeBuzzer.git
cd CodeBuzzer
# Install dependencies
flutter pub get
# Set up environment variables
# Copy .env.example to .env and configure your custom API endpoints
cp .env.example .env
# Run tests to ensure everything is stable
flutter test
# Run on your device
flutter run
# Build release APK
flutter build apkThe release APK will be at build/app/outputs/flutter-apk/app-release.apk.
CodeBuzzer requests the following permissions for reliable alarm delivery:
| Permission | Why |
|---|---|
INTERNET |
Fetch Codeforces contests from API |
SCHEDULE_EXACT_ALARM |
Precise alarm scheduling |
POST_NOTIFICATIONS |
Push notification reminders |
SYSTEM_ALERT_WINDOW |
Full-screen alarm overlay |
RECEIVE_BOOT_COMPLETED |
Restore alarms after phone restart |
WAKE_LOCK |
Keep alarm ringing when screen is off |
FOREGROUND_SERVICE |
Background alarm service |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
Prevent OS from killing the app |
Tip: For the most reliable experience, go to App Info → Battery → Unrestricted.
Contributions are welcome! Here are some ways you can help:
- 🐛 Report bugs — Open an issue
- 💡 Suggest features — Start a discussion
- 🔧 Submit PRs — Fork, branch, code, and open a pull request
- ⭐ Star the repo — It helps more than you think!
- Codeforces real-time API integration
- LeetCode weekly + biweekly contests
- CodeChef weekly contests
- Coding Ninjas weekly contests
- Multi-stage alarm cascade (30m, 10m, 5m, start)
- Background sync with WorkManager
- Custom alarm sounds
- Swipe-to-dismiss alarm screen
- Manual alarm creation
- Dynamic custom platforms via remote JSON
- Widgets for home screen
- AtCoder support
- Contest rating predictions
- Contest problem difficulty analysis
- iOS support
This project is licensed under the MIT License — see the LICENSE file for details.
Built with 💚 for competitive programmers who oversleep.





