Workflow Pro is a next-generation task management application built with a sleek, modern aesthetic. Built on a robust offline-first architecture with Firebase cloud synchronization, real-time push notifications, and an AI-powered task assistant, it delivers seamless productivity wrapped in a fluid, animated UI.
Live Deployment → Ankit-8081.github.io/Task-Planner/
- Floating AI Panel: Tap the ✦ button to open a slide-in AI chat panel
- Goal → Roadmap: Tell the AI your goal (e.g. "I want to learn Java") and it generates a full structured task roadmap with dates, categories, and recurrence
- Preview Before Adding: Review all suggested tasks, remove any you don't want, then add all with one tap
- Multi-Turn Conversation: AI remembers the full session — ask it to modify, extend, or revise the roadmap
- Powered by Gemini 2.5 Flash: Free tier, no proxy needed, runs directly from the browser
- Recovery Email: Add and verify a real email in Profile → Account for account recovery
- OTP Verification: 6-digit OTP sent to your Gmail via EmailJS to verify your recovery email
- Forgot Password Flow:
- Enter username → OTP sent to verified recovery email
- Enter OTP → new password fields appear
- Set new password → automatically logged in
- Cloud Function Password Reset: Firebase Admin SDK securely updates password server-side
- Re-authentication: Current password required before changing password in Profile
- Post-Signup Nudge: Popup after signup encourages adding a recovery email immediately
- Slide-In Profile Panel: Full-featured settings panel that slides in from the right with smooth animation
- Avatar System: Auto-generated avatar from username initial shown in the top nav and panel header
- Change Password: Secure inline password change with re-authentication before applying
- Recovery Email Row: Shows ✓ Verified or ! Unverified badge with OTP verify flow inline
- Notification Controls:
- Toggle daily morning summary on/off
- Set your preferred daily summary time (defaults to 7:00 AM)
- Toggle 1-hour reminder on/off
- Toggle 10-minute reminder on/off
- App Preferences:
- Dark/Light mode toggle (synced with existing theme system)
- Week start day — Sunday or Monday (live-restructures bar graph instantly)
- Default task time — pre-fills time field when adding new tasks
- Account Actions: Logout with confirmation, delete account with password verification
- Cloud-Persisted Settings: All preferences saved to
users/{userId}/settingsin Firebase — sync across devices
- Repeat Options: No Repeat, Daily, Weekly, Monthly
- Auto-Spawn: On task completion, next occurrence is automatically created with the correct date
- Visual Badges: 🔁 daily, 📅 weekly, 🗓️ monthly shown on task cards
- UTC-Safe Date Logic: Uses local date parts (not
toISOString()) to avoid timezone shift bugs
- Configurable Time: Set your own briefing time (default 7:00 AM)
- Smart Body: Shows up to 5 tasks with times, then "…and N more"
- Dual Delivery: Fires from Firebase Cloud Function (app closed) and
setTimeout(app open) - Toggleable: Can be fully disabled from Profile
- Local-First Performance: All operations write to IndexedDB instantly for zero-latency interaction
- Background Sync: Automatic cloud synchronization when online, with smart queue management for offline changes
- Conflict Resolution: Intelligent merge strategy that preserves both local and server state
- Network Status Indicator: Real-time connection status displayed in the analytics header
- Sync Queue Management: Operations queue locally when offline, auto-process when reconnected
- IndexedDB Storage: Complete task state persistence in browser database
- Background Notifications: Receive task reminders even when the app is closed
- Intelligent Scheduling:
- 🌅 Daily Summary: Configurable morning briefing of all today's tasks
- ⏰ 1-Hour Warning: 55–65 min window before task is due
- ⚡ 10-Minute Warning: 8–12 min window before task is due
- Firebase Cloud Functions: Serverless backend checks tasks every 5 minutes
- Cross-Device Support: Notifications on desktop, mobile PWA, and tablets
- Timezone-Aware: Runs on Asia/Kolkata (UTC+5:30)
- VAPID Authentication: Secure web push protocol implementation
- Auto-Subscribe: Seamless push subscription on notification permission grant
- Stale Subscription Cleanup: Invalid subscriptions automatically removed (410/404 responses)
- Start → End Time: Set both start and end times per task with a clean
__:__ → __:__widget - Flexible Entry: Start only, end only, or both — all combinations supported
- Smart Display: Shows
(09:00 → 10:30),(start: 09:00), or(end: 10:30)on task cards
- Week Start Setting: Bar graph and weekly cards restructure instantly when week start is changed
- Week View Toggle: Switch between Today View and Week View with one click
- Circular Progress Indicators: Beautiful SVG-based completion circles for each day
- 7-Day Overview: Cards showing daily task completion for the configured week
- Interactive Task Lists: View and complete tasks directly from week cards
- Smooth Animations: Staggered card animations (100ms delay cascade), progress circles fill with cubic-bezier easing
- Real-Time Updates: Progress updates smoothly without page reload
- Category Filtering: Works seamlessly with category filters
- Time-Based Scheduling: Add specific start and end times to tasks
- Default Task Time: Set a preferred time that pre-fills when adding tasks (configurable in Profile)
- Overdue Detection: Tasks with passed times automatically move to "Overdue" column
- Three-Column Kanban:
- 🔴 Overdue: Past dates + today's tasks with passed times
- ⏳ Current: Today's tasks
- 📅 Incoming: Future tasks
- Auto-Archive System: Completed tasks hide from main view (shown in History)
- Intelligent Revert: Unticking a completed task instantly reverts it to active
- Historical Calendar: History button reveals all completed tasks grouped by date
- Weekly Fuel Levels: Custom-built bar graph with "Liquid Grow" animations
- Week Start Aware: Bar graph days reorder live (Sun→Sat or Mon→Sun) based on profile setting
- Dual-Layer Visualization:
- Transparent bars show planned tasks per day
- Gradient-filled bars display completed tasks
- Circular Progress Meter: Dynamic SVG-based completion percentage with smooth transitions
- Themed Scrollbar: Task list scrollbar inside day cards matches the primary green theme
- Dynamic Theme Toggle: Available both from top nav and Profile panel
- Stealth Mode (Dark): Deep-space aesthetic minimizing eye strain
- Command Mode (Light): High-clarity daylight interface with glassmorphism
- Persistent Theme: Auto-saves to localStorage across sessions
- Smooth Transitions: 0.3s animations on all color changes
- Multi-Device Synchronization: Instant updates across all devices
- Firebase Realtime Database: Asia-Southeast regional cluster
- Settings Sync: Profile preferences sync across devices via Firebase
- Firebase Auth Integration: Email/password authentication
- Password Change: Re-authenticates with current password before updating
- Account Deletion: Full data wipe from Firebase before account deletion
- Password Visibility Toggle: Built-in show/hide for secure entry
- Persistent Sessions: Auto-login after first authentication
- Four Mission Types: Work, Home, Personal, and Urgent
- Visual Color Coding:
- Work:
#0984e3(Blue) - Home:
#6c5ce7(Purple) - Personal:
#00b894(Teal) - Urgent:
#d63031(Red)
- Work:
- Category Filtering: Filter tasks across all views
- Full-Screen Experience: Runs without browser chrome after installation
- Service Worker: Handles caching and push notifications
- Offline Capable: Core functionality without internet
- Swipe Navigation: Swipe left/right to navigate weeks on mobile
Chrome detects the PWA manifest and shows a native "Install App" banner at the bottom of the screen automatically. Tap it and the app installs instantly.
If the banner was dismissed, tap the browser menu ⋮ → "Install App" to trigger it manually.
Apple does not support automatic PWA install prompts. Install manually:
- Open the site in Safari (not Chrome — Chrome on iOS cannot install PWAs)
- Tap the Share button ⬆️ at the bottom of the screen
- Scroll down and tap "Add to Home Screen"
- Confirm the name and tap "Add"
Note: Push notifications on iOS PWAs require iOS 16.4+ with the PWA installed to the home screen.
User Action → IndexedDB (Instant) → UI Update → Cloud Sync (Background)
↓
Sync Queue (if offline)
↓
Auto-Process (when online)
Firebase Cloud Functions (Every 5 min, Asia/Kolkata)
↓
For each user:
↓
┌─── Is it summary time window? ──► Send daily summary
│
└─── For each task due today with a time:
├── 55–65 min away? ──► "⏰ Task Due in 1 Hour"
└── 8–12 min away? ──► "⚡ Task Due in 10 Minutes"
User enters username
↓
App reads userIndex/{username} (public Firebase node)
↓
Finds verified recovery email
↓
EmailJS sends 6-digit OTP to Gmail
↓
User enters OTP → verified in memory
↓
User sets new password
↓
App writes passwordResets/{username} to Firebase DB
↓
Cloud Function (handlePasswordReset) picks it up
↓
admin.auth().updateUser() — secure server-side update
↓
App signs in automatically with new password
User describes goal
↓
Gemini 2.5 Flash generates JSON task roadmap
↓
App parses JSON → renders preview cards
↓
User removes unwanted tasks → Add all → Firebase
User changes setting in Profile Panel
↓
saveSetting(key, value) called
↓
userSettings object updated in memory
↓
Value written to Firebase: users/{uid}/settings/{key}
↓
Live effect applied immediately:
weekStart → updateBarGraphDayLabels() + renderTasks()
summaryTime → scheduleDailySummary() rescheduled
defaultTime → task time input pre-filled
notify toggles→ respected on next notification schedule
User Clicks "Week View" (or changes weekStart in Profile)
↓
Calculate week start using: (currentDay - weekStartDay + 7) % 7
↓
Reorder day labels: [Mon, Tue, Wed, Thu, Fri, Sat, Sun] if Monday
↓
For each of 7 days:
- Filter tasks by date
- Calculate completion percentage
- Render circular progress (SVG)
- Display themed scrollable task list
↓
Staggered animations (100ms cascade)
const indiaTime = new Date(now.toLocaleString('en-US', { timeZone: 'Asia/Kolkata' }));// Uses local date parts — NOT toISOString() — to avoid UTC timezone shift
const nextDate = new Date(year, month, day + 1); // for daily{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid",
"tasks": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
},
"pushSubscriptions": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
},
"userIndex": {
"$username": {
".read": true,
".write": "auth !== null"
}
},
"passwordResets": {
"$username": {
".read": true,
".write": true
}
}
}
}- Go to Firebase Console
- Create new project
- Enable Realtime Database (Asia-Southeast region)
- Enable Authentication → Email/Password
- Upgrade to Blaze Plan (pay-as-you-go, free tier sufficient for personal use)
- Go to aistudio.google.com → Get API Key → Create API key in new project
- In
index.html, replace:
const GEMINI_KEY = 'YOUR_GEMINI_API_KEY';- Sign up at emailjs.com → connect Gmail service
- Create email template with variables
{{to_email}},{{username}},{{otp}},{{time}} - Copy Service ID, Template ID, Public Key
- Update in
index.html:
emailjs.init("YOUR_PUBLIC_KEY");
await emailjs.send('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', { ... });npm install -g firebase-tools
firebase login
firebase init functions # select JavaScript, install deps
cd functions
npm install web-pushGenerate VAPID keys:
npx web-push generate-vapid-keysUpdate functions/index.js and index.html with your VAPID keys, then deploy:
firebase deploy --only functionsPush index.html, sw.js, manifest.json, and icons to your repo → enable Pages from Settings → Pages → main branch.
{
id: "1738764523000",
name: "Learn Java basics",
cat: "work", // work | home | personal | urgent
date: "2026-03-10",
startTime: "09:00", // optional
endTime: "10:30", // optional
recur: "weekly", // daily | weekly | monthly | null
completed: false,
completedAt: null,
notifSent: { "1hr": true, "10min": true }
}// Stored at: users/{userId}/settings
{
dailySummaryEnabled: true,
dailySummaryTime: "07:00",
notify1Hour: true,
notify10Min: true,
weekStart: 0, // 0 = Sunday, 1 = Monday
defaultTaskTime: "09:00",
username: "ankit"
}// Stored at: users/{userId}/pushSubscriptions/{subscriptionId}
{
endpoint: "https://fcm.googleapis.com/fcm/send/...",
expirationTime: null,
keys: { p256dh: "...", auth: "..." }
}// Stored at: users/{userId}/recoveryEmail
{
email: "user@gmail.com",
verified: true,
otp: null,
otpExpiry: null
}// Stored at: userIndex/{username}
{
uid: "firebase_user_uid",
recoveryEmail: "user@gmail.com",
verified: true
}| Element | Today View | Week View |
|---|---|---|
| Bar Graph | ✅ | ❌ |
| Category Filters | ✅ | ❌ |
| Add Task Input | ✅ | ❌ |
| 7-Day Cards | ❌ | ✅ |
| Kanban Board | ✅ | ❌ |
| Notification | When | Configurable |
|---|---|---|
| 🌅 Daily Summary | User-set time (default 7 AM) | ✅ |
| ⏰ 1-Hour Reminder | 55–65 min before task | ✅ |
| ⚡ 10-Min Reminder | 8–12 min before task | ✅ |
- Profile Panel: Slide-in from right, 0.35s cubic-bezier
- Week Card Cascade: 100ms staggered delays
- Progress Circles: 1.2s cubic-bezier fill animation
- Task Toggle: Smooth opacity/strikethrough
- Theme Switch: 0.3s color transitions
- Bar Graph Days: Instant reorder on week start change
| Service | Monthly Usage | Free Tier | Cost |
|---|---|---|---|
| Cloud Functions | ~8,640 calls | 125,000/month | ✅ FREE |
| Realtime Database | Read/Write ops | 100GB/month | ✅ FREE |
| Authentication | User sign-ins | Unlimited | ✅ FREE |
| Hosting (GitHub Pages) | Static files | Unlimited | ✅ FREE |
| Gemini 2.5 Flash | AI requests | 250/day | ✅ FREE |
| EmailJS | OTP emails | 200/month | ✅ FREE |
Estimated Monthly Cost: $0.00
New Features:
- ✅ AI Assistant: Gemini 2.5 Flash powered goal → task roadmap generator
- ✅ Forgot Password: Full OTP-based flow — username → OTP → new password → auto login
- ✅ Recovery Email: Add and verify real Gmail in Profile for account recovery
- ✅ EmailJS Integration: OTP emails sent directly to user's Gmail (free tier)
- ✅ Cloud Function Password Reset:
handlePasswordResetuses Firebase Admin SDK - ✅ Post-Signup Recovery Email Nudge: Popup encourages adding recovery email immediately
- ✅ Recurring Tasks: Daily, weekly, monthly with auto-spawn on completion
- ✅ Dual Time Widget: Start → End time picker on every task
- ✅ App Renamed: Mission Control Pro → Workflow Pro
Technical Improvements:
- ⚡
userIndexpublic node for O(1) username lookup without scanning all users - ⚡ Username normalized to lowercase in all index operations
- ⚡ UTC timezone bugs fixed — all date operations use local date parts
- ⚡ Best streak calculation scans all-time data (not just current month)
- ⚡ AI JSON parser handles truncated responses gracefully
- ✅ Profile Panel with avatar, password change, and all preferences
- ✅ Daily 7 AM Summary with configurable time
- ✅ Notification toggles (daily summary, 1-hour, 10-min)
- ✅ Week Start setting — bar graph and cards restructure instantly
- ✅ Default Task Time pre-fill
- ✅ Account deletion with password confirmation
- ✅ Firebase Cloud Functions — serverless push notification backend
- ✅ Web Push API with VAPID authentication
- ✅ Weekly Dashboard with circular SVG progress indicators
- ✅ Time-based task categorization (overdue/current/incoming)
- Basic task CRUD with Firebase Realtime Database
- Category filtering, dark/light theme
- Weekly bar graph analytics
- iOS PWA has limited background notification support (Apple restriction)
- Push notifications require installed PWA on mobile (not browser tabs)
- Service Worker requires HTTPS (GitHub Pages provides this)
- EmailJS free tier limited to 200 emails/month
- Gemini free tier limited to 250 AI requests/day
- Natural language task add ("meeting tomorrow at 3pm")
- Smart AI category/time suggestions
- Daily AI debrief at 9 PM
- Task priority levels
- Drag-and-drop reordering
- Export to CSV/JSON
- Shared workspaces
- Task notes and attachments
- Snooze notification feature
- Custom notification sound
- Task templates
| Name | Ankit Raj |
| Education | 1st Year B.Tech CSE at Galgotias University |
| Core Expertise | Backend Development, Cloud Functions, Real-Time Systems |
| YouTube | AQUAIMMORTAL Official Channel |
| GitHub | aquaimmortal7 |
Ankit Raj — @AQUAIMMORTAL
Project: github.com/aquaimmortal7/Task-Planner
Live Demo: aquaimmortal7.github.io/Task-Planner/
Report a Bug · Request a Feature
- Fork the repository
- Create your feature branch:
git checkout -b feature/AmazingFeature - Commit:
git commit -m 'Add AmazingFeature' - Push:
git push origin feature/AmazingFeature - Open a Pull Request
Licensed under the MIT License.
Built with 💚 by Ankit Raj
"Stop planning, start doing."
Powered by Firebase · Gemini AI · EmailJS · Web Push API · Service Workers
⭐ Star this repo if it helped you!