Repstack is designed to work 100% offline with no degraded functionality. All core features are available without an internet connection, making it perfect for use in gyms with poor cell reception or while traveling.
Repstack can be installed on any device as a native-like app:
iOS (Safari):
- Open Repstack in Safari
- Tap the Share button
- Tap "Add to Home Screen"
- Tap "Add"
Android (Chrome):
- Open Repstack in Chrome
- Tap the menu (three dots)
- Tap "Install app" or "Add to Home Screen"
- Follow the prompts
Desktop (Chrome, Edge, etc.):
- Open Repstack in your browser
- Look for the install icon in the address bar
- Click "Install" when prompted
- The app will open in its own window
Once installed, Repstack provides complete offline functionality:
✅ First Load: The app caches all assets on first load
✅ Offline Access: All features work without internet
✅ Data Persistence: All data is stored locally in IndexedDB
✅ Automatic Updates: When online, the app checks for updates automatically
✅ Graceful Transitions: Seamless switching between online/offline modes
- View all exercises
- Create custom exercises
- Edit exercise details
- Delete exercises (with history check)
- Filter and search exercises
- Start workout sessions
- Log sets, reps, and weight
- Record performance feedback (pump, soreness, fatigue)
- Complete workouts
- View workout history
- View active mesocycle
- Track training progress
- View volume recommendations
- Auto-regulation based on feedback
- Deload week tracking
- View workout history
- See exercise progress over time
- Track volume and intensity trends
- View performance analytics
- Export all data to JSON format
- Works completely offline
- Import data from backup files
- Data portability guaranteed
Repstack uses Workbox to manage offline functionality:
Caching Strategy:
- App Shell: Cache-first strategy for HTML, CSS, JS
- Images: Cache-first with 30-day expiration
- API Calls (future): Network-first with offline fallback
- Static Assets: Precached on installation
Cache Management:
- Automatic cleanup of old caches
- Version-based cache invalidation
- Maximum 10MB cache size
- Smart cache prioritization
All user data is stored locally using IndexedDB via Dexie.js:
Tables:
userProfiles: User settings and preferencesexercises: Exercise library (user-created)workouts: Workout logs with feedbacktrainingSessions: Individual training sessionsmesocycles: Training blocks and progression
Data Persistence:
- Automatic saves on every change
- No data loss on app closure
- Works offline indefinitely
- No cloud dependency
The PWA manifest provides metadata for installation:
{
"name": "Repstack - Hypertrophy Training",
"short_name": "Repstack",
"display": "standalone",
"orientation": "any",
"icons": [
{ "src": "pwa-192x192.png", "sizes": "192x192" },
{ "src": "pwa-512x512.png", "sizes": "512x512", "purpose": "maskable" }
]
}Test Scenario 1: First Load Offline
- Open the app with internet
- Wait for initial load and caching
- Turn off internet (Airplane mode)
- Close and reopen the app
- Verify: App loads and works normally
Test Scenario 2: Working Out Offline
- Start a workout session
- Turn off internet (Airplane mode)
- Log exercises, sets, and reps
- Complete the workout
- Verify: All data is saved locally
Test Scenario 3: Multi-Day Offline Usage
- Use the app normally for several days offline
- Create exercises, log workouts, manage mesocycles
- Turn internet back on
- Verify: All data persists and no data loss
Test Scenario 4: Transition Testing
- Use app while online
- Switch to offline mode (Airplane mode)
- Continue using app
- Switch back to online mode
- Verify: No errors, smooth transitions
Run the E2E test suite to verify offline functionality:
# Run all offline tests
npm run test:e2e -- e2e/offline.spec.ts
# Run specific test
npm run test:e2e -- e2e/offline.spec.ts -g "should work offline"
# Run with UI for debugging
npm run test:e2e:uiChrome/Edge DevTools:
- Open DevTools (F12)
- Go to "Application" tab
- Check "Service Workers" - should show active worker
- Check "Cache Storage" - should show cached assets
- Go to "Network" tab
- Select "Offline" in throttling dropdown
- Navigate the app to verify offline functionality
Solution:
- Ensure you loaded the app at least once while online
- Check that Service Worker is registered (DevTools → Application → Service Workers)
- Clear browser cache and reload while online
- Try reinstalling the app
Solution:
- Check browser storage permissions
- Ensure IndexedDB is enabled in browser settings
- Check available storage space
- Clear old data if storage is full
Solution:
- Force refresh (Ctrl+Shift+R / Cmd+Shift+R)
- Unregister old service worker in DevTools
- Clear cache and reload
- Reinstall the app
Solution:
- Ensure HTTPS connection (required for PWA)
- Check that app meets PWA criteria
- Try using a supported browser (Chrome, Edge, Safari)
- Use manual install from browser menu
- App shell: ~500KB
- Static assets: ~8MB total
- Maximum cache: 10MB
- Automatic cleanup of old caches
- IndexedDB: Typically 50MB+ available
- Browser dependent
- Monitors storage usage
- Warns if approaching limits
- Minimal background activity
- Efficient IndexedDB queries
- Optimized re-renders
- Low power consumption
- ✅ Complete offline functionality (Current)
- 🔜 Background sync for future cloud features
- 🔜 Offline analytics and insights
- 🔜 Advanced caching strategies
- 🔜 Sync conflict resolution
- 🔜 Multi-device offline support
When cloud sync is added (as an optional paid feature):
- Background sync API for automatic uploads
- Network-first with offline fallback for API calls
- Conflict resolution for multi-device usage
- Selective sync capabilities
Note: Core offline functionality will always remain free and open source.
- Install the app for best offline experience
- Load once while online before going offline
- Export data regularly for backup
- Check storage if using for extended periods
- Update regularly when online
- Test offline scenarios thoroughly
- Handle online/offline transitions gracefully
- Minimize bundle size for faster caching
- Use IndexedDB efficiently with proper indexing
- Monitor cache size and implement cleanup
- Version service workers properly
- Test on real devices in addition to DevTools
If you encounter issues with offline functionality:
- Check this guide for troubleshooting steps
- Review the E2E tests for expected behavior
- Open an issue on GitHub with details
- Include browser, OS, and reproduction steps
Remember: Repstack is designed to be your reliable workout companion, whether you're online or offline. Train confidently knowing your data is always accessible and secure.