Inspiration
Trainr addresses a practical question: what should I train this week, and what should change next week? The goal is to connect a workout plan to the equipment someone actually has and the sets they actually complete.
What it does
Trainr builds a week of workouts from your goals, experience, equipment, schedule, and reported limitations. During training, you can log weight, reps, and time, see last week's numbers, use an exercise timer, and watch movement demonstrations. You can move sessions to another day, repeat a previous week, or generate the next week from your logged training.
Plan generation runs on the phone. No account or sign-up is required, and your profile and training history are stored locally. The first training week is free. Trainr Pro unlocks continued plan generation, with monthly, yearly, and lifetime purchase options.
How it is built
The Android app is built with Kotlin and Jetpack Compose. Room stores training data locally, Hilt provides dependency injection, and Kotlin Coroutines and Flow connect data to the interface. The code separates presentation, data, and training logic.
RevenueCat handles Google Play purchases, product offerings, purchase restoration, and the Pro entitlement. The paywall reads prices and eligible trial information from the store rather than hardcoding them. Monthly, yearly, and lifetime products unlock the same Pro features.
Engineering challenges
The implementation brings together equipment-aware planning, progression from completed sets, and a workout interface that remains practical during a session. Purchase access also needs to stay consistent across subscriptions, lifetime purchases, and restored purchases, without requiring a Trainr account.
Accomplishments
Trainr is published on Google Play. It brings onboarding, personalized planning, set logging, weekly progression, and RevenueCat-powered purchases into one working Android app.
Takeaways
The project demonstrates how on-device planning and local training history can support a personalized workout experience, while store-backed entitlements handle paid access. Small details—previous set values, a built-in timer, and flexible scheduling—help connect planning to the actual workout.
What's next
The next step is to learn from real use and refine the planning and workout experience around that feedback.
Built With
- android
- kotlin
- revenuecat
Log in or sign up for Devpost to join the conversation.