README.md
July 29, 2026 ยท View on GitHub
Trainable is a premium, native Android workout tracker designed for lifters. It features a monolithic design aligned with Google's Material 3 Expressive guidelines, with both Dark and Light Mode support, offering a seamless experience optimized for Pixel devices.
Available in 6 languages: English, Italian, Portuguese, German, French, Spanish.
๐ฑ Screenshots
โจ Features
๐ Intelligent Dashboard
- Active Plan Hub: Quick access to your current routine and next scheduled session.
- Smart Recommendations: Assign routines to specific weekdays for intelligent "Today's Workout" suggestions.
- Resume Workout: Smart hub to quickly resume interrupted sessions without data loss.
- Unfinished Session Detection: Smart alerts when starting a workout for a plan that already has an in-progress session, with one-tap resume.
- Quick Start: Start an empty workout directly from the dashboard without a plan.
๐ Advanced Routine Builder
- Exercise Library: 130+ pre-populated exercises with categorized filters.
- Drag & Drop Reordering: Fluid, haptic-powered reordering of exercises within routines.
- Custom Exercises: Add and manage your own exercises with persistent categorization.
- Custom Categories: Create, rename, and delete your own exercise categories.
- Editable Preset Exercises: Toggle editing of built-in exercise names and categories.
- Superset Support: Group exercises into supersets within routines.
- Auto-Adjust Sets: Enter rep schemes like
10-8-6and sets auto-update to match the number of segments. - Plan Scheduling: Set Start and Expire dates when creating or editing routines.
- Routine Sharing: Export and import routines via
.trainableplanfile format. - Routine Photos: Capture multiple photos in-app and include them in exports.
๐ช High-Performance Workout Execution
- Expressive UI: Massive, touch-friendly inputs designed for use during heavy sets.
- Wheel Pickers: Haptic-boosted weight and rep selection for precise control.
- Smart Hub: Dynamic navigation between exercises with "Finish" and "Next" logic.
- Superset Flow: Execute grouped superset exercises seamlessly.
- Cardio Exercise Support: Log cardio sessions (Run, Bike, Walk, or custom) with distance and duration tracking, including cardio timer state persistence.
- Rest Timer: Integrated countdown cards with enhanced notifications showing next-set details and planned reps.
- Custom Vibration: Configurable continuous vibration duration (0โ30s) when the rest timer finishes while the device is locked.
- Warmup Timer: Configurable warmup timer in settings.
- Session Notes: Persistence of notes for every single set for granular tracking.
- Swipe Navigation: Swipe between exercises during workout execution.
- Exercise Note Pre-fill: Auto-fill exercise notes from session history.
- On-the-fly Edits: Add custom exercises mid-workout; tap plan title to view/edit plan details.
- Inline Exercise Modifications: Add or remove exercises mid-workout with inline controls.
- Workout Timer: Configurable workout duration timer with enable/disable toggle in Settings.
๐ Deep Analytics
- Vico Charts: Professional-grade visualizations for total volume and strength trends.
- 1RM Tracking: Algorithmic strength assessment using the Epley formula, with optional 1RM cards.
- Volume by Muscle Group: Track volume distributed across muscle groups.
- Session Comparison: Compare workouts across time periods or specific sessions.
- Workout Calendar: Visual calendar widget for workout frequency.
- Consistency Tracking: Visual heatmaps and progress cards.
- Strength Index: Algorithmic assessment of your structural balance and performance.
- Body Weight: Integrated weight logging and history tracking.
- Body Weight History: Dedicated module with date picker, delete functionality, collapsible UI, and configurable time range (1w/1m/6m/All).
- Cardio Tracking: Cardio counter in weekly goal overview.
- Plans Reports: Generate detailed HTML reports for workout plans with per-exercise history, max weight/volume, estimated 1RM, and swap tracking. Preview, save, or share reports.
๐ Localization
- 6 Languages: English, Italian, Portuguese, German, French, Spanish.
- Dynamic Switching: Change language directly from Settings.
๐๏ธ Gym Membership
- Expiration Tracking: Monitor your gym subscription end date.
- Smart Alerts: Expiration notifications with "Renew" quick action buttons.
๐ Local WebServer
- On-Device Dashboard: Start a local HTTP server from Settings to view your training data (analytics, plans, session history) in any browser on the same Wi-Fi network.
- REST API: Built-in Ktor-powered API serving real-time data from the local Room database.
- Foreground Service: Persistent notification with server status, URL display, and one-tap stop.
- Responsive Web UI: Full-featured web pages with dark/light theme, i18n, and mobile-friendly layout.
๐ธ Social Sharing
- Workout Share Cards: Generate and share full-length workout summary images.
- Live Preview: Preview your share card before sharing.
- Muscle Group Details: Muscle group breakdown included in share cards.
- Session Notes: Workout notes included in shared summaries.
- Planned Set/Rep Scheme: Planned set and rep structure included in share cards.
๐ฑ Widgets
- Quick Start/Resume Widget: Home Screen and Lock Screen widget for instant workout start or resume.
- Weekly Goal Widget: Track weekly workout goal progress directly from your home screen.
๐ Physical Checks
- Hidden Entry Point: Tap the Trainable logo 3 times from the Dashboard to access Physical Checks.
- Body Progression Tracking: Log body measurements with weight, notes, and timestamp.
- Photo Gallery: Capture or import multiple photos per check with fullscreen pinch-to-zoom viewer.
- Before/After Comparison: Interactive slider overlay to compare any two check entries.
- Biometric Lock: Fingerprint or device PIN gate for quick access.
- Password Encryption: Optional AES-256-GCM password-based encryption for all check photos.
- Forgot Password Reset: Secure nuclear reset that deletes all check data if password is lost.
- Auto-Lock: Session auto-locks after inactivity or when app goes to background.
- Unit Conversion: Automatic kg/lb conversion for weight entries.
- Swipe & Long-Press Actions: Quick edit, delete, and manage checks via gestures.
- Photo Editor: Built-in crop, rotate, zoom, and pan tools with aspect ratio presets (Free, 1:1, 4:3, 16:9) before saving photos.
โ๏ธ Premium UX & Tools
- Dynamic Color: Full support for Android 12+ wallpaper-based color extraction.
- Light Mode & Custom Themes: Switch between Dark/Light mode, customize themes, and choose from an extensive color palette in Settings.
- Google Sans Font: Clean, modern typography throughout the app.
- Horizontal Pager Navigation: Fluid swipe-based transitions between main tabs.
- Backup & Restore: Secure ZIP-based local backup system with photo compression and expanded preference sync (Theme, Units, Language).
- Auto-Backup: Reliable WorkManager-based automated background backups with configurable frequency, max count, and image inclusion.
- Tactile Feedback: Enhanced haptic responses for all critical UI interactions.
- Interaction Choice: Configure Swipe or Long-press interaction style in Settings.
- Auto-Updates: Built-in automatic update support for future releases.
- Unit System: Choose between Metric (kg) and Imperial (lbs).
๐๏ธ Technical Architecture
Trainable follows Clean Architecture principles combined with MVVM for a robust and testable codebase:
- UI Layer: 100% Jetpack Compose using the Monolithic Design System (no XML).
- Presentation Layer: Hilt-injected ViewModels managing
StateFlowfor reactive UI updates. - Data Layer:
- Room Database: Single Source of Truth (SSoT).
- DataStore: For lightweight user preferences (Haptic settings, theme).
- WorkManager: Automated background backups.
- Navigation: Type-safe navigation with
@Serializableroutes.
๐ Project Structure
com/emanuel5014/trainable/
โโโ data/
โ โโโ ExerciseTranslations.kt
โ โโโ local/
โ โ โโโ ExerciseData.kt
โ โ โโโ GymDatabase.kt
โ โ โโโ dao/ # Room DAOs (WorkoutDao, ExerciseDao, AnalyticsDao, etc.)
โ โ โโโ entity/ # Room entities (SetLogEntity, CardioLogEntity, CustomCategoryEntity, etc.)
โ โ โโโ relation/ # Relation classes (PlanWithDetails, SessionWithSets, etc.)
โ โโโ remote/
โ โ โโโ GitHubModels.kt
โ โ โโโ dto/ # DTOs for export/import (WorkoutPlanExportDto)
โ โโโ report/ # HTML plan reports (ReportGenerator, HtmlReportFormatter, ReportModels)
โ โโโ repository/ # Repositories (WorkoutRepository, AnalyticsRepository, ExerciseRepository, etc.)
โโโ di/ # Hilt modules (DatabaseModule, NetworkModule)
โโโ ui/
โ โโโ components/
โ โ โโโ analytics/ # Charts, stat cards, consistency, body comp, personal bests
โ โ โโโ base/ # Design system primitives (GymCard, GymButton, etc.)
โ โ โโโ dialogs/ # Reusable dialogs (UpdateDialog, ImportConfirmation)
โ โ โโโ exercise/ # Exercise cards, cardio input, picker, rest timer, set log input
โ โ โโโ navbar/ # Bottom navigation bar and items (standard + floating)
โ โ โโโ shared/ # Shared utilities (EmptyState, ImageEditor, ScreenHeader, etc.)
โ โโโ navigation/ # NavGraph, Routes
โ โโโ screens/
โ โ โโโ analytics/ # Analytics dashboard, drag-drop state, models
โ โ โโโ compare/ # Session comparison
โ โ โโโ dashboard/ # Main dashboard
โ โ โโโ history/ # Session history, edit, filter bottom sheet
โ โ โโโ onboarding/ # Onboarding flow
โ โ โโโ physicalcheck/ # Physical checks (body progression, before/after slider, settings)
โ โ โโโ routines/ # Routine list, detail, builder, report
โ โ โโโ settings/ # App settings, workout settings, exercise customization
โ โ โโโ workout/ # Workout execution
โ โโโ theme/ # Color, Shape, Type, Spacing, Theme, ResponsiveSize, ThemeColorStore
โ โโโ util/ # DateFormatter
โโโ util/
โ โโโ AppLocaleManager.kt
โ โโโ BiometricHelper.kt
โ โโโ ImageStorageUtils.kt
โ โโโ PhysicalCheckCryptoManager.kt
โ โโโ ShareUtils.kt
โ โโโ UpdateManager.kt
โ โโโ UriMigrationHelper.kt
โ โโโ WeightUnitConverter.kt
โ โโโ backup/ # AutoBackupWorker, BackupManager
โ โโโ notification/ # TimerNotification, GymMembershipWorker
โโโ webserver/ # Local HTTP server (Ktor), foreground service, server manager
โโโ widget/ # Glance widgets (TrainableWidget, WeeklyGoalWidget)
โโโ MainActivity.kt
โโโ GymTrackingApp.kt
๐ Getting Started
Prerequisites
- Android Studio Ladybug or newer.
- Android SDK 28 or higher.
- A device/emulator running Android 12+ (for Dynamic Color support).
Setup
- Clone the repository:
git clone https://github.com/Emanuel5014/Trainable.git - Open the project in Android Studio.
- Build and Run on your device.
๐ ๏ธ Tech Stack
- Language: Kotlin (2.3.x)
- UI: Jetpack Compose (2026.x) with Material3 (1.5.x)
- Dependency Injection: Dagger Hilt (2.59.x)
- Database: Room (2.8.x) with KSP
- Charts: Vico (2.1.x)
- Serialization: Kotlinx Serialization (1.11.x)
- Navigation: Navigation Compose (2.9.x)
- Concurrency: Kotlin Coroutines & Flow
- Preferences: DataStore Preferences (1.2.x)
- Background Tasks: WorkManager (2.11.x)
- Image Loading: Coil (2.7.x)
- Web Server: Ktor (3.x)
- Build: Gradle (9.4.x) + AGP (9.2.x)
โค๏ธ Support the project
If you find this project useful, please consider giving it a โญ on GitHub or supporting development via Ko-fi!
Developed with โค๏ธ by Emanuel5014.