mirror of
https://github.com/DocNR/POWR.git
synced 2025-04-23 01:01:27 +00:00
344 lines
8.1 KiB
Markdown
344 lines
8.1 KiB
Markdown
# POWR Library Tab PRD
|
|
|
|
## Overview
|
|
|
|
### Problem Statement
|
|
Users need a centralized location to manage their fitness content (exercises and workout templates) while supporting both local content creation and Nostr-based content discovery. The library must maintain usability in offline scenarios while preparing for future social features.
|
|
|
|
### Goals
|
|
1. Provide organized access to exercises and workout templates
|
|
2. Enable efficient content discovery and reuse
|
|
3. Support clear content ownership and source tracking
|
|
4. Maintain offline-first functionality
|
|
5. Prepare for future Nostr integration
|
|
|
|
## Feature Requirements
|
|
|
|
### Navigation Structure
|
|
- Material Top Tabs navigation with three sections:
|
|
- Templates (default tab)
|
|
- Exercises
|
|
- Programs (placeholder for future implementation)
|
|
|
|
### Templates Tab
|
|
|
|
#### Content Organization
|
|
- Favorites section
|
|
- Recently performed section
|
|
- Alphabetical list of remaining templates
|
|
- Clear source badges (Local/POWR/Nostr)
|
|
|
|
#### Template Item Display
|
|
- Template title
|
|
- Workout type (strength, circuit, EMOM, etc.)
|
|
- Preview of included exercises (first 3)
|
|
- Source badge
|
|
- Favorite star button
|
|
- Usage stats
|
|
|
|
#### Search & Filtering
|
|
- Persistent search bar with real-time filtering
|
|
- Filter options:
|
|
- Workout type
|
|
- Equipment needed
|
|
- Tags
|
|
|
|
### Exercises Tab
|
|
|
|
#### Content Organization
|
|
- Recent section (10 most recent exercises)
|
|
- Alphabetical list of all exercises
|
|
- Tag-based categorization
|
|
- Clear source badges
|
|
|
|
#### Exercise Item Display
|
|
- Exercise name
|
|
- Category/tags
|
|
- Equipment type
|
|
- Source badge
|
|
- Usage stats
|
|
|
|
#### Search & Filtering
|
|
- Persistent search bar with real-time filtering
|
|
- Filter options:
|
|
- Equipment
|
|
- Tags
|
|
- Source
|
|
|
|
### Programs Tab (Future)
|
|
- Placeholder implementation
|
|
- "Coming Soon" messaging
|
|
- Basic description of future functionality
|
|
|
|
## Content Interaction
|
|
|
|
### Progressive Disclosure Pattern
|
|
|
|
#### 1. Card Display
|
|
- Basic info
|
|
- Source badge (Local/POWR/Nostr)
|
|
- Quick stats/preview
|
|
- Favorite button (templates only)
|
|
|
|
#### 2. Quick Preview (Hover/Long Press)
|
|
- Extended preview info
|
|
- Key stats
|
|
- Quick actions
|
|
|
|
#### 3. Bottom Sheet Details
|
|
- Basic Information:
|
|
- Full title and description
|
|
- Category/tags
|
|
- Equipment requirements
|
|
|
|
- Stats & History:
|
|
- Personal records
|
|
- Usage history
|
|
- Performance trends
|
|
|
|
- Source Information:
|
|
- For local content:
|
|
- Creation date
|
|
- Last modified
|
|
- For Nostr content:
|
|
- Author information
|
|
- Original post date
|
|
- Relay source
|
|
|
|
- Action Buttons:
|
|
- For local content:
|
|
- Start Workout (templates)
|
|
- Edit
|
|
- Publish to Nostr
|
|
- Delete
|
|
- For Nostr content:
|
|
- Start Workout (templates)
|
|
- Delete from Library
|
|
|
|
#### 4. Full Details Modal
|
|
- Comprehensive view
|
|
- Complete history
|
|
- Advanced options
|
|
|
|
## Technical Requirements
|
|
|
|
### Data Storage
|
|
- SQLite for local storage
|
|
- Schema supporting:
|
|
- Exercise templates
|
|
- Workout templates
|
|
- Usage history
|
|
- Source tracking
|
|
- Nostr metadata
|
|
|
|
### Content Management
|
|
- No limit on custom exercises/templates
|
|
- Tag character limit: 30 characters
|
|
- Support for external media links (images/videos)
|
|
- Local caching of Nostr content
|
|
|
|
### Media Content Handling
|
|
- For Nostr content:
|
|
- Store media URLs in metadata
|
|
- Cache images locally when saved
|
|
- Lazy load images when online
|
|
- Show placeholders when offline
|
|
- For local content:
|
|
- Optional image/video links
|
|
- No direct media upload in MVP
|
|
|
|
### Offline Capabilities
|
|
- Full functionality without internet
|
|
- Local-first architecture
|
|
- Graceful degradation of Nostr features
|
|
- Clear offline state indicators
|
|
|
|
## User Interface Components
|
|
|
|
### Core Components
|
|
1. MaterialTopTabs navigation
|
|
2. Persistent search header
|
|
3. Filter button and sheet
|
|
4. Content cards
|
|
5. Bottom sheet previews
|
|
6. Tab-specific FABs:
|
|
- Templates Tab: FAB for creating new workout templates
|
|
- Exercises Tab: FAB for creating new custom exercises
|
|
- Programs Tab: FAB for creating training programs (future)
|
|
|
|
### Component Details
|
|
|
|
#### Templates Tab FAB
|
|
- Primary action: Create new workout template
|
|
- Icon: Layout/Template icon
|
|
- Navigation: Routes to template creation flow
|
|
- Fixed position at bottom right
|
|
|
|
#### Exercises Tab FAB
|
|
- Primary action: Create new exercise
|
|
- Icon: Dumbbell icon
|
|
- Navigation: Routes to exercise creation flow
|
|
- Fixed position at bottom right
|
|
|
|
#### Programs Tab FAB (Future)
|
|
- Primary action: Create new program
|
|
- Icon: Calendar/Program icon
|
|
- Navigation: Routes to program creation flow
|
|
- Fixed position at bottom right
|
|
|
|
### Component States
|
|
1. Loading states
|
|
2. Empty states
|
|
3. Error states
|
|
4. Offline states
|
|
5. Content creation/editing modes
|
|
|
|
## Implementation Phases
|
|
|
|
### Phase 1: Core Structure
|
|
1. Tab navigation setup
|
|
2. Basic content display
|
|
3. Search and filtering
|
|
4. Local content management
|
|
|
|
### Phase 2: Enhanced Features
|
|
1. Favorite system
|
|
2. History tracking
|
|
3. Performance stats
|
|
4. Tag management
|
|
|
|
### Phase 3: Nostr Integration
|
|
1. Content syncing
|
|
2. Publishing flow
|
|
3. Author attribution
|
|
4. Media handling
|
|
|
|
## Success Metrics
|
|
|
|
### Performance
|
|
- Search response: < 100ms
|
|
- Scroll performance: 60fps
|
|
- Image load time: < 500ms
|
|
|
|
### User Experience
|
|
- Content discovery time
|
|
- Search success rate
|
|
- Template reuse rate
|
|
- Exercise reference frequency
|
|
|
|
### Technical
|
|
- Offline reliability
|
|
- Storage efficiency
|
|
- Cache hit rate
|
|
- Sync success rate
|
|
|
|
## Future Considerations
|
|
|
|
### Programs Tab Development
|
|
- Program creation
|
|
- Calendar integration
|
|
- Progress tracking
|
|
- Social sharing
|
|
|
|
### Enhanced Social Features
|
|
- Content recommendations
|
|
- Author following
|
|
- Usage analytics
|
|
- Community features
|
|
|
|
### Additional Enhancements
|
|
- Advanced media support
|
|
- Custom collections
|
|
- Export/import functionality
|
|
- Backup solutions
|
|
|
|
2025-02-09 Update
|
|
|
|
Progress Analysis:
|
|
|
|
✅ COMPLETED:
|
|
1. Navigation Structure
|
|
- Implemented Material Top Tabs with Templates, Exercises, and Programs sections
|
|
- Clear visual hierarchy with proper styling
|
|
|
|
2. Basic Content Management
|
|
- Search functionality
|
|
- Filter system with proper categorization
|
|
- Source badges (Local/POWR/Nostr)
|
|
- Basic CRUD operations for exercises and templates
|
|
|
|
3. UI Components
|
|
- SearchHeader component
|
|
- FilterSheet with proper categorization
|
|
- Content cards with consistent styling
|
|
- FAB for content creation
|
|
- Sheet components for new content creation
|
|
|
|
🟡 IN PROGRESS/PARTIAL:
|
|
1. Content Organization
|
|
- We have basic favorites for templates but need to implement:
|
|
- Recently performed section
|
|
- Usage stats tracking
|
|
- Better categorization system
|
|
|
|
2. Progressive Disclosure Pattern
|
|
- We have basic cards and creation sheets but need:
|
|
- Quick Preview on long press
|
|
- Bottom Sheet Details view
|
|
- Full Details Modal
|
|
|
|
3. Content Interaction
|
|
- Basic CRUD operations exist but need:
|
|
- Performance tracking
|
|
- History integration
|
|
- Better stats visualization
|
|
|
|
❌ NOT STARTED:
|
|
1. Technical Implementation
|
|
- Nostr integration preparation
|
|
- SQLite database setup
|
|
- Proper caching system
|
|
- Offline capabilities
|
|
|
|
2. Advanced Features
|
|
- Performance tracking
|
|
- Usage history
|
|
- Media content handling
|
|
- Import/export functionality
|
|
|
|
Recommended Next Steps:
|
|
|
|
1. Data Layer Implementation
|
|
```typescript
|
|
// First set up SQLite database schema and service
|
|
class LibraryService {
|
|
// Exercise management
|
|
getExercises(): Promise<Exercise[]>
|
|
createExercise(exercise: Exercise): Promise<string>
|
|
updateExercise(id: string, exercise: Partial<Exercise>): Promise<void>
|
|
deleteExercise(id: string): Promise<void>
|
|
|
|
// Template management
|
|
getTemplates(): Promise<Template[]>
|
|
createTemplate(template: Template): Promise<string>
|
|
updateTemplate(id: string, template: Partial<Template>): Promise<void>
|
|
deleteTemplate(id: string): Promise<void>
|
|
|
|
// Usage tracking
|
|
logExerciseUse(exerciseId: string): Promise<void>
|
|
logTemplateUse(templateId: string): Promise<void>
|
|
getExerciseHistory(exerciseId: string): Promise<ExerciseHistory[]>
|
|
getTemplateHistory(templateId: string): Promise<TemplateHistory[]>
|
|
}
|
|
```
|
|
|
|
2. Detail Views
|
|
- Create a detailed view component for exercises and templates
|
|
- Implement proper state management for tracking usage
|
|
- Add performance metrics visualization
|
|
|
|
3. Progressive Disclosure
|
|
- Implement long press preview
|
|
- Create bottom sheet details view
|
|
- Add full screen modal for editing
|