TaskFlow
Inspiration
The idea for TaskFlow came from a personal frustration: the difficulty of staying organized. Like many people, I found ourselves juggling multiple tasks, missing deadlines, and struggling to prioritize effectively. Existing solutions felt either too simplistic or overly complex, leaving a gap between what's needed and what's available.
I wanted to build something that could help anyone—especially those who struggle with time management—plan their day intelligently, considering not just the tasks themselves, but also the natural rhythms of work: breaks, lunch, and the mental energy required to switch between different types of work.
The core concept is simple: tasks take time, time is finite, and planning ahead makes the difference between a productive day and an overwhelming one.
What it does
TaskFlow is a task management application that goes beyond simple to-do lists. It helps users:
- Manage tasks with full CRUD operations, filtering, sorting, and search
- Predict time estimates using intelligent analysis of task titles, descriptions, and tags
- Plan realistic workdays by generating optimized schedules that include breaks and lunch
- Reschedule dynamically when tasks take longer than expected—intelligently redistributing remaining work
- Visualize on a calendar with full monthly view and task indicators
- Stay notified about upcoming and overdue tasks with customizable alerts
- Switch languages between French and English seamlessly
The day planner generates realistic schedules like:
09:00 - 10:30 Task A (high priority)
10:30 - 10:40 Short Break
10:40 - 12:00 Task B (medium priority)
12:00 - 12:45 Lunch Break
12:45 - 14:15 Task C (high priority)
14:15 - 14:25 Short Break
14:25 - 15:30 Task D (medium priority)
How I built it
TaskFlow is a fully client-side Vue 3 application with no backend required.
Technology Stack
- Vue 3 with Composition API for reactive, maintainable code
- TypeScript for type safety throughout the codebase
- Pinia for centralized state management
- Vue Router for navigation between views
- localStorage for data persistence (works offline)
Architecture: Atomic Design
I followed the Atomic Design methodology for creating scalable, reusable components:
src/
├── components/
│ ├── atoms/ # Foundation elements
│ │ ├── AppButton.vue
│ │ ├── AppInput.vue
│ │ ├── AppSelect.vue
│ │ ├── StatusBadge.vue
│ │ ├── PriorityBadge.vue
│ │ ├── DurationDisplay.vue
│ │ └── TagChip.vue
│ ├── molecules/ # Composed patterns
│ │ ├── TaskCard.vue
│ │ ├── CalendarCell.vue
│ │ ├── TimeBlock.vue
│ │ ├── TaskFormModal.vue
│ │ ├── TaskDetailModal.vue
│ │ └── ConfirmDialog.vue
│ └── organisms/ # Feature components
│ ├── TaskList.vue
│ ├── CalendarGrid.vue
│ ├── DayPlannerPanel.vue
│ ├── NotificationPanel.vue
│ └── DayReschedulePanel.vue
├── composables/ # Reusable logic
│ ├── useCalendar.ts # i18n-aware calendar navigation
│ ├── useDayPlanner.ts # Workday generation algorithm
│ ├── useTimePrediction.ts # Duration estimation
│ ├── useNotifications.ts # Notification system
│ └── useDayRescheduler.ts # Dynamic rescheduling
├── stores/
│ └── task.store.ts # Task CRUD + planned slots
└── i18n/ # Internationalization
├── index.ts
├── fr.ts
└── en.ts
Key Features Implementation
Time Prediction Algorithm Analyzes task metadata to suggest realistic durations:
- Keywords in titles (e.g., "report" → longer tasks)
- Description length and complexity
- Tag patterns (e.g., "meeting" → shorter durations)
Day Planning Algorithm Generates optimal schedules by:
- Sorting tasks by priority
- Inserting breaks every 90 minutes
- Reserving lunch at midday
- Calculating realistic end times based on total work duration
Dynamic Rescheduling When users log actual time spent:
- Calculates overtime from completed tasks
- Distributes overrun proportionally across remaining tasks
- Regenerates schedule from current time
Challenges I ran into
Balancing simplicity and functionality — I wanted rich features but didn't want to overwhelm users. Finding the right UX took careful iteration.
Responsive design for notifications — The notification panel needed to work on both mobile and desktop without compromising either experience. I ultimately went with a full-screen modal approach on mobile.
State management complexity — With tasks, planned slots, time entries, notifications, and settings all needing to persist and sync, I had to carefully design the Pinia store to avoid redundancy.
i18n in composables — Making sure calendar labels and date formatting adapted to locale required careful integration between the i18n system and the calendar composable.
Accomplishments that I'am proud of
- Complete task management system with a cohesive design language
- Intelligent time prediction that actually provides useful estimates
- Realistic day planning that accounts for human factors (breaks, lunch)
- Dynamic rescheduling that helps users adapt when plans change
- Fully responsive interface that works on mobile and desktop
- Bilingual support (FR/EN) with seamless switching
- Offline-capable — no backend required, all data in localStorage
- Type-safe codebase with no type-check errors
What I learned
Atomic Design works well for Vue — The hierarchical component structure made code organization intuitive and reuse straightforward.
localStorage has limits — For larger datasets, I'd need IndexedDB or a backend, but for personal use, localStorage provides instant load times.
Composition API enables great composables — Extracting logic into composables (day planning, rescheduling) made components much cleaner.
Planning algorithms need real-world testing — The day planner worked in theory, but real usage revealed edge cases around lunch timing and end-of-day constraints.
What's next for TaskFlow
- Drag-and-drop reordering — Let users manually reorder tasks in the planner
- Recurring tasks — Support for daily, weekly, or monthly patterns
- Data export — Export tasks and schedules to JSON or CSV
- Multiple workspaces/projects — Organize tasks into larger categories
- Statistics dashboard — Track completion rates, time spent, productivity trends
- PWA support — Installable app with push notifications
- Collaborative features — Share schedules or assign tasks (would require backend)
- Dark/light theme toggle — Currently dark-only, but light mode could be added
TaskFlow was built as a personal project to solve real organization challenges and explore Vue.js architecture patterns.
Built With
- creao
- typescript
- vue
Log in or sign up for Devpost to join the conversation.