A single-user, 100% offline Android workout & body-weight tracker with full Persian (RTL) support, AI-upscaled exercise media, and zero servers or accounts.
Forked from DuarteSantos8/openGym. While upstream is a self-hosted multi-user web app, this
offline-fafork strips away the server, accounts, and passkeys to deliver a standalone offline Android APK tailored for Persian users.
- +24 Pilates & Flat Resistance-Band Exercises (
9001–9024): Added 24 home-friendly Pilates band movements (pull-aparts, face pulls, seated rows, archer rows, chest flyes, banded push-ups, roll-ups, teasers, the hundred, clamshells, donkey kicks, monster walks, hamstring stretch, spine twist, and more) with Persian names, offline Persian step-by-step instructions, smart bodyweight/timed defaults, and crisp 720×720 generated diagrams & MP4 animations (tools/generate_pilates_media.py) — bringing the offline catalogue to 1,348 exercises. - 100% Offline & Account-Free: No backend, no passkeys, no network calls required. All workout logs, routines, and weigh-ins stay locally on your device (
localStorage+ CapacitorFilesystemmirror) with one-tap JSON backup/restore. - AI-Upscaled 720px Exercise Media (
tools/convert_gym_media_v4.py): All 1,324 animations (gif/*.mp4) and stills (img/*.webp) are bundled inside the APK and neural-upscaled from 180×180 to 720×720 using Real-ESRGAN ONNX (realesrgan_anime6bfor stills,realesr-general-x4v3for clips), plus fullscreen tap-to-zoom and dark-mode contrast tuning. - Full Persian (RTL) Localization:
- Bundled Vazirmatn fonts and complete RTL layout fixes (mirrored navigation chevrons, proper LTR isolation for numbers/sets, fixed switch direction).
- Offline Persian translations for all 1,324 exercise names (
src/locales/ex/fa.js) and all 1,324 step-by-step instructions (src/instr/fa.js), with bilingual Persian + English search. - Persian Jalali Calendar display across the Home strip, charts, and monthly calendar (with a Jalali/Gregorian switcher in Settings), while keeping internal storage ISO-Gregorian.
- 100% locale key parity across all 12 language packs (
node scripts/check-locales.mjs).
- Smart Exercise Modes (Sets & Weights by Exercise Type):
- Weighted lifts: Sets × Reps × Weight with progression policies (Linear, Greyskull LP, Double).
- Unloaded gear: Bodyweight, bands, rollers, ropes, stability/bosu balls hide the weight column automatically (with optional added-weight toggle);
assistedgear labels assistance weight clearly. - Stretches & Mobility: Default to 1 timed round (30s) with no weight clutter.
- Isometric Holds: Planks, wall sits, dead hangs, and L-sits default to timed mode (seconds) with built-in work timer.
- Cardio: Distinguishes machine cardio from bodyweight HIIT (burpees, jump rope) and supports switching between Cardio / Time / Reps.
- Android-First UX & Automated CI:
- Hardware back-button support (
@capacitor/app),POST_NOTIFICATIONSpermission for Android 13+, quick-jump exercise pills during active workouts, mid-workout exercise config button, and automated 4-shard CI release APK pipeline (.github/workflows/release-apk.yml).
- Hardware back-button support (
- Optional AI Coach: Bring your own OpenAI-compatible or Anthropic API key (
Views/AiCoach.jsx) to generate/edit plans directly from your training profile and recovery status.
Automated builds run on GitHub Actions via .github/workflows/release-apk.yml (4 parallel media shards + Vitest + Capacitor Android release APK).
For local builds, see README.fa.md.
AGPL-3.0 — see LICENSE. Upstream credit: DuarteSantos8/openGym and hasaneyldrm/exercises-dataset.