A beautiful macOS menu bar app that helps you track your LeetCode progress with real-time status indicators.
- Red/Green Status Indicator - Instantly see if you've completed today's daily challenge
- 🔴 Red = Daily challenge pending
- 🟢 Green = Daily challenge completed
- Daily Progress Counter - Track how many problems you've solved today
- Total Problems - Your all-time solved count
- Your Profile Picture - Displays your LeetCode avatar as the menu bar icon with status border
- Streak Tracking - Never lose your solving streak
- Difficulty Badges - Easy/Medium/Hard visual indicators
- Auto-refresh - Updates every 5 minutes automatically
- Clean, modern SwiftUI interface
- Native macOS design
- Light/Dark mode support
- Quick access popover menu
- One-click problem access
- Go to Releases
- Download
LeetCodeReminder.app.zip - Unzip it → Get
LeetCodeReminder.app - Move
LeetCodeReminder.appto/Applications - First run: Run this in Terminal to allow macOS to open it:
xattr -cr /Applications/LeetCodeReminder.app
- Open from Applications or Spotlight ✨
That's it! No build tools needed.
- macOS 13.0 or later
- Xcode 15.0 or later
- LeetCode account
-
Open in Xcode
git clone https://github.com/rekcilyssup/LeetCodeReminder.git cd LeetCodeReminder open LeetCodeReminder.xcodeproj -
Build & Run
- Press
Cmd + Rto build and run - Or click the Play button in Xcode
- Press
-
First Launch
- Enter your LeetCode username
- The app will fetch your profile and stats
- Your username is saved for future launches
- Select Product > Archive in Xcode
- Click Distribute App
- Choose Copy App to get the .app file
- Move to
/Applicationsfolder
- Profile Picture with Colored Border
- Green border = Daily challenge completed ✅
- Red border = Daily challenge pending ⏳
- Number Badge - Shows problems solved today
Click the menu bar icon to see:
- Your profile with avatar and rank
- Status indicator (completed/pending)
- Three stat cards:
- Today - Problems solved today
- Total - All-time problems solved
- Streak - Current solving streak
- Daily Challenge Card
- Problem title
- Difficulty badge
- "Solve Problem" button (opens in browser)
- Refresh - Manually update data
- Change User - Switch LeetCode accounts
- Quit - Close the app
LeetCodeReminder/
├── LeetCodeReminderApp.swift # App entry point
├── Models/
│ └── LeetCodeModels.swift # Data models
├── Services/
│ └── LeetCodeService.swift # API integration
└── Views/
├── StatusBarController.swift # Menu bar controller
└── MenuBarView.swift # Main UI
- Uses LeetCode's GraphQL API
- Fetches:
- User profile & avatar
- Daily challenge
- Submission history
- Statistics & streaks
- Auto-refresh every 5 minutes
- Manual refresh available
- Persistent username storage using UserDefaults
// Current: 300 seconds (5 minutes)
Timer.scheduledTimer(withTimeInterval: 300, repeats: true)private var statusColor: Color {
return status.dailyProblemCompleted ? .green : .red
}- Check System Settings > General > Login Items
- Make sure the app has accessibility permissions
- Verify your LeetCode username is correct
- Check your internet connection
- LeetCode's API might be rate-limited
- Ensure network access is allowed
- Check App Sandbox permissions
- Avatar URL might be blocked
- ✅ Visual Status Indicator - Red/Green color system
- ✅ Daily Counter - See today's progress at a glance
- ✅ Profile Picture Icon - Personal touch in menu bar
- ✅ Enhanced Stats - More detailed metrics
- ✅ Better UI - Modern SwiftUI design
- ✅ Streak Tracking - Motivation to keep going
- Custom notification times
- Weekly/monthly statistics
- Problem difficulty breakdown chart
- Desktop widget support
- Multiple account support
- Custom themes
MIT License - feel free to modify and distribute!
Inspired by LeetBar by Marwan Hawari
Made with ❤️ for the LeetCode community
