FitApp icon
Health & fitness

FitApp

A tool for finding the next exercise, not logging the last one. Browse by muscle, generate a routine, or build one by hand.

FletPythonWorkoutX APIGemini 2.5 FlashGemini NanoMaterial You
FitApp body map with chest selected

Why it exists

The idea is simple: after running the same routine for a while, I want fresh alternatives, not another app to log the same reps in. Freeletics got closest to what I wanted, but only its workout builder: bodyweight moves, band variations, that kind of variety. The tracking half never interested me, since a watch already does that job, so there's deliberately no start-workout or logging screen here.

It's also where the engine changed: Kivy gave way to Flet. The first version was plain, a small hand-picked exercise list grouped by muscle group. The real work started once I went looking for an exercise database worth building on, and separately, for a body model that could actually be pulled apart into regions a person could tap.

Kivy to Flet

What Flet gives

Kivy draws every control from scratch, so a button, a list row, or a picker is a widget you style and maintain yourself. There's no design system underneath, just whatever you build. Flet renders through Flutter instead, so real Material 3 widgets (segmented buttons, bottom sheets, ColorScheme-aware theming) come built in and look native rather than hand-drawn. That's also what let the app follow the phone's light/dark setting and, on Android 12+, pull its accent color straight from the wallpaper (Material You) without me reimplementing any of that by hand. And it stays Python end to end: no bridging into a second UI language, one flet build apk away from a shippable Android build, with a flet run --web version usable straight in a browser tab for quick iteration.

What it costs

None of that is free, though. Flet's Android build bundles the Flutter engine, so the APK is meaningfully larger than a comparable Kivy one. Its plugin ecosystem is younger and thinner, so anything Flutter can do that Flet hasn't wrapped yet (Material You's wallpaper-color extraction, here) means writing a small Flutter/Dart extension by hand instead of finding one already made. And being newer, its documentation and community answers are sparser than Kivy's decade-plus head start. For a small solo app where a modern, native-feeling UI was the whole point, that trade was worth making; for something that needs deep custom rendering or already has a large Kivy codebase behind it, it might not be.

What it does

An interactive body map

Tap a muscle, front or back, and see every exercise that targets it, sourced from the WorkoutX API. Finding a body model that could be split into clickable regions in the first place turned out to be the harder half of this.

Two ways to build a routine

Rule Builder for manual control: muscle groups, equipment on hand, exercise count, how many variations. AI Coach for an open request, handled by whichever engine is connected.

On-device AI, where it's supported

Gemini Nano, via Android's AICore, runs the coach fully offline and privately, but only on the handful of Pixel phones AICore ships on, and only once the multi-gigabyte on-device model has downloaded. Everywhere else, a cloud Gemini 2.5 Flash fallback takes over, using the person's own API key rather than one baked into the app.

Keeping AI grounded to the real library

The AI coach doesn't invent exercises. Its prompt constrains it to the same WorkoutX-sourced library the Rule Builder draws from, so every move has a real animation, form cues, and equipment tag behind it. The trade-off: Gemini Nano's smaller model needs a stricter prompt to stay inside that constraint, and still occasionally needs a regenerate to return a clean, parseable result.

Screens

Interactive body map
Body map: tap a muscle to explore
Body map with chest selected, showing exercise count
Muscle selected, jump to exercises
Chest exercises list
Exercise list by muscle group
Exercise detail sheet opening and browsing variations
Exercise detail: form, targets, variations
My Workouts empty state
Saved routines
Workout Generator, Rule Builder mode
Generator: Rule Builder
Workout Generator, AI Coach mode
Generator: AI Coach, dual engine
Settings, Gemini API key for AI Coach
Settings: Gemini API key
Manual workout builder flow
Manual Builder: muscles, equipment, exercises