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

68 lines
3.2 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. **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?