Add comprehensive project plan for Bevy Tasks
This plan outlines the development of a local-first, cross-platform tasks application inspired by Google Tasks. Key features: - Cross-platform support (Windows, Linux, macOS, iOS, Android) - Fast startup time (< 500ms target) - Local file storage with optional WebDAV sync - Built with Bevy for future game-like UX polish - Phased development roadmap from MVP to advanced features The plan includes architecture design, technology stack, performance strategies, and detailed feature roadmap across 5 development phases. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
a5351bd8e8
commit
aefcae5516
412
PLAN.md
Normal file
412
PLAN.md
Normal file
|
|
@ -0,0 +1,412 @@
|
|||
# Bevy Tasks - Project Plan
|
||||
|
||||
## Vision
|
||||
|
||||
A local-first, cross-platform tasks application inspired by Google Tasks, built with Bevy for high performance and future game-like UX polish. The application will launch near-instantly on all platforms and support both local file storage and WebDAV synchronization.
|
||||
|
||||
## Core Principles
|
||||
|
||||
1. **Local-First**: All data is stored locally by default, with optional sync
|
||||
2. **Performance**: Sub-second cold start time on all platforms
|
||||
3. **Cross-Platform**: Native support for Windows, Linux, macOS, iOS, and Android
|
||||
4. **Privacy**: User data stays on their devices and chosen storage locations
|
||||
5. **Future-Proof**: Built on Bevy to enable advanced UI/UX features later
|
||||
|
||||
## Target Platforms
|
||||
|
||||
- **Desktop**: Windows, Linux, macOS
|
||||
- **Mobile**: iOS, Android
|
||||
|
||||
## Technology Stack
|
||||
|
||||
### Core Framework
|
||||
- **Bevy 0.16+**: Game engine providing cross-platform rendering and ECS architecture
|
||||
- **bevy_ui**: For immediate UI components
|
||||
- **bevy_egui**: Optional for more complex UI widgets (if needed)
|
||||
|
||||
### Data Storage Layer
|
||||
- **serde**: Serialization/deserialization
|
||||
- **serde_json** or **rmp-serde**: JSON or MessagePack for task data
|
||||
- **directories**: Cross-platform path handling
|
||||
- **tokio**: Async runtime for I/O operations
|
||||
- **reqwest** + **dav-client**: WebDAV support
|
||||
|
||||
### Mobile Platform Support
|
||||
- **bevy_mobile_example**: Reference for iOS/Android builds
|
||||
- **cargo-apk**: Android builds
|
||||
- **xcode**: iOS builds
|
||||
|
||||
### Performance Optimization
|
||||
- **Lazy loading**: Load only visible data
|
||||
- **Asset preprocessing**: Minimize runtime overhead
|
||||
- **Minimal dependencies**: Keep binary size small
|
||||
- **Release optimizations**: LTO, strip symbols
|
||||
|
||||
## Architecture
|
||||
|
||||
### Data Model
|
||||
|
||||
```
|
||||
Task {
|
||||
id: Uuid,
|
||||
title: String,
|
||||
notes: Option<String>,
|
||||
status: TaskStatus, // NotStarted, InProgress, Completed
|
||||
due_date: Option<DateTime>,
|
||||
created_at: DateTime,
|
||||
updated_at: DateTime,
|
||||
parent_id: Option<Uuid>, // For subtasks
|
||||
position: i32, // For ordering
|
||||
}
|
||||
|
||||
TaskList {
|
||||
id: Uuid,
|
||||
title: String,
|
||||
tasks: Vec<Task>,
|
||||
created_at: DateTime,
|
||||
updated_at: DateTime,
|
||||
position: i32,
|
||||
}
|
||||
|
||||
AppConfig {
|
||||
storage_type: StorageType, // Local or WebDAV
|
||||
local_path: Option<PathBuf>,
|
||||
webdav_url: Option<String>,
|
||||
webdav_credentials: Option<Credentials>,
|
||||
theme: Theme,
|
||||
last_sync: Option<DateTime>,
|
||||
}
|
||||
```
|
||||
|
||||
### Module Structure
|
||||
|
||||
```
|
||||
bevy-tasks/
|
||||
├── src/
|
||||
│ ├── main.rs # Entry point
|
||||
│ ├── app.rs # Bevy app setup
|
||||
│ ├── data/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── models.rs # Task, TaskList, AppConfig
|
||||
│ │ ├── repository.rs # Data access abstraction
|
||||
│ │ └── storage/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── local.rs # Local file storage
|
||||
│ │ └── webdav.rs # WebDAV client
|
||||
│ ├── ui/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── screens/
|
||||
│ │ │ ├── task_list.rs
|
||||
│ │ │ ├── task_detail.rs
|
||||
│ │ │ └── settings.rs
|
||||
│ │ └── components/
|
||||
│ │ ├── task_item.rs
|
||||
│ │ ├── task_input.rs
|
||||
│ │ └── list_selector.rs
|
||||
│ ├── systems/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── input.rs # Input handling
|
||||
│ │ ├── sync.rs # Background sync
|
||||
│ │ └── navigation.rs # Screen navigation
|
||||
│ └── resources/
|
||||
│ ├── mod.rs
|
||||
│ └── app_state.rs # Global state management
|
||||
├── assets/
|
||||
│ ├── fonts/
|
||||
│ └── icons/
|
||||
├── Cargo.toml
|
||||
└── PLAN.md
|
||||
```
|
||||
|
||||
### Storage Strategy
|
||||
|
||||
#### Local Storage
|
||||
- **Location**: Platform-specific app data directory
|
||||
- Windows: `%APPDATA%/bevy-tasks/`
|
||||
- Linux: `~/.local/share/bevy-tasks/`
|
||||
- macOS: `~/Library/Application Support/bevy-tasks/`
|
||||
- iOS: App sandbox documents directory
|
||||
- Android: Internal storage app directory
|
||||
- **Format**: JSON files (human-readable, debuggable)
|
||||
- **Structure**:
|
||||
```
|
||||
data/
|
||||
├── config.json
|
||||
├── lists/
|
||||
│ ├── {list-id-1}.json
|
||||
│ └── {list-id-2}.json
|
||||
└── metadata.json
|
||||
```
|
||||
|
||||
#### WebDAV Sync
|
||||
- **Conflict Resolution**: Last-write-wins with timestamp
|
||||
- **Sync Strategy**:
|
||||
- On app start (if connected)
|
||||
- On background timer (every 5 minutes when active)
|
||||
- On task modification (debounced)
|
||||
- **Offline Support**: All operations work offline, sync when online
|
||||
|
||||
### Performance Strategy
|
||||
|
||||
#### Fast Startup Requirements
|
||||
1. **Minimal initialization**: Load only essential systems
|
||||
2. **Lazy UI rendering**: Render visible items first
|
||||
3. **Background loading**: Load non-critical data after first frame
|
||||
4. **Asset optimization**: Embed minimal assets, load rest async
|
||||
5. **Incremental parsing**: Stream large data files
|
||||
|
||||
#### Startup Sequence
|
||||
1. Initialize Bevy minimal plugins (< 50ms)
|
||||
2. Load config from disk (< 20ms)
|
||||
3. Render splash/empty state (first frame < 100ms)
|
||||
4. Load task lists in background
|
||||
5. Render tasks as they load
|
||||
6. Start WebDAV sync (if configured)
|
||||
|
||||
#### Memory Optimization
|
||||
- Use `Vec` instead of `HashMap` for small collections
|
||||
- Limit rendered tasks to visible viewport
|
||||
- Unload non-visible screens from memory
|
||||
|
||||
## Feature Roadmap
|
||||
|
||||
### Phase 1: MVP (Weeks 1-4)
|
||||
**Goal**: Basic local-first tasks app on desktop platforms
|
||||
|
||||
**Features**:
|
||||
- [ ] Single task list
|
||||
- [ ] Create, read, update, delete tasks
|
||||
- [ ] Mark tasks as complete/incomplete
|
||||
- [ ] Local file storage (JSON)
|
||||
- [ ] Basic UI (list view)
|
||||
- [ ] Desktop support (Windows, Linux, macOS)
|
||||
|
||||
**Deliverables**:
|
||||
- Functional desktop app
|
||||
- Data persists across sessions
|
||||
- Sub-second startup time
|
||||
|
||||
### Phase 2: Multiple Lists & Organization (Weeks 5-6)
|
||||
**Goal**: Feature parity with basic Google Tasks functionality
|
||||
|
||||
**Features**:
|
||||
- [ ] Multiple task lists
|
||||
- [ ] Switch between lists
|
||||
- [ ] Subtasks support
|
||||
- [ ] Due dates
|
||||
- [ ] Task notes/descriptions
|
||||
- [ ] Reorder tasks (drag & drop)
|
||||
- [ ] Move tasks between lists
|
||||
|
||||
**Deliverables**:
|
||||
- Full task management functionality
|
||||
- Improved UI/UX
|
||||
|
||||
### Phase 3: WebDAV Sync (Weeks 7-9)
|
||||
**Goal**: Enable cross-device synchronization
|
||||
|
||||
**Features**:
|
||||
- [ ] WebDAV client implementation
|
||||
- [ ] Settings screen for storage configuration
|
||||
- [ ] Sync status indicators
|
||||
- [ ] Conflict resolution
|
||||
- [ ] Offline mode with queue
|
||||
- [ ] Manual sync trigger
|
||||
|
||||
**Deliverables**:
|
||||
- Working WebDAV sync
|
||||
- Reliable conflict resolution
|
||||
- Seamless offline/online transitions
|
||||
|
||||
### Phase 4: Mobile Support (Weeks 10-14)
|
||||
**Goal**: Deploy to iOS and Android
|
||||
|
||||
**Features**:
|
||||
- [ ] Touch-optimized UI
|
||||
- [ ] iOS build pipeline
|
||||
- [ ] Android build pipeline
|
||||
- [ ] Mobile-specific UX (swipe gestures, etc.)
|
||||
- [ ] Background sync on mobile
|
||||
- [ ] Push notifications (optional)
|
||||
|
||||
**Deliverables**:
|
||||
- Working iOS app
|
||||
- Working Android app
|
||||
- Consistent UX across mobile and desktop
|
||||
|
||||
### Phase 5: Polish & Advanced Features (Weeks 15+)
|
||||
**Goal**: Differentiate from Google Tasks, leverage Bevy's capabilities
|
||||
|
||||
**Features**:
|
||||
- [ ] Themes and customization
|
||||
- [ ] Advanced animations
|
||||
- [ ] Keyboard shortcuts
|
||||
- [ ] Search and filters
|
||||
- [ ] Task templates
|
||||
- [ ] Recurring tasks
|
||||
- [ ] Statistics and insights
|
||||
- [ ] Game-like achievement system (optional)
|
||||
- [ ] Custom UI skins
|
||||
|
||||
**Deliverables**:
|
||||
- Polished, delightful UX
|
||||
- Unique features not in Google Tasks
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Performance Budgets
|
||||
- **Cold start**: < 500ms on desktop, < 1s on mobile
|
||||
- **First render**: < 100ms
|
||||
- **Task creation**: < 50ms
|
||||
- **Sync operation**: < 2s for typical dataset (< 1000 tasks)
|
||||
- **Memory usage**: < 50MB on mobile, < 100MB on desktop
|
||||
|
||||
### Testing Strategy
|
||||
- **Unit tests**: Data models and business logic
|
||||
- **Integration tests**: Storage layer operations
|
||||
- **E2E tests**: Critical user flows
|
||||
- **Performance tests**: Startup time, large datasets
|
||||
- **Platform tests**: Verify each platform build
|
||||
|
||||
### Build & Release
|
||||
- **CI/CD**: GitHub Actions for all platforms
|
||||
- **Desktop**: Direct downloads (AppImage, DMG, MSI)
|
||||
- **Mobile**: App Store and Google Play
|
||||
- **Version scheme**: Semantic versioning (0.1.0 → 1.0.0)
|
||||
|
||||
## Technical Challenges & Solutions
|
||||
|
||||
### Challenge 1: Fast Startup with Bevy
|
||||
**Problem**: Bevy's plugin system can add overhead
|
||||
|
||||
**Solutions**:
|
||||
- Use `MinimalPlugins` instead of `DefaultPlugins`
|
||||
- Add only required plugins (rendering, input)
|
||||
- Lazy-load audio, asset server if not needed immediately
|
||||
- Profile startup and optimize hot paths
|
||||
|
||||
### Challenge 2: Mobile Platform Support
|
||||
**Problem**: iOS and Android have different requirements
|
||||
|
||||
**Solutions**:
|
||||
- Use conditional compilation for platform-specific code
|
||||
- Test early and often on real devices
|
||||
- Follow platform guidelines (iOS HIG, Material Design)
|
||||
- Use platform-specific file pickers and sharing
|
||||
|
||||
### Challenge 3: WebDAV Reliability
|
||||
**Problem**: Network can be unreliable, auth can be complex
|
||||
|
||||
**Solutions**:
|
||||
- Implement robust retry logic with exponential backoff
|
||||
- Cache credentials securely (use platform keychains)
|
||||
- Queue operations when offline
|
||||
- Provide clear sync status to user
|
||||
- Support multiple WebDAV servers (Nextcloud, ownCloud, etc.)
|
||||
|
||||
### Challenge 4: Data Migration
|
||||
**Problem**: Schema changes need to preserve user data
|
||||
|
||||
**Solutions**:
|
||||
- Version data format from day one
|
||||
- Write migration scripts for each version bump
|
||||
- Test migrations with real user data
|
||||
- Backup before migration
|
||||
|
||||
## Success Metrics
|
||||
|
||||
### Performance
|
||||
- ✓ Startup time < 500ms on mid-range devices
|
||||
- ✓ 60 FPS UI on all platforms
|
||||
- ✓ Handle 10,000+ tasks without performance degradation
|
||||
|
||||
### User Experience
|
||||
- ✓ Task creation in < 3 taps/clicks
|
||||
- ✓ Zero data loss
|
||||
- ✓ Sync conflicts rare and auto-resolved
|
||||
|
||||
### Platform Support
|
||||
- ✓ All 5 platforms working
|
||||
- ✓ Consistent feature set across platforms
|
||||
- ✓ Native feel on each platform
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Core Dependencies
|
||||
```toml
|
||||
[dependencies]
|
||||
bevy = "0.16"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
uuid = { version = "1.0", features = ["serde", "v4"] }
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
directories = "5.0"
|
||||
tokio = { version = "1.0", features = ["full"] }
|
||||
anyhow = "1.0"
|
||||
|
||||
# WebDAV support
|
||||
reqwest = { version = "0.11", features = ["json"] }
|
||||
# Note: Evaluate dav-client alternatives
|
||||
|
||||
# Platform-specific
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
# Android-specific deps
|
||||
|
||||
[target.'cfg(target_os = "ios")'.dependencies]
|
||||
# iOS-specific deps
|
||||
```
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
- Rust 1.75+ (Bevy 0.16 requirement)
|
||||
- Platform-specific tools:
|
||||
- **iOS**: macOS + Xcode
|
||||
- **Android**: Android SDK + NDK
|
||||
|
||||
### Development Setup
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone <repository-url>
|
||||
cd bevy-tasks
|
||||
|
||||
# Run desktop version
|
||||
cargo run
|
||||
|
||||
# Build for release
|
||||
cargo build --release
|
||||
|
||||
# Run tests
|
||||
cargo test
|
||||
|
||||
# Build for Android
|
||||
cargo apk build --release
|
||||
|
||||
# Build for iOS (on macOS)
|
||||
cargo build --target aarch64-apple-ios --release
|
||||
```
|
||||
|
||||
## Questions & Decisions Needed
|
||||
|
||||
1. **UI Framework**: Pure bevy_ui or bevy_egui for complex widgets?
|
||||
2. **Data Format**: JSON (human-readable) or MessagePack (efficient)?
|
||||
3. **Authentication**: How to securely store WebDAV credentials?
|
||||
4. **Distribution**: Self-hosted only or aim for app stores?
|
||||
5. **Backup Strategy**: Automatic local backups? Export functionality?
|
||||
|
||||
## Resources
|
||||
|
||||
- [Bevy Documentation](https://bevyengine.org/)
|
||||
- [Bevy Mobile Examples](https://github.com/bevyengine/bevy/tree/main/examples/mobile)
|
||||
- [WebDAV RFC 4918](https://datatracker.ietf.org/doc/html/rfc4918)
|
||||
- [Google Tasks API](https://developers.google.com/tasks) (for feature reference)
|
||||
|
||||
## License
|
||||
|
||||
To be determined.
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2025-10-26
|
||||
**Document Version**: 1.0
|
||||
**Status**: Planning Phase
|
||||
Loading…
Reference in a new issue