# Changelog All notable changes to the POWR project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - Comprehensive exercise management features - Added exercise editing functionality - Implemented exercise forking for Nostr exercises - Created local-first editing with offline support - Added publication queue for deferred Nostr publishing - Built robust exercise update workflow - Implemented source-aware editing permissions - Connectivity service for network state management - Added real-time connectivity monitoring - Implemented persistence for offline state - Built automatic retry system for failed requests - Created hook-based connectivity API for components - Extended database schema for publication queuing - Added publication_queue table - Implemented attempt tracking and rate limiting - Added app_status table for system-wide states - Successful Nostr protocol integration - Implemented NDK-mobile for React Native compatibility - Added secure key management with Expo SecureStore - Created event signing and publishing functionality - Built relay connection management system - Implemented event caching for offline support - Added support for various Nostr event kinds (Text, Exercise, Template, Workout) - Programs component for testing Nostr functionality - Created tabbed interface with Database and Nostr sections - Implemented user authentication flow - Added event creation with multiple event types - Built query functionality for retrieving events - Developed event display with detailed tag inspection - Added login/logout capabilities with secure key handling - Enhanced crypto support for React Native environment - Implemented proper cryptographic polyfills - Added secure random number generation - Built robust key management system - Developed signer implementation for Nostr - Zustand workout store for state management - Created comprehensive workout state store with Zustand - Implemented selectors for efficient state access - Added workout persistence and recovery - Built automatic timer management with background support - Developed minimization and maximization functionality - Workout tracking implementation with real-time tracking - Added workout timer with proper background handling - Implemented rest timer functionality - Added exercise set tracking with weight and reps - Created workout minimization and maximization system - Implemented active workout bar for minimized workouts - SQLite database implementation with development seeding - Successfully integrated SQLite with proper transaction handling - Added mock exercise library with 10 initial exercises - Implemented development database seeder - Added debug logging for database operations - Event caching system for future Nostr integration - Added EventCache service for Nostr event handling - Implemented proper transaction management - Added cache metadata tracking - Database schema improvements - Added nostr_events and event_tags tables - Added cache_metadata table for performance optimization - Added exercise_media table for future media support - Alphabetical quick scroll in exercise library - Dynamic letter highlighting for available sections - Smooth scrolling to selected sections - Sticky section headers for better navigation - Basic exercise template creation functionality - Input validation for required fields - Schema-compliant field constraints - Native picker components for standardized inputs - Enhanced error handling in database operations - Detailed SQLite error logging - Improved transaction management - Added proper error types and propagation - Template management features - Basic template creation interface - Favorite template functionality - Template categories and filtering - Quick-start template actions - Full-screen template details with tab navigation - Replaced bottom sheet with dedicated full-screen layout - Implemented material top tabs for content organization - Added Overview, History, and Social tabs - Improved template information hierarchy - Added contextual action buttons based on template source - Enhanced social sharing capabilities - Improved workout history visualization ### Changed - Enhanced exercise detail viewer - Replaced bottom sheet with full-screen modal - Added tabbed interface for information organization - Implemented edit capability with ownership detection - Added fork functionality for Nostr exercises from other users - Improved progress visualization with charts - Redesigned exercise editor - Created multi-purpose editor for create/edit/fork workflows - Added context-aware UI based on exercise source - Implemented specialized buttons based on workflow type - Added better form validation and feedback - Improved keyboard handling across platforms - Improved workflow architecture for model context protocol - Implemented offline-first editing paradigm - Added cryptographic signing before submission - Built local caching with deferred publishing - Created connectivity-aware operation queueing - Added proper error recovery and retry mechanisms - Improved workout screen navigation consistency - Standardized screen transitions and gestures - Added back buttons for clearer navigation - Implemented proper workout state persistence - Enhanced exercise selection interface - Updated add-exercises screen with cleaner UI - Added multi-select functionality for bulk exercise addition - Implemented exercise search and filtering - Improved exercise library interface - Removed "Recent Exercises" section for cleaner UI - Added alphabetical section organization - Enhanced keyboard handling for input fields - Increased description text area size - Updated NewExerciseScreen with constrained inputs - Added dropdowns for equipment selection - Added movement pattern selection - Added difficulty selection - Added exercise type selection - Improved DbService with better error handling - Added proper SQLite error types - Enhanced transaction rollback handling - Added detailed debug logging - Updated type system for better data handling - Consolidated exercise and template types - Added proper type guards - Improved type safety in components - Enhanced template display UI - Added category pills for filtering - Improved spacing and layout - Better visual hierarchy for favorites - Migrated from React Context to Zustand for state management - Improved performance with fine-grained rendering - Enhanced developer experience with simpler API - Better type safety with TypeScript integration - Added persistent workout state for recovery - Redesigned template details experience - Migrated from bottom sheet to full-screen layout - Restructured content with tab-based navigation - Added dedicated header with prominent action buttons - Improved attribution and source indication - Enhanced visual separation between template metadata and content ### Fixed - Exercise update functionality using delete-recreate pattern - Exercise data type handling in forking operation - TypeScript errors in exercise component interfaces - Nostr event queuing and retry mechanism - Exercise ownership detection for edit vs fork workflows - Connectivity monitoring edge cases - Workout navigation gesture handling issues - Workout timer inconsistency during app background state - Exercise deletion functionality - Keyboard overlap issues in exercise creation form - SQLite transaction nesting issues - TypeScript parameter typing in database services - Null value handling in database operations - Development seeding duplicate prevention - Template category spacing issues - Exercise list rendering on iOS - Database reset and reseeding behavior - Template details UI overflow issues - Navigation inconsistencies between template screens - Content rendering issues in bottom sheet components ### Technical Details 1. Exercise Management: - Implemented edit/fork/create workflows with unified interface - Built local-first editing pattern with offline support - Added publication queue for deferred Nostr submissions - Created robust update mechanism in useExercises hook - Implemented source-aware editing permissions - Added ownership detection for exercise operations 2. Connectivity Management: - Implemented singleton ConnectivityService for app-wide monitoring - Added NetInfo integration for real-time status detection - Built React hook for component-level connectivity awareness - Created database persistence for connectivity state - Implemented event-based notification system 3. Nostr Integration: - Implemented @nostr-dev-kit/ndk-mobile package for React Native compatibility - Created dedicated NDK store using Zustand for state management - Built secure key storage and retrieval using Expo SecureStore - Implemented event creation, signing, and publishing workflow - Added relay connection management with status tracking - Developed proper error handling for network operations 4. Cryptographic Implementation: - Integrated react-native-get-random-values for crypto API polyfill - Implemented NDKMobilePrivateKeySigner for key operations - Added proper key format handling (hex, nsec) - Created secure key generation functionality - Built robust error handling for cryptographic operations 5. Programs Testing Component: - Developed dual-purpose interface for Database and Nostr testing - Implemented login system with key generation and secure storage - Built event creation interface with multiple event kinds - Added event querying and display functionality - Created detailed event inspection with tag visualization - Added relay status monitoring 6. Database Schema Enforcement: - Added CHECK constraints for equipment types - Added CHECK constraints for exercise types - Added CHECK constraints for categories - Proper handling of foreign key constraints 7. Input Validation: - Equipment options: bodyweight, barbell, dumbbell, kettlebell, machine, cable, other - Exercise types: strength, cardio, bodyweight - Categories: Push, Pull, Legs, Core - Difficulty levels: beginner, intermediate, advanced - Movement patterns: push, pull, squat, hinge, carry, rotation 8. Error Handling: - Added SQLite error type definitions - Improved error propagation in LibraryService - Added transaction rollback on constraint violations 9. Database Services: - Added EventCache service for Nostr events - Improved ExerciseService with transaction awareness - Added DevSeederService for development data - Enhanced error handling and logging 10. Workout State Management with Zustand: - Implemented selector pattern for performance optimization - Added module-level timer references for background operation - Created workout persistence with auto-save functionality - Developed state recovery for crash protection - Added support for future Nostr integration - Implemented workout minimization for multi-tasking 11. Template Details UI Architecture: - Implemented MaterialTopTabNavigator for content organization - Created screen-specific components for each tab - Developed conditional rendering based on template source - Implemented context-aware action buttons - Added proper navigation state handling ### Migration Notes - Exercise editing now follows an offline-first approach with Nostr awareness - ExerciseSheet component replaces separate create/edit components - Exercise updates require proper source and metadata handling - Publication queue provides automatic retry for Nostr events - Exercise creation now enforces schema constraints - Input validation prevents invalid data entry - Enhanced error messages provide better debugging information - Template management requires updated type definitions - Workout state now persists across app restarts - Component access to workout state requires new selector pattern - Template details navigation has changed from modal to screen-based approach ## [0.1.0] - 2024-02-09 ### Added - Initial project setup with Expo and React Native - Basic tab navigation structure - Theme support (light/dark mode) - SQLite database integration - Basic exercise library interface ### Changed - Migrated to TypeScript - Updated to latest Expo SDK - Implemented NativeWind for styling ### Fixed - iOS status bar appearance - Android back button handling - SQLite transaction management ### Security - Added basic input validation - Implemented secure storage for sensitive data ## [0.0.1] - 2024-02-01 ### Added - Initial repository setup - Basic project structure - Development environment configuration - Documentation templates