🚀 DSA Reminder
A comprehensive VS Code extension designed for DSA enthusiasts with user-friendly reminder setup and quick platform access.
✨ Key Features
🎯 User-Friendly Reminder Setup
- Simple Options: Choose between "Daily" or "Weekly"
- Visual Time Picker: Select from common times or enter custom time
- Weekday Selection: Easy weekday picker for weekly reminders
- Smart Conversion: Automatically converts to cron expressions
- Confirmation Dialog: Review settings before creating
- One-click access to coding platforms through Activity Bar
- Native VS Code tree view with platform descriptions
- Configurable platform list
- Theme-aware icons
⏰ Advanced Reminder System
- node-cron for robust scheduling
- Snooze functionality (15min, 1hr)
- Visual status indicators (enabled/disabled)
- Motivational messages with emojis
- Last triggered tracking
⚙️ Quick Settings Panel
- Direct settings access from within the extension
- Real-time stats (platforms, reminders, active jobs)
- Reset to defaults with confirmation
- Help and documentation links
📦 Installation
Method 1: Build and Install
# Clone or create the extension folder
mkdir dsa-reminder
cd dsa-reminder
# Copy all the files into the proper structure:
# src/extension.ts
# src/types.ts
# src/utils/cronConverter.ts
# src/utils/reminderManager.ts
# src/utils/reminderDialog.ts
# src/providers/DSAPanelProvider.ts
# src/providers/ReminderTreeProvider.ts
# src/providers/SettingsProvider.ts
# package.json
# tsconfig.json
# Install dependencies
npm install
# Compile TypeScript
npm run compile
# Package extension (install vsce if needed)
npm install -g vsce
vsce package
# Install in VS Code
code --install-extension dsa-reminder-1.0.0.vsix
Method 2: Development Mode
# Open in VS Code
code dsa-reminder
# Press F5 to launch Extension Development Host
🎮 Usage Guide
📝 Creating Reminders (User-Friendly Process)
Open DSA Reminder: Click DSA Reminder icon in Activity Bar or status bar
Add Reminder: Click +
button in "Practice Reminders" section
Follow the guided setup:
Step 1: Enter reminder name
📝 Enter a name for your reminder
Example: "Daily coding practice"
Step 2: Choose frequency
🔄 How often should this reminder trigger?
📅 Daily - Reminder every day at the same time
📆 Weekly - Reminder on a specific day of the week
Step 3: Select weekday (if weekly)
📅 Which day of the week?
📅 Monday, Tuesday, Wednesday, etc.
Step 4: Pick time
🕐 What time should the reminder trigger?
🕐 6:00 AM, 7:00 AM, 8:00 AM, 9:00 AM
🕐 12:00 PM, 1:00 PM, 5:00 PM, 6:00 PM
🕐 7:00 PM, 8:00 PM, 9:00 PM, 10:00 PM
⏰ Custom time... (HH:MM format)
Step 5: Confirm creation
✅ Create this reminder?
📝 Name: Daily coding practice
🔄 Frequency: Daily
🕐 Time: 7:00 PM
📋 Summary: Daily at 7:00 PM
🎯 Managing Reminders
- Toggle: Click reminder in tree view to enable/disable
- Remove: Right-click → Remove or use trash icon
- Status: Green clock/calendar = active, Gray circle = disabled
- Refresh: Click refresh icon to reload all reminders
- Open DSA Reminder from Activity Bar
- Navigate to "Coding Platforms" section
- Click any platform to open in browser
⚙️ Quick Settings
- Navigate to "Quick Settings" section in DSA Reminder panel
- Direct Settings Access: Click "Open Settings" to configure
- Extension Info: View current stats and status
- Reset Settings: Restore defaults with confirmation
- Help & Docs: Access documentation and support
- 🟠 LeetCode - Algorithm and data structure problems
- 🔵 Codeforces - DSA programming contests
- 🟤 CodeChef - Programming competitions and practice
- 🟢 AtCoder - Japanese DSA programming
- 🟢 HackerRank - Coding challenges and interview prep
- 🔴 TopCoder - Algorithm competitions and SRMs
⚙️ Configuration Examples
{
"dsa.platforms": [
{
"name": "Project Euler",
"url": "https://projecteuler.net",
"icon": "link-external",
"description": "Mathematical programming challenges"
}
]
}
Custom Messages
{
"dsa.motivationalMessages": [
"🔥 Time to code like a champion! 💪⚡",
"🚀 Every line of code makes you stronger! 💻✨"
]
}
🛠️ Technical Details
File Structure
src/
├── extension.ts # Main extension entry
├── types.ts # TypeScript interfaces & constants
├── providers/
│ ├── DSAPanelProvider.ts # Platform tree provider
│ ├── ReminderTreeProvider.ts # Reminder tree provider
│ └── SettingsProvider.ts # Settings tree provider
├── utils/
│ ├── cronConverter.ts # Config → Cron conversion
│ ├── reminderManager.ts # Reminder scheduling logic
│ └── reminderDialog.ts # User-friendly dialog flows
Cron Conversion Examples
// Daily at 7:00 PM → "0 19 * * *"
// Weekly Monday at 9:00 AM → "0 9 * * 1"
// Daily at 6:30 AM → "30 6 * * *"
Dependencies
- node-cron: Robust cron job scheduling (v4.2.0)
- @types/vscode: VS Code API types
- typescript: TypeScript compiler
🎯 VS Code Native Components Used
- ✅ TreeDataProvider - Platform, reminder, and settings views
- ✅ StatusBarItem - Bottom status bar integration
- ✅ QuickPick - User-friendly selection dialogs
- ✅ InputBox - Text input with validation
- ✅ ThemeIcon - Icons that adapt to themes
- ✅ Commands - Command palette integration
- ✅ Configuration - Native settings integration
- ✅ Context Menus - Right-click actions
- ✅ External URI - Safe link opening
📱 User Experience Features
🎨 Visual Indicators
- Green clock icon = Daily reminder active
- Green calendar icon = Weekly reminder active
- Gray circle icon = Reminder disabled
- Last triggered info in reminder description
🔔 Smart Notifications
- Multiple actions: Open Panel, Snooze 15min, Snooze 1hr, Dismiss
- Snooze functionality with automatic re-notification
- Motivational messages with emojis
- Modal confirmations for important actions
⚡ Keyboard Shortcuts
- Ctrl+Shift+P → Search "DSA Reminder" commands
- Activity Bar → Click DSA Reminder icon
- Status Bar → Click "DSA Reminder"
🐛 Troubleshooting
Reminders Not Working
- ✅ Check if reminder is enabled (green icon)
- 🔄 Use "Refresh Reminders" command in Quick Settings
- 🔍 Check Developer Console for errors (
Help > Toggle Developer Tools
)
- ⚙️ Verify time format is correct (HH:MM)
- 🌐 Ensure default browser is set
- 🔗 Check external link permissions in VS Code
- ⚙️ Verify platform URLs in settings
Extension Not Loading
- 📦 Check if extension is enabled in Extensions panel
- 🔄 Reload VS Code window (
Ctrl+Shift+P
→ "Reload Window")
- 🔍 Check if there are conflicting extensions
- 📋 View Output panel (
View > Output
) and select "DSA Reminder"
Settings Not Saving
- ⚙️ Check VS Code settings permissions
- 🔄 Try restarting VS Code
- 📁 Verify settings.json file permissions
🚀 Advanced Usage
Custom Cron Expressions
For power users, you can manually edit the dsa.reminders
setting:
{
"dsa.reminders": [
{
"id": "custom-1",
"name": "Weekend coding session",
"frequency": "weekly",
"time": "10:00",
"weekday": "6",
"cronExpression": "0 10 * * 6",
"enabled": true,
"created": "2024-01-01T00:00:00.000Z"
}
]
}
Batch Operations
Use Command Palette (Ctrl+Shift+P
):
DSA Reminder: Add Practice Reminder
- Create new reminder
DSA Reminder: Refresh Reminders
- Reload all reminders
DSA Reminder: Open DSA Reminder
- Focus extension panel
DSA Reminder: Open DSA Reminder Settings
- Direct settings access
Multiple Reminders Examples
📝 "Morning warm-up" → Daily at 8:00 AM
📝 "Lunch break coding" → Daily at 12:30 PM
📝 "Evening practice" → Daily at 7:00 PM
📝 "Weekend deep dive" → Every Saturday at 10:00 AM
📝 "Weekly review" → Every Sunday at 6:00 PM
🎓 Best Practices
Reminder Strategy
- Start Small: Begin with 1-2 daily reminders
- Be Consistent: Same time every day builds habits
- Realistic Goals: Don't over-schedule yourself
- Review Weekly: Adjust times based on your schedule
- Rotate Platforms: Try different platforms for variety
- Track Progress: Use platform-specific progress tracking
- Focus Areas: Choose platforms based on your weak areas
- Contest Schedule: Keep track of contest times
🤝 Contributing
Development Setup
# Clone repository
git clone <repo-url>
cd dsa-reminder
# Install dependencies
npm install
# Start development
npm run watch
# Test in VS Code
# Press F5 to launch Extension Development Host
Adding New Features
- New Platforms: Edit
dsa.platforms
in package.json
- Custom Messages: Add to
dsa.motivationalMessages
- New Frequencies: Extend types in
src/types.ts
- UI Improvements: Modify providers in
src/providers/
File Modification Guide
- Platform changes:
src/providers/DSAPanelProvider.ts
- Reminder logic:
src/utils/reminderManager.ts
- User dialogs:
src/utils/reminderDialog.ts
- Cron conversion:
src/utils/cronConverter.ts
- Settings panel:
src/providers/SettingsProvider.ts
- Main extension:
src/extension.ts
📄 License
MIT License - Feel free to modify and distribute!
🎯 Roadmap
Upcoming Features
- 📊 Progress Tracking: Track daily/weekly coding streaks
- 🏆 Achievements: Unlock badges for consistency
- 📈 Statistics: Visual charts of coding activity
- 🔗 Platform Integration: Direct API connections
- 📱 Mobile Sync: Cross-device reminder sync
- 🎨 Themes: Custom color schemes
- ⏰ Multiple Daily Reminders: Support for multiple times per day
- 📅 Calendar Integration: Sync with Google Calendar
- 🎯 Goal Setting: Set and track coding goals
- 🤝 Team Features: Share reminders with coding buddies
- 📝 Notes: Add notes to reminder notifications
🆘 Support
Getting Help
- 📖 Documentation: Read this README thoroughly
- 🐛 Issues: Report bugs on GitHub Issues
- 💡 Feature Requests: Suggest improvements
- 💬 Discussions: Join community discussions
Common Questions
Q: Can I have multiple reminders at the same time?
A: Yes! Create as many daily and weekly reminders as you need.
Q: Can I customize the motivational messages?
A: Yes! Edit the dsa.motivationalMessages
setting in VS Code.
Q: Will reminders work when VS Code is closed?
A: No, reminders only work when VS Code is running. This is by design for VS Code extensions.
Q: Can I add custom platforms?
A: Yes! Edit the dsa.platforms
setting to add your favorite coding sites.
Q: How do I backup my reminders?
A: Export your VS Code settings which include the dsa.reminders
configuration.
🎉 Get Started
- Install the extension following the installation guide above
- Open the DSA Reminder panel from the Activity Bar
- Add your first reminder using the user-friendly dialog
- Start coding consistently and watch your skills grow!
Happy Coding! 🚀💻✨
Built with ❤️ for the DSA community