A modern web-based task scheduling application that eliminates decision fatigue by intelligently distributing tasks across your week using randomization.
Add your tasks once, set their frequency, and let TaskSpin randomly distribute them across your week. No more deciding what to do when.
- Create tasks with name, description, and frequency
- Frequency options: Daily (7x/week), Once, Twice, Thrice (3x/week), or Custom (1-7x/week)
- Edit and delete tasks with inline editing
- Visual frequency badges and task counts
- Randomized task distribution using Fisher-Yates shuffle algorithm
- Daily tasks are always scheduled regardless of capacity (mandatory tasks)
- Capacity limits only apply to non-daily (randomized) tasks
- Spreads task occurrences across different days to avoid clustering
- Automatic schedule regeneration when a new week begins
- Manual "Re-Spin" to generate fresh randomized schedules
- Break down large goals into ordered subtask roadmaps
- One subtask active at a time, automatically injected into weekly schedule
- Sequential progression through pool subtasks
- JSON import/export for pools
- Separate list for ad-hoc or urgent one-off tasks
- Optional due dates with overdue tracking
- Independent from the weekly schedule
- Mark tasks complete with a single click
- Early completion: For non-daily tasks, completing early removes future occurrences for the week
- Progress tracking with visual progress bars (daily and weekly)
- Completion history preservation
- Installable on mobile and desktop (Add to Home Screen / browser install)
- Offline support via service worker caching
- Standalone app experience without browser chrome
- Automatic cache updates on new versions
- Daily Capacity: Set limits (0-20) for randomized tasks per day (daily tasks are excluded)
- Week Start Day: Choose any day (Monday-Sunday) as your week start
- Visual capacity distribution chart
- One-click reset to defaults
- Framework: Next.js 16 with TypeScript
- UI: React 19, Tailwind CSS 4, Framer Motion
- State Management: Zustand
- Database: Dexie (IndexedDB wrapper for local persistence)
- Forms: React Hook Form + Zod validation
- Node.js 18+
- npm, yarn, pnpm, or bun
# Clone the repository
git clone <repository-url>
cd taskspin
# Install dependencies
npm installnpm run devOpen http://localhost:3000 in your browser.
npm run build
npm startnpm run lint/taskspin
├── /app
│ ├── /components # React UI components
│ │ ├── /layout # Header, TabNavigation
│ │ ├── /tasks # TaskList, TaskForm, TaskCard, TaskEditModal
│ │ ├── /schedule # WeeklySchedule, DayColumn, ScheduledTaskItem, AllTasksView
│ │ ├── /pools # PoolList, PoolCard, PoolForm, PoolDetailModal
│ │ ├── /sidetasks # SideTaskList
│ │ └── /settings # SettingsPanel, CapacityConfig, WeekConfig, DataManagement
│ ├── /database # Dexie database setup
│ ├── /hooks # Custom React hooks
│ ├── /services # Core scheduling algorithm
│ ├── /store # Zustand state stores
│ ├── /types # TypeScript definitions
│ ├── page.tsx # Main page
│ ├── layout.tsx # Root layout
│ └── globals.css # Global styles & design system
├── /public
│ ├── manifest.json # PWA web app manifest
│ ├── sw.js # Service worker for offline support
│ └── ... # Icons and static assets
└── package.json
Five Zustand stores manage application state:
- taskStore: Task CRUD operations with database persistence
- settingsStore: User preferences (capacity limits, week configuration)
- scheduleStore: Weekly schedule generation, completion tracking, auto-regeneration
- poolStore: Task pool management with sequential subtask progression
- sideTaskStore: Ad-hoc side task management with due date tracking
All data is stored locally in the browser using IndexedDB via Dexie:
- tasks: User-created recurring tasks
- settings: Capacity and week configuration
- schedules: Generated weekly schedules (keeps last 4 weeks)
- pools: Task pools with ordered subtasks
- sideTasks: Ad-hoc tasks with optional due dates
- Daily tasks are placed on all 7 days (independent of capacity)
- Capacity is used exclusively for non-daily tasks
- Non-daily tasks are shuffled randomly
- Active pool subtasks are injected as one-time entries
- Tasks are distributed across eligible days, preferring variety
- Conflict avoidance spreads same-task occurrences across different days
Premium dark UI theme:
- Background: Pure black to dark gray gradients
- Accent: Vibrant pink (#FF2D6F)
- Typography: Oswald (headings) + Inter (body)
- Animations: Smooth Framer Motion transitions
Default capacity settings (for non-daily tasks only):
- Monday-Friday: 5 randomized tasks/day
- Saturday-Sunday: 3 randomized tasks/day
- Default week start: Monday
Daily tasks are always scheduled on all 7 days regardless of these limits. All settings can be customized in the Settings tab.
Works in all modern browsers with IndexedDB and service worker support:
- Chrome, Firefox, Safari, Edge (latest versions)
- Installable as a PWA on Android, iOS, and desktop
[Add your license here]
