A Simple but perfect app for those who want to save and track their exercise weights with a simple ui that lists all the exercises and a simple watch button for how this exercise is played
Overview
Kinetic is a minimalist, no-nonsense workout weight tracker for Android. It solves one problem precisely: *\remembering what weight you used last time for every exercise\*, so you can focus on progressive overload, not note-taking. Most lifters track workouts with one of three tools: Kinetic occupies the gap: *\a dedicated weight tracker with zero friction\*. Open → find your exercise → log weight → done. That's it. Kinetic tracks exactly one metric — *\what weight did you lift?\* No reps, no sets, no RPE, no volume calculations. If you need those, you're already using a dedicated logbook. Kinetic is a *\companion\*, not a replacement. Every weight change is saved to the local database 700ms after you stop typing. No "Save" button. No data loss on app close. This is the single biggest UX win over a spreadsheet. All data lives in SQLite on your device. No cloud, no login, no subscription, no ads. Your data is yours. CSV export/import gives you full portability.
README
# Kinetic — Track. Progress. Dominate.
Kinetic is a minimalist, no-nonsense workout weight tracker for Android. It solves one problem precisely: **remembering what weight you used last time for every exercise**, so you can focus on progressive overload, not note-taking.
-–
## The Problem It Solves
Most lifters track workouts with one of three tools:
| Tool | Problem |
|—|—|
| **Notebook / Notes app** | No structure, no search, easy to lose, easy to skip |
| **Full-featured workout app (Strong, Hevy, FitNotes)** | Bloated with timers, rest timers, social features, subscriptions, login walls, gym discovery, meal plans — **90% of features you don’t use** |
| **Spreadsheet** | Manual, no mobile UX, no autosave, fragile |
Kinetic occupies the gap: **a dedicated weight tracker with zero friction**. Open → find your exercise → log weight → done. That’s it.
-–
## Core Product Philosophy
### 1. One Value: Weight
Kinetic tracks exactly one metric — **what weight did you lift?** No reps, no sets, no RPE, no volume calculations. If you need those, you’re already using a dedicated logbook. Kinetic is a **companion**, not a replacement.
### 2. Auto-Save by Default
Every weight change is saved to the local database 700ms after you stop typing. No “Save” button. No data loss on app close. This is the single biggest UX win over a spreadsheet.
### 3. Offline-First, Zero Account
All data lives in SQLite on your device. No cloud, no login, no subscription, no ads. Your data is yours. CSV export/import gives you full portability.
### 4. Multiple Profiles
One app, multiple lifters (or one lifter wanting separate programs). Each profile has its own weight records, theme, and layout preferences. Switch freely.
### 5. One Screen to Rule Them All
No tab bars, no nested navigation. The workout list is the entire interface. Filter by muscle group, find your exercise, log your weight. The settings screen is one tap away.
-–
## Market Gaps — Why Kinetic Wins
### Gap 1: The “Just Weights” Niche
Every workout tracker on the Play Store bundles weight logging with sets, reps, rest timers, and workout builders. This makes them **great for planning workouts** but **bad for quick reference**. When you’re in the gym between sets, you want to see “What did I bench last time?” and update it. That’s a 3-second interaction — not a 30-second one inside a bloated app.
Kinetic optimizes for the **3-second interaction**.
### Gap 2: CSV Portability as a First-Class Feature
Most workout apps lock your data behind proprietary exports (JSON, PDF, or no export at all). Kinetic treats CSV as a **native format** — import and export from the settings screen. This means:
- Switch from any app that exports CSV (or format a spreadsheet as CSV)
- Back up to Google Drive, email, or any cloud
- Edit weights in Excel/Google Sheets and re-import
- **You own your data**, not the other way around
### Gap 3: Per-Profile Themes
No other lightweight tracker lets each profile have its own dark/light mode, accent color (Pulse/Ember/Cosmic), card layout, or high-contrast accessibility mode. This matters when multiple people share a device, or when you want different vibes for different training blocks.
### Gap 4: YouTube-Integrated Exercise Reference
Every exercise has a linked YouTube tutorial. No need to tab out and search “how to do Bulgarian split squats” — tap the play button and watch. The 165+ exercise catalog covers virtually every standard lift, organized by muscle group with accurate, vetted video demonstrations.
### Gap 5: No Feature Creep
The roadmap intentionally has no:
- Social feed or following
- Workout builder / program creator
- Calendar or streak tracking
- Apple Watch / Wear OS
- Subscription tiers or premium features
This keeps the APK small, the UI fast, and the mental model simple. Kinetic does one thing well.
-–
## Features
### Data Management
- **165+ exercises** across 9 muscle groups (Chest, Back, Shoulders, Arms, Legs, Lower Body, Core, Full Body)
- Weight logging in **KG or LB** per exercise, per profile
- **Filter chips** to show only the muscle group you’re training
- **Debounced auto-save** (700ms) — never lose a weight entry
- **Flat or card layout** — choose your visual preference
### Profiles
- **Unlimited profiles** — each with isolated weight records
- **Profile rename, delete, and switch** — no friction
- **Onboarding screen** guides first-time users through features
### Appearance
- **Dark mode** and **light mode** — per profile
- **3 accent themes**: Pulse (purple), Ember (orange-red), Cosmic (blue-violet)
- **High contrast mode** — pure black/white for accessibility
- **Material 3** design language
### Import / Export
- **CSV export** — share weights to any app (email, Drive, etc.)
- **CSV import** — pick a CSV file, match workout names, restore data
- **RFC-4180 compliant parser** — handles quoted fields, multi-line records
- **Safe error handling** — never crashes on malformed input; reports unmatched names
### Video Tutorials
- **YouTube integration** — tap “▶ Watch” to open the exercise demo
- **166 curated videos** — each exercise has a specific, relevant tutorial
- **App-first** — opens YouTube app if installed, falls back to browser
### Tooltips
- **Long-press tooltips** on key buttons (Add Profile, Settings, Watch, Back, Data)
- Built with Material 3’s PlainTooltip
Hey there! Check out these cool features:
- Got over 165 workouts for all your muscle groups, from chest to full body.
- Log your weights in KG or LB, and choose which muscle group you’re focusing on.
- Auto-save your workout data, so you don’t miss a single entry.
- Pick between a flat or card layout for your workout data.
Profile perks:
- Create as many profiles as you want, each with its own weight records.
- Rename, delete, or switch profiles without any hassle.
- A helpful onboarding screen to get you started.
Look and feel:
- Choose between dark or light mode for your profile.
- Pick from three cool accent themes: Pulse, Ember, Cosmic.
- High contrast mode for easy reading.
- Designed with Material 3.
Share and import:
- Export your workout data to a CSV file and share it with any app.
- Import your data from a CSV file, and it’ll match your workout names.
- Works smoothly with any CSV file, even if it’s a bit wonky.
Learn with videos:
- Tap “▶” to watch a tutorial video right in the app.
- There are over 166 videos to help you nail each exercise.
- Opens YouTube app if you’ve got it, or falls back to your browser.
Tooltips for the win:
- Long-press on key buttons to get extra info.
- Made with Material 3’s PlainTooltip.
-–
## Tech Stack
| Layer | Technology |
|—|—|
| Language | Kotlin 2.2 |
| UI | Jetpack Compose + Material 3 |
| Database | Room 2.7 (SQLite) |
| Architecture | MVVM (Repository + ViewModel + Flow) |
| Min SDK | 26 (Android 8.0) |
| Target / Compile | 35 (Android 15) |
| Build | Gradle + AGP 9.2 |
| No DI | Manual singleton (AppDatabase.getInstance()) |
| No Navigation | State-driven sealed class Screen |
| No Auth | Fully offline, no accounts |
-–
## Screens
| Screen | Purpose |
|—|—|
| **Splash** | Animated logo + tagline, auto-navigates after 1.1s |
| **Profile Selection** | Onboarding (if no profiles), list of profiles, “Add Profile” dialog |
| **Workouts** | Filter chips + scrollable exercise list + weight inputs + unit selector |
| **Settings** | Theme, appearance, accent, profile management, CSV import/export |
-–
## Architecture
┌─────────────────────────────────────────────────┐
│ MainActivity (single-activity, state-driven) │
│ ┌─────────────────────────────────────────────┐ │
│ │ ProfileViewModel (AndroidViewModel) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ │
│ │ │profiles │ │settings │ │exercises │ │ │
│ │ │StateFlow │ │StateFlow │ │StateFlow │ │ │
│ │ └────┬─────┘ └────┬─────┘ └─────┬──────┘ │ │
│ └───────┼─────────────┼─────────────┼─────────┘ │
│ │ │ │ │
│ ┌───────┼─────────────┼─────────────┼─────────┐ │
│ │ ▼ ▼ ▼ │ │
│ │ ProfileRepository │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ProfileDao │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ AppDatabase (Room) │ │
│ │ ┌──────────┬──────────────┐ ┌────────────┐ │ │
│ │ │ Profile │ProfileSettings│ │ Exercise │ │ │
│ └──┴──────────┴──────────────┴─┴────────────┘──┘ │
└─────────────────────────────────────────────────┘
-–
## Data Model
Profile (1) ──→ ProfileSettings (1)
\\\  │
\\\  └────→ Exercise (many) — one weight per exercise per profile
- **Profile**: id, name, createdAt
- **ProfileSettings**: profileId, darkMode, accent, highContrast, cardLayout
- **Exercise**: id (composite), profileId, workoutId, weight, weightUnit
The exercise catalog (165+ workouts with names, categories, and YouTube URLs) is **hardcoded** in WorkoutModels.kt — not in the database — so all profiles share the same exercise library.
-–
## Comparison to Alternatives
| | Kinetic | Strong | Hevy | FitNotes | Spreadsheet |
|—|—|—|—|—|—|
| **Logging friction** | Very low | Medium | Medium | Medium | High |
| **Auto-save** | ✅ (700ms) | ❌ | ❌ | ❌ | ❌ |
| **Offline** | ✅ | ✅ (limited) | ✅ | ✅ | ✅ |
| **Multi-profile** | ✅ | ❌ | ❌ | ❌ | ❌ |
| **CSV import/export** | ✅ Native | ❌ | ✅ (premium) | ✅ | N/A |
| **Cost** | Free | Freemium | Freemium | Free (ads) | Free |
| **Login required** | ❌ | ❌ | ✅ | ❌ | ❌ |
| **Exercise catalog** | 165+ | Built-in | Built-in | Custom | Manual |
| **Video tutorials** | ✅ Built-in | ❌ | ❌ | ❌ | ❌ |
| **Per-profile themes** | ✅ | ❌ | ❌ | ❌ | ❌ |
| **APK size** | ~5 MB | ~20 MB | ~30 MB | ~8 MB | N/A |
-–
## Getting Started
### Prerequisites
- Android Studio Ladybug (2024.4) or newer
- JDK 17+
- Android SDK 35
### Build
git clone
cd Kinetic
./gradlew assembleDebug
### Release Signing
1. Place your keystore at app/keystore.jks
2. Fill in app/keystore.properties with your credentials:
```
storeFile=keystore.jks
storePassword=your_store_password
keyAlias=your_key_alias
keyPassword=your_key_password
```
3. Run ./gradlew assembleRelease
The keystore.properties file and all .jks files are gitignored by default.
-–
## Future Roadmap (Intentional Non-Features)
Kinetic will **not** add:
- Reps, sets, or RPE tracking
- Workout builders or program templates
- Social features, friends, or sharing
- Cloud sync or account systems
- Wear OS or widget support
- Subscriptions or in-app purchases
- Calendars, streaks, or gamification
These are not bugs — they are deliberate scope constraints that keep Kinetic fast, focused, and free.
-–
## License
Copyright 2026
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
\\\  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add adam-inference/kinetic