Grund: Compose-app med login mot gym-API:t, VS Code-task och CI-release
Some checks failed
release / build-release (push) Failing after 1m42s
Some checks failed
release / build-release (push) Failing after 1m42s
- Kotlin + Jetpack Compose + Material 3, minSdk 31 (Android 12) - GraphQL-klient (OkHttp) med login/refresh/validate/logout som webben - Tokenlagring i DataStore, auto-refresh av JWT - Signering via gitignorerad signing/ lokalt och Actions-secrets i CI - VS Code build-task -> build/FitnessDroid.apk - Gitea Actions: bygger APK på Pi5 (arm64, aapt2-override) och publicerar rullande latest-release Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
This commit is contained in:
58
doc/plan.md
Normal file
58
doc/plan.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 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 i och med första commit)*
|
||||
Projektskelett som kompilerar, inloggning mot API:t med sessions-
|
||||
återställning vid appstart, hemskärm som visar profilen.
|
||||
2. **Aktivt pass** — starta/återuppta pass, lägga till övningar, logga set
|
||||
(reps/vikt/distans/tid/RPE), vilotimer, passtimer, avsluta pass.
|
||||
Fälten styrs av övningens tracks-flaggor precis som i webben.
|
||||
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?
|
||||
Reference in New Issue
Block a user