AI

adam-inference/kinetic

Developer tools
0 stars Quality 28 Trend 8

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.

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add adam-inference/kinetic