Files
FitnessDroid/doc/plan.md
claude 0812759719
All checks were successful
release / build-release (push) Successful in 4m41s
doc: polerings-rundan för milstolpe 2 i planen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 12:03:16 +02:00

3.2 KiB
Raw Blame History

FitnessDroid — plan

Mål

En modern Android-app (Android 12+) som pratar med gym-API:t (https://gymapi.brasse-pc.eu/graphql) och på sikt kan allt som webbens gym-del i brasse-pc.eu-v2 kan: pass, loggning av lyft, statistik, PB, mallar, grunddata och profil.

Stack

Del Val
Språk/UI Kotlin + Jetpack Compose + Material 3 (dynamiska färger)
minSdk / target 31 (Android 12) / 35
Nätverk OkHttp + kotlinx.serialization, handskrivna GraphQL-queries (samma strängar som webbens gymTrackerApi.js)
Auth JWT + refresh-token-rotation + sessions-id, lagras i DataStore, auto-refresh 2 min före utgång
Bygge Gradle 8.9 wrapper, AGP 8.7.3, Kotlin 2.0.21, JDK 17
Signering signing/ (gitignorerad) lokalt, Actions-secrets (KEYSTORE_B64, KEYSTORE_PASSWORD) i CI — samma signatur överallt

Leverans

  • VS Code-task build → signerad APK i build/FitnessDroid.apk
  • CI (Gitea Actions på Pi5/arm64) → rullande latest-release med FitnessDroid.apk på släppsidan vid varje push till main. arm64-knep: statiskt byggd aapt2 via android.aapt2FromMavenOverride.
  • versionCode = CI-byggnummer (GITHUB_RUN_NUMBER) så uppdateringar alltid räknas uppåt.

Milstolpar

  1. Grund + login (klar 2026-07-23) Projektskelett som kompilerar, inloggning mot API:t med sessions- återställning vid appstart, hemskärm som visar profilen.
  2. Aktivt pass (klar 2026-07-24) — passläge med en övning i taget (svep), ±steppers och ett-trycks setloggning med förifyllda värden, vilotimer (helskärm/banner + larm/vibration/visuell/inget — inställbart), offline-först via Room + synk-kö med statusindikatorer, övningsväljare med muskelfilter, bottenrad-navigation med start-FAB och minispelare. API-tillägg: MuscleGroup.iconKey, ExerciseType.defaultRestSeconds. Polering 2026-07-24/25: rätta/ta bort loggade set, passdetaljvy i historiken, övningshistorik i passläget (tidigare pass + tyngsta 3 mån), avsluta-överblick med redigerbar start/varaktighet (date/time-pickers, hopfällt bakom "Ändra tid"), kcal-summering med "Hur räknas detta?" (MET × kroppsvikt × timmar, även i historiken) och 🏆-markering av nya personbästa per rep-antal (PB-cache i Room).
  3. Passhistorik — lista, visa, redigera och ta bort tidigare pass.
  4. Logga lyft (snabbloggning) + PB — enkel lyftlogg och PB-matrisen.
  5. Statistik — perioder (vecka/månad/halvår/år), KPI-kort, trenddiagram, muskelfördelning, aktivitets-heatmap.
  6. Mallar — skapa/redigera mallar, starta pass från mall med auto-progression, spara pass som mall.
  7. Grunddata + profil — CRUD för muskelgrupper/muskler/övningar, kroppsvikt.

Roadmap / möjliga utbyggnader (ej beslutade)

  • Offlineläge: logga pass utan nät, synka när nätet är tillbaka
  • Notis med pågående pass + vilotimer (foreground service)
  • Wear OS-följeslagare / komplikationer
  • Widget med veckans volym/streak
  • CSV-import som i webben
  • R8/minify för mindre APK (nu ~43 MB p.g.a. icons-extended)

Öppna frågor

  • Ska appen på sikt gå över till Apollo Kotlin med schemagenererade typer?
  • Behövs stöd för flera konton/servrar?