Skip to content
TheHHRPublic

Repository files navigation

Form — Training & Nutrition

An offline-first training and nutrition tracker for Android. Plan routines, log workouts with built-in rest timers and a visual exercise library, track meals and macros, and review progress — all your data stays on your device in your own storage folder.

Features

  • Training — scheduled routines, a guided active-workout screen with rest timers, set/rep/weight logging, supersets and secondary exercises
  • Exercise library — 1,324 exercises with animated demos, categories, and custom exercise support
  • Nutrition — meal logging with a food database, macro/calorie tracking, water intake
  • Progress — training history, charts, and body-metrics tracking
  • AI (bring your own key) — weekly/daily training reviews, meal macro estimates from a description, and an AI routine builder. Works with OpenRouter, OpenAI, Gemini, or a custom endpoint; your key stays on your device and requests go straight to your provider
  • Own your data — everything lives in a plain-text vault (.md) in a folder you pick on your device; view and edit it in Obsidian or any editor, export/import anytime. No servers, no accounts, no tracking.

Download

Get it on GitHub   Get it on Obtainium

Grab the latest signed APK from Releases — every push to main rebuilds it automatically. Requires Android 10+.

Screenshots

Screenshot 1 Screenshot 2 Screenshot 3
Screenshot 4 Screenshot 5 Screenshot 6

Donate

If Form helps your training, consider supporting development:

Donate

Built with

  • Vanilla HTML/CSS/JS web app, wrapped with Capacitor
  • Custom SAF vault plugin for secure user-picked storage
  • Screen wake lock during active workouts via @capacitor-community/keep-awake

Credits

Repository

  • www/ — the web app (source of truth)
  • android/ — native Android project (Gradle)
  • .github/workflows/android-build.yml — CI: builds the signed release APK and publishes it to the latest release
  • Versioning — edit version.properties (semver, e.g. 3.0.2) and push; versionCode is derived as major×10000 + minor×100 + patch