A beautiful, iOS-styled Progressive Web App (PWA) for tracking your gym workouts. Built with React, TypeScript, and designed to work offline-first.
- 📊 Exercise Tracking: Log weight and reps for each exercise
- 💪 Muscle Group Organization: Organize exercises by muscle groups
- 📈 Progress Insights: Track your progression over time with detailed statistics
- 📱 PWA Support: Install on your device and use offline
- 🎨 iOS-Style Design: Beautiful, native-feeling interface
- 🌐 i18n Support: Spanish and English translations
- 💾 Backup/Restore: Export and import your data as JSON
- 🎯 Smart Progression: Tracks any variation in weight or reps as progress
- React 19 - UI Framework
- TypeScript - Type Safety
- Vite - Build Tool
- Vitest - Testing Framework (26 tests)
- LocalStorage - Data Persistence
- Lucide React - Icons
- Tailwind CSS - Styling
- Node.js 18+
- npm or yarn
-
Clone the repository:
git clone https://github.com/yourusername/lift.git cd lift -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open http://localhost:5173 in your browser
To create a production build:
npm run buildThe built files will be in the dist/ directory.
Run the test suite:
npm testRun tests with UI:
npm run test:uiAll 26 tests are comprehensive unit tests for the progression logic and data management.
- Open the app in Safari
- Tap the Share button
- Select "Add to Home Screen"
- Open the app in Chrome
- Tap the three dots menu
- Select "Install App"
lift/
├── components/ # React components
│ ├── BottomNav.tsx # Navigation between screens
│ ├── ExerciseCard.tsx # Exercise logging card
│ ├── InsightsScreen.tsx # Progress insights
│ ├── MuscleGroupCard.tsx # Muscle group selector
│ └── SettingsScreen.tsx # Backup/restore settings
├── services/ # Business logic
│ └── storageService.ts # LocalStorage management
├── utils/ # Utilities
│ ├── progression.ts # Progression calculation (tested)
│ └── translations.ts # i18n translations
├── types.ts # TypeScript types
├── App.tsx # Main app component
└── index.tsx # Entry point
The app tracks progression based on any variation in weight or reps:
- ✅ Increasing weight counts as progress
- ✅ Increasing reps counts as progress
- ✅ Decreasing weight counts as progress (deload cycles)
- ✅ Decreasing reps counts as progress
This ensures your training variations are properly tracked, including strategic deloads and rep PRs.
-
Home 🏠
- View muscle groups
- Quick access to exercises
- Log workouts
-
Insights 📊
- See your 3 most recent progressions
- Track progression timeline
- View statistics
-
Settings ⚙️
- Export workout data
- Import from backup
- Manage your data
All data is stored locally using localStorage. Your data never leaves your device. Use the backup/restore feature to transfer data between devices or keep as insurance.
Contributions are welcome! Whether it's bug reports, feature requests, or code contributions.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Tests are in
*.test.tsfiles - Run
npm testto verify changes - Use
npm run devfor hot reload during development - Check
npm run buildbefore submitting PRs
This project is licensed under the MIT License - see the LICENSE file for details.
- Icons by Lucide
- Inspired by iOS design language
- Built with ❤️ for fitness enthusiasts
LIFT - Track your progress, crush your goals 💪