
* Add style prop to UserAvatar component for better customization * Refactor UserAvatar to use getAvatarSeed utility for consistent avatar generation * Fix React hook ordering issues in profile/overview.tsx to prevent crashes during auth state changes * Add proper state initialization and cleanup during authentication transitions * Ensure consistent fallback avatar display for unauthenticated users These changes improve stability during login/logout operations and provide better visual continuity with Robohash avatars when profile images aren't available.
6.7 KiB
Workout History Overview
Last Updated: 2025-04-02
Status: Implemented
Related To: Workout Data Models, Nostr Integration
Introduction
The History tab provides a comprehensive view of a user's workout history, allowing them to track, review, and analyze their past workouts. It offers both chronological and calendar views, with filtering and search capabilities to help users quickly find specific workout information.
Features
Feature | Status | Notes |
---|---|---|
Chronological History List | ✅ Implemented | Groups workouts by month |
Calendar View | ✅ Implemented | Highlights dates with workouts |
Nostr Integration | ✅ Implemented | Two-way synchronization of workout data |
Workout Source Filtering | ✅ Implemented | Toggle between all or local-only workouts |
Workout Detail View | ✅ Implemented | Shows complete exercise and set information |
Pull-to-refresh | ✅ Implemented | Loads latest workouts |
Date-based Workout Filtering | ✅ Implemented | Shows workouts for selected calendar date |
Advanced Search | ⏳ Planned | Will search by exercise, notes, and other fields |
Export Functionality | 🧪 Implemented (Backend) | API ready but not exposed in UI |
Streak Tracking | 🧪 Implemented (Backend) | Service implemented but not in UI |
Architecture
The History tab is built on a unified history service architecture that provides a consistent interface for accessing workout data from both local storage and the Nostr network.
Components
- UnifiedWorkoutHistoryService: Core service that handles all workout history operations
- useWorkoutHistory: React hook that provides access to workout history functionality
- WorkoutCard: Reusable component for displaying workout summary information
- WorkoutDetailView: Component for displaying detailed workout information
Data Flow
graph TD
A[User] -->|Views History| B[History Tab]
B -->|Uses| C[useWorkoutHistory Hook]
C -->|Calls| D[UnifiedWorkoutHistoryService]
D -->|Reads from| E[SQLite Database]
D -->|Publishes to| F[Nostr Network]
F -->|Receives from| D
D -->|Parses| G[Workout Models]
G -->|Displayed in| B
Screens
History Screen
The History screen displays workouts in a chronological list, grouped by month. It provides filtering options and integration with Nostr.
Key features:
- Monthly grouping for easy navigation
- Clear workout cards with exercise summaries
- Workout source filtering (All/Local Only)
- Nostr authentication prompt for unauthenticated users
- Pull-to-refresh functionality
- Visual indicators for workout source
Calendar Screen
The Calendar screen provides a monthly calendar view with highlights for days that have workouts. Selecting a date shows the workouts for that day.
Key features:
- Monthly calendar navigation
- Visual indicators for days with workouts
- Selected date highlighting
- Detailed workout list for selected date
- Pull-to-refresh functionality
- Fallback filtering for dates without direct database matches
Implementation Details
Unified Service
The UnifiedWorkoutHistoryService combines functionality previously spread across multiple services into a single, comprehensive API:
- Basic CRUD operations for workout history
- Filtering and search capabilities
- Calendar and date-based queries
- Nostr integration for cross-device synchronization
- Export functionality
- Analytics and streak tracking
Authentication State Handling
The History tab adapts to the user's authentication state, showing appropriate UI:
- Unauthenticated: Shows local workouts only with a login prompt
- Authenticated: Shows all workouts with filtering options
Nostr Integration
Workout history integrates with Nostr for cross-device synchronization:
- Two-way synchronization of workout data
- Real-time subscription for workout updates
- Visual indicators for workout source (local/Nostr)
- Publishing capabilities for local workouts
- Import functionality for Nostr-only workouts
Offline Support
The History tab provides robust offline support:
- Local storage of workout data
- Offline viewing of previously loaded workouts
- Background synchronization when connectivity is restored
- Visual indicators for offline state
User Experience
Visual Design
The History tab uses consistent visual design elements to enhance usability:
- Color Coding: Purple for Nostr-related elements
- Card Layout: Clear, consistent workout cards with exercise summaries
- Typography: Hierarchical text styles for improved readability
- Iconography: Consistent icons for actions and status indicators
Navigation Flow
graph TD
A[History Tab] -->|Tab Navigation| B[History Screen]
A -->|Tab Navigation| C[Calendar Screen]
B -->|Tap Workout| D[Workout Detail Screen]
C -->|Select Date| E[Date Workouts]
E -->|Tap Workout| D
D -->|Tap Publish| F[Publish to Nostr]
Future Enhancements
The following enhancements are planned for future releases:
- Advanced Search: Full-text search across workout titles, exercises, and notes
- UI for Export Functionality: User interface for exporting workout data in CSV or JSON formats
- Streak Visualization: Visual representation of workout streaks
- Enhanced Filtering: More granular filtering by exercise type, duration, and intensity
- Analytics Integration: Better integration with the Profile tab's analytics features
- Batch Operations: Ability to perform operations on multiple workouts at once
- Advanced Calendar View: Heatmap visualization of workout intensity on the calendar
Technical Considerations
Performance Optimization
The History tab implements several performance optimizations:
- Lazy loading of workouts for better initial load times
- Optimistic UI updates for better user experience
- Efficient SQL queries with proper indexing
- Memoization of expensive calculations
- Background data loading for calendar view
Error Handling
Robust error handling ensures a smooth user experience:
- Fallback mechanisms for database query failures
- Graceful degradation during network issues
- Appropriate error messaging
- Retry mechanisms for failed network operations
- Data validation before storage
Related Documentation
- Migration Guide - Guide for migrating from legacy workout history services
- Workout Data Models - Details on workout data structures
- Nostr Offline Queue - Information on offline Nostr functionality
- Profile Progress Tracking - Related analytics features