# 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?