Most fitness apps want an account, an internet connection, and your data. I wanted something that works offline, stores everything on-device, and doesn’t require signing in to log a set of squats. So I built Replog.
Features
- Browse exercises with images, descriptions, and muscle group info (powered by Free Exercise DB)
- Log sets, reps, and weights for any exercise
- Calendar view of past workouts
- Track progress over time
- Create custom workout plans
- Fully offline - all data lives on device in SQLite
- Cross-platform (iOS, Android, Web via Expo)
Key decisions
- Local-first over cloud-first — all data lives in SQLite on device; no account required, no network dependency for logging a set during a workout, and the data belongs to the user rather than a service
- Expo over bare React Native — EAS Build gives managed cloud builds without maintaining native toolchains locally; the tradeoff is some flexibility in native modules, which fitness logging doesn’t need
- Drizzle ORM with SQLite over AsyncStorage — AsyncStorage is a key-value store; workout history with relationships between exercises, sets, and sessions needs a real schema with queryable joins
- NativeWind over React Native StyleSheet — consistent utility-first styling across the web and mobile targets; the same mental model as the web stack reduces the cost of switching contexts
Future directions
- Goal setting and reminders
- AI-powered workout suggestions
- Charts and progress visualisations
Built with
- Expo + React Native
- Drizzle ORM + SQLite
- NativeWind
- EAS - build and distribution