Files
FitnessDroid/doc/plan.md
claude 7a04893294
Some checks failed
release / build-release (push) Has been cancelled
M3: statistik, kroppskarta, PB-lista, tyst återinloggning, fler inställningar
- Statistikfliken: periodväljare (vecka/månad/halvår/år), KPI-kort med
  delta mot förra perioden, volymtrend, kroppskarta fram/bak med värme
  per muskelgrupp (Canvas), höjdpunkter och PB per övning/rep-antal
- Tyst återinloggning: uppgifter sparas AES/GCM-krypterat via Android
  Keystore; när refresh avvisas provas nytt login innan utloggning —
  'utloggad utan att appen märker det' försvinner. Manuell utloggning
  rensar uppgifterna; toggle i inställningarna (på som standard)
- Inställningar: viktsteg för steppers (1,25/2,5/5 kg), API-url,
  auto-återinloggning
- Version 0.3.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 13:03:24 +02:00

76 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. **Statistik + robust inloggning** *(påbörjad 2026-07-25, version 0.3.0)*
statistikfliken med periodväljare (vecka/månad/halvår/år), KPI-kort med
delta mot förra perioden, volymtrend-staplar, kroppskarta (fram/bak,
volymvärme per muskelgrupp), höjdpunkter och PB-lista per övning.
Tyst återinloggning: uppgifterna sparas AES-krypterat via Android
Keystore och appen loggar in igen automatiskt när servern avvisat
sessionen (toggle i inställningarna). Utökade inställningar: viktsteg
(1,25/2,5/5 kg), API-url, auto-återinloggning.
4. **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?