A minimal daily task manager built with SwiftUI and SwiftData on iOS 26+.
| Phase | Version | Duration | Status | Focus |
|---|---|---|---|---|
| Phase 0 | N/A | Completed | ✅ Complete | Foundation & Planning |
| Phase 1 | v0.1.0 | 2-3 weeks | 🚧 In Progress | MVP Development |
| Phase 2 | v0.5.0 | 1 week | 📋 Pending | CloudKit Sync & Calendar |
| Phase 3 | v0.8.0 | 1 week | 📋 Pending | Notifications & Settings |
| Phase 4 | v1.0.0 | 1-2 weeks | 📋 Pending | Polish & App Store Launch |
| Phase 5 | v2.0.0 | 2-3 weeks | 📋 Planned | User Accounts & Cloud (BaaS) |
| Post-Launch | v2.1+ | Ongoing | 📋 Planned | Iterations & Expansion |
Target Date: February 8, 2026
Branch: main
Git Tag: foundation/phase-0
- Project Brief & Vision Document
- Requirements Specification (functional & technical)
- Architecture Design (MVVM with SwiftData)
- Repository Structure & Project Organization
- Git Workflow & Branch Strategy Documentation
- Tech Stack Confirmation (iOS 26+, SwiftUI, SwiftData, MVVM)
- Development Environment Setup Guide
Completion Notes:
- Foundation work complete as of February 8, 2026
- Ready to begin Phase 1 MVP Development
Version: v0.1.0
Duration: 2-3 weeks
Branch: develop
Git Tag: v0.1.0 (on merge to master)
Target Completion: Early March 2026
The MVP focuses on the core 1-3-5 daily task management experience with four regions and day rollover.
Objective: Establish persistent data storage and business logic foundation
-
SwiftData Setup & Configuration
- App delegate/SwiftData container initialization
- Model container setup with migration strategy
- Error handling & data persistence validation
-
Task Model Definition
- CharstackTask @Model class with properties: identifier, title, notes, region, bucket, status, plannedDate, sortOrder, createdAt, updatedAt, completedAt
- Codable-ready raw value enums for future sync/export
- Sort descriptors for efficient queries
-
Enums & Constants
- Region enum (Morning, Afternoon, Evening, Backlog)
- TaskStatus enum (todo, inProgress, done, deferred)
- TaskBucket enum (must, complementary, misc, none)
- Constants file for colors, spacing, animations (deferred to Week 2 — UI layer)
-
TaskService (Repository Pattern)
- CRUD operations (create, read, update, delete tasks)
- Query methods (fetch by date, region, status, backlog, single task by ID)
- 1-3-5 constraint validation (max 1, 3, 5 tasks per region)
- Day rollover batch operation (moves incomplete past tasks to backlog)
-
Unit Tests (38 tests, all passing)
- CharstackTask model tests (initialization, accessors, completion, deferral, overdue)
- Region, TaskBucket, TaskStatus enum tests
- TaskService constraint validation tests (per region, per day, completed exclusion)
- Date handling tests (startOfDay, endOfDay, isSameDay, addingDays)
- SwiftData integration tests (in-memory container, CRUD round-trips)
-
1-3-5 Constraint Engine
- Validation logic preventing > 1 Must task per region
- Validation logic preventing > 3 Complementary tasks per region
- Validation logic preventing > 5 Misc tasks per region
- Backlog is unconstrained (no limit)
- Error feedback for constraint violations (TaskServiceError.bucketFull)
Deliverables:
- ✅ Stable SwiftData schema with no migration issues
- ✅ TaskService fully tested and documented
- ✅ Constraint engine preventing invalid states
Objective: Build the main interface showing today's tasks by region
-
TodayView (Main Tab)
- Navigation structure setup (NavigationStack + AppCoordinator)
- Safe area handling for dynamic island
- Scroll view with four region cards
- Empty state for completed day
- Daily progress bar with completion count
- Rollover banner showing deferred task count
-
RegionCard Component
- Region name header with icon and visual hierarchy
- Task count badge (e.g., "2/3")
- Visual distinction between regions (per-region colors)
- Must-do task title display (or empty placeholder)
- Bucket fill counts (Complementary and Misc)
- Completion progress bar
-
RegionFocusView (Detail)
- Expanded view of a single region grouped by bucket sections
- Full task list for region (Must-Do, Complementary, Misc)
- Add task via QuickAddBar
- Edit (sheet), delete (swipe/context), move (context menu) actions
- Navigation back to today view
- Empty bucket placeholders
- Backlog view with ungrouped task list + move-to-region menu
-
TaskRow Component
- Checkbox for completion state with symbol transition
- Task title display with strikethrough on completion
- Bucket indicator badge (color-coded)
- Notes preview (1-line truncated)
- Swipe actions (complete, delete)
- Context menu (edit, move, delete)
-
Quick Add Form
- Title input field with keyboard submit
- Bucket type picker (menu-based)
- Add button with validation (disabled when empty)
-
ViewModels
- TodayViewModel (manages today's task state, loading, rollover, daily progress)
- RegionFocusViewModel (single region CRUD, bucket queries, edit sheet state)
- @Observable pattern with @MainActor (Swift 6.0)
-
UI Tests & Preview Integration
- SwiftUI previews for all components
- PreviewData helper with in-memory container and sample tasks
- Multiple preview variants (active/completed tasks, empty/full regions)
-
Theme System
- Centralized colors (semantic, region-specific, bucket-specific)
- Typography scale (largeTitle through footnote)
- Spacing and corner radius constants
Deliverables:
- ✅ Fully functional today view with all four region cards
- ✅ Add/edit/delete/complete/move task flow working end-to-end
- ✅ All UI components tested in previews
- ✅ Lightweight theme system for consistent styling
Objective: Complete core workflow with overflow handling and daily refresh
-
BacklogView (Tab)
- List of incomplete tasks from previous days
- Date grouping ("Today", "Yesterday", "This Week", "Older")
- Move-to-region action with bucket selection
- Edit, delete, completion toggle via context menu and swipe
- Filter by date created (deferred to Phase 2)
- Sort options (date, region, priority) (deferred to Phase 2)
- Bulk actions (select multiple, move to today) (deferred to Phase 2)
-
Move Gesture/Action
- Context menu to move tasks to region with bucket selection
- Constraint validation before acceptance (1-3-5 enforcement)
- Error feedback if region is full (alert display)
- Drag-and-drop gesture (deferred to Phase 4 polish)
- Success animation/haptic feedback (deferred to Phase 4 polish)
-
Day Rollover (integrated into TaskService)
- Triggered on app launch via
.taskmodifier - Triggered on foreground return via
ScenePhaseobserver in RootView - Mark incomplete morning/afternoon/evening tasks as deferred
- Move deferred tasks to backlog automatically
- Preserve completed tasks in history
- Idempotent operation (safe to call multiple times)
- User-configurable rollover time (deferred to Phase 3 Settings)
- Triggered on app launch via
-
Empty States
- "No tasks for today" message with CTA (EmptyStateView)
- "Backlog is empty" message (EmptyStateView)
- Consistent empty state component (Shared/Components/EmptyStateView.swift)
- "Day complete" celebration view (deferred to Phase 4 polish)
-
Persistence & App Lifecycle
- Handle app backgrounding/foregrounding (ScenePhase observer)
- Trigger day rollover check on app launch
- Track last rollover date to prevent redundant calls
- Handle edge cases (time zone changes, device sleep) (deferred)
-
Navigation
- TabView with Today and Backlog tabs
- AppCoordinator updated with Tab enum and selectedTab state
- NavigationStack per tab for proper navigation hierarchy
-
Shared Components
- EmptyStateView extracted to Shared/Components/
- TaskEditSheet extracted from RegionFocusView to Shared/Components/
-
Unit Tests (86 tests, all passing — up from 38)
- BacklogDateGroupTests (7 tests) — date grouping, sorting, display names
- TaskServiceTests — 3 new grouped backlog tests
Deliverables:
- ✅ Complete daily workflow working end-to-end
- ✅ Backlog populated with yesterday's incomplete tasks via date-grouped sections
- ✅ Day rollover functioning reliably on launch and foreground return
- ✅ TabView navigation with Today and Backlog tabs
Before tagging v0.1.0, all items must be complete:
- All Phase 1 weekly deliverables implemented
- Unit test coverage ≥ 80% for data layer
- UI responsive on iPhone 14, 15, 16 (plus SE)
- No console warnings or errors
- All memory leaks addressed (Xcode instruments verification)
- Accessibility pass (VoiceOver testing, Dynamic Type support)
- Dark mode fully functional
- Manual QA sign-off on:
- Add task flow (all regions)
- Edit/delete operations
- 1-3-5 constraint enforcement
- Day rollover accuracy
- Backlog move functionality
- App launch & background/foreground transitions
- Documentation updated (README, API docs for TaskService)
- Code reviewed and merged to develop branch
Version: v0.5.0
Duration: 1 week
Branch: develop
Git Tag: v0.5.0
Target Completion: Mid-March 2026
The following properties were intentionally omitted from the Phase 1 CharstackTask model to keep the MVP simple. They are planned as additive schema changes in Phase 2:
-
autoCarry: Bool— Task-level override to automatically roll forward to the same region next day instead of moving to Backlog -
isSticky: Bool— Force task to top of its region regardless of sort order -
expiresAt: Date?— Optional expiration date after which the task is auto-deleted from Backlog
Current MVP rollover moves ALL incomplete active-region tasks to Backlog unconditionally.
- Add iCloud capability to Xcode project
- Add Background Modes capability (Remote Notifications)
- Ensure all SwiftData model properties have defaults or are optional
- Remove any @Attribute(.unique) constraints (CloudKit incompatible)
- Test sync between two devices with same Apple ID
- Handle CloudKit sync errors gracefully
- Add sync status indicator in UI (optional)
-
Calendar View Tab
- Month view with task count badges
- Tap date to view tasks for that day
- Visual indication of "completed days"
- Navigation to past/future weeks
-
Historical Task View
- View all tasks (completed & incomplete) for selected date
- Read-only for past dates
- Completion time stamps
- Statistics: tasks completed, streak, weekly summary
-
CalendarViewModel
- Fetch task counts for all dates
- Handle date range queries efficiently
- Compute completion metrics
-
Testing
- Calendar view loads correct task counts
- Historical queries work across month boundaries
- Performance acceptable for 6+ months of data
Version: v0.8.0
Duration: 1 week
Branch: develop
Git Tag: v0.8.0
Target Completion: Late March 2026
-
Settings View Tab
- Notifications toggle
- Daily reminder time picker
- Regional reminder toggle (on/off per region)
- Theme selection (light, dark, system)
- Day rollover time configuration
- About & version info
-
Local Notifications
- Daily reminder at configured time
- Notification for overdue tasks (evening region)
- Request user permission flow
- Handle system notification settings
-
SettingsViewModel
- UserDefaults persistence for settings
- Notification scheduling/cancellation
- Observable settings updates
-
Testing
- Settings persist across app restarts
- Notifications schedule and fire correctly
- Permission flow works on first launch
Version: v1.0.0
Duration: 1-2 weeks
Branch: develop → main
Git Tag: v1.0.0
Target Completion: Early-mid April 2026
-
Animations & Transitions
- Smooth region expand/collapse animations
- Task completion checkmark animation
- Page transitions between tabs
- Loading state animations
-
Visual Design
- Consistent color palette (primary, secondary, accent)
- Typography hierarchy reviewed
- Spacing/padding audit
- Icon consistency (SF Symbols)
-
Interaction Design
- Haptic feedback on task completion
- Long-press context menus (iOS 15+ style)
- Confirmation dialogs for destructive actions
- Keyboard shortcuts on iPad
-
VoiceOver Testing
- All interactive elements announced correctly
- Logical navigation order
- Gestures communicated clearly
-
Dynamic Type Support
- All text scales properly (7-point to extra large)
- Layout adjustments for large text
- No text truncation issues
-
Color & Contrast
- WCAG AA compliance for all text
- No color-only information
- High contrast mode support
-
Performance Testing
- App launch time < 2 seconds
- Smooth scrolling (60 FPS)
- Memory usage < 100 MB baseline
- Battery impact minimal
-
Compatibility Testing
- iOS 26.0 through latest version
- All iPhone models (SE to Pro Max)
- iPad support verified
- iPadOS optimizations (split view, keyboard)
-
Regression Testing
- All Phase 1-3 features still functional
- Edge cases (low storage, no network, etc.)
- Extended use (24+ hours of continuous running)
-
App Metadata
- App name, subtitle, description finalized
- Keywords researched and optimized
- Privacy policy drafted & linked
- Support URL and contact email
-
Screenshots & Preview Video
- 5-7 screenshots for each device (iPhone 6.7", 6.1", 5.5")
- Localized screenshots (English at minimum)
- Optional: preview video (15-30 seconds)
-
Build Artifacts
- App icons (all required sizes, rounded corners)
- Launch screen finalized
- App thinning configured (bitcode, asset catalogs)
-
Documentation
- User guide / help documentation
- Privacy policy
- Terms of service (if applicable)
- CHANGELOG for v1.0.0
- Internal architecture documentation
-
TestFlight Beta
- Internal testing group (team members)
- External testing group (5+ beta testers minimum)
- Feedback collection & critical bug fixes
- Beta duration: 1 week minimum
-
Final Review
- App review guidelines checklist
- No rejected categories (gambling, alcohol, etc.)
- Privacy policy page created and linked (GitHub Pages or similar)
- App privacy nutrition labels filled in App Store Connect
- Age rating questionnaire completed
- Demo account credentials prepared (if login required at this version)
- App review notes prepared
-
Submission & Monitoring
- Submit build to App Store Connect
- Monitor review queue
- Address any App Review rejections
- Publish on approval
- Git main branch with all Phase 1-4 code
- Version 1.0.0 tagged and released
- Signed .ipa build archived
- Release notes published (GitHub, website)
- Launch announcement ready
Version: v2.0.0
Duration: 2-3 weeks
Branch: develop
Git Tag: v2.0.0
Target Completion: TBD (post App Store launch)
- Integrate Backend-as-a-Service (Firebase or Supabase — TBD)
- Implement Sign in with Apple (App Store Guideline 4.8 — mandatory if any third-party login)
- Implement Google Sign-In
- Build login/signup flow UI
- Handle auth state persistence and token refresh
- Provide demo account for App Store review (Guideline requirement)
- Account settings screen (profile, email, linked providers)
- Account deletion flow — Settings > Account > Delete Account (Guideline 5.1.1(v))
- Full data deletion on account delete (not just deactivation)
- Revoke Sign in with Apple tokens on deletion (REST API)
- Warn about active subscriptions before deletion
- Confirmation dialog with clear language
- Data deletion confirmation notification
- Sync task data to BaaS cloud database
- Conflict resolution strategy (last-write-wins or merge)
- Offline-first with background sync
- Sync status indicator in UI
- Migration path from CloudKit-only to BaaS
- Privacy policy — accessible in-app AND App Store Connect
- Privacy nutrition labels — accurate data type declarations
- SDK privacy manifests for all third-party SDKs
- Minimal data collection during registration (Guideline 5.1.1)
- GDPR compliance considerations
- User can sign in with Apple or Google
- User can delete their account and all data from within the app
- Data syncs across devices via BaaS
- Privacy policy accessible in Settings and App Store
- Demo account works for App Store reviewers
- All App Store Review Guidelines satisfied
Tag: v2.0.0
Duration: 1-2 weeks Focus: User feedback & polish based on early app store reviews
-
Smart Task Suggestions
- Recurring task templates
- Suggested tasks based on history
- Quick templates (e.g., "Exercise", "Review", "Plan")
-
Export & Sharing
- Export daily/weekly summary as PDF
- Share completion stats
- CSV export for analysis
-
Minor UX Improvements
- Keyboard shortcuts reference (? key)
- Swipe gesture tutorials (onboarding)
- Task search across all regions/backlog
Duration: 2-3 weeks Focus: Advanced task management for committed users
-
Task Subtasks/Checklists
- Add subtasks within a task
- Partial completion tracking
- Subtask progress indicator
-
Task Tags & Filtering
- Add tags to tasks (e.g., "work", "health", "personal")
- Filter tasks by tag in calendar view
- Tag management & cleanup
-
Repeat/Recurring Tasks
- Create recurring tasks (daily, weekly, monthly)
- Smart snooze (defer by hours/days)
- Recurring task templates
-
Custom Regional Labels
- Rename regions (e.g., "Urgent", "Important", "Nice-to-have")
- Reorder regions
- Custom colors per region
Duration: 2-3 weeks Focus: Data visualization and personal productivity metrics
-
Completion Dashboard
- Weekly completion rate (%)
- Monthly trends graph
- Best day/time for task completion
- Region-specific completion rates
-
Streak Tracking
- Current daily completion streak
- Longest streak ever
- Streak preservation logic
- Streak notifications/badges
-
Personal Reports
- Weekly summary email (opt-in)
- Monthly recap with insights
- Comparison to personal averages
-
Data Export for Analysis
- JSON export of all tasks & metadata
- Integration with personal data tools
Duration: 3-4 weeks Focus: Multi-platform and ecosystem integration
-
iPadOS App
- Optimized iPad layout (split view, multi-window)
- Keyboard shortcuts (full list)
- Trackpad/mouse support
-
macOS Companion App
- Mac version of Charstack
- CloudKit sync between devices
- Menu bar widget
-
iCloud Sync (Optional)
- Multi-device sync via CloudKit
- Automatic backup
- Conflict resolution
-
Siri Shortcuts Integration
- Shortcuts for common actions (add task, check today's tasks)
- Voice command support
- Automation triggers
-
Home Screen Widgets
- Small widget: today's task count
- Medium widget: region summary
- Large widget: all regions at a glance
- Interactive widgets (check off tasks)
Use this checklist for each major release:
- Feature freeze: no new features, only bug fixes
- Automated test suite passes 100%
- Code review complete for all changes
- Dependency updates finalized
- Xcode linting passes (SwiftLint configured)
- Memory leak detection run (Instruments)
- Create release branch from develop
- Update version number (Info.plist, Xcode build settings)
- Update CHANGELOG with all changes
- Build archive and verify signing
- TestFlight build uploaded & distributed
- Internal testers report no critical issues
- External testers feedback reviewed
- Performance benchmarks acceptable
- Accessibility audit completed
- Critical bugs fixed and rebuilt
- Final build tested on device
- All assets in place (icons, screenshots, previews)
- App Store metadata complete and reviewed
- Submit build to App Store Connect
- Monitor App Review for rejection
- Monitor App Store reviews (daily for first week)
- Check crash logs via Xcode Organizer
- Respond to user feedback
- Plan hotfix if critical issues arise
- Announce release on social/website
- Branches:
develop(default, active work) ← feature branches.master(stable releases) ← develop. - Merge strategy: Squash-merge for feature→develop. Merge commit for develop→master.
- Commits: Conventional commits (
feat:,fix:,docs:,chore:,refactor:,test:) - Git Tags:
developreleases:vX.Y.Z-dev(patch bump, prerelease)masterreleases:vX.Y.0(minor bump, full release)
- CI checks required: Build & Test, Swift Lint & Format, Conventional Commit Title
- Testing: Aim for ≥80% code coverage; prioritize data layer
- Documentation: Maintain README, API docs, and architecture diagrams
- Review: All merges to develop and master require PR with passing checks
Last Updated: February 13, 2026 Maintained By: Bahadır Gezer