Files
FitnessDroid/doc/activities-plan.md
claude 444028c91e
All checks were successful
release / build-release (push) Successful in 10m8s
Etapp 3: GPS-livespårning av aktiviteter
- TrackingService: foreground-service (location) med GPS-rutt, distans
  (brusfiltrerad), höjdmeter (glidande medel + tröskel), tid och live-kcal
  (ActivityKcal — Kotlin-port av serverns beräkning med tempokurvor)
- Spårningsskärm: osmdroid/OSM-livekarta med rutt-polyline för
  distansaktiviteter; stor timer för tidsbaserade (rörelsespårning av,
  RPE-slider i sammanfattningen); statistikrad tid/distans/fart/höjd/kcal/GPS
- Sammanfattning vid stopp: spara som source=tracked med encoded polyline,
  aktivitetsgissning på tempo+höjd
- Starta aktivitet-knapp (GPS/timer per typ) + pågår-kort på hemskärmen
- osmdroid 6.1.20; permissions för plats/foreground-service/notiser; v0.7.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 23:18:21 +02:00

5.7 KiB
Raw Blame History

Aktiviteter, kcal-mätare & mål — plan

Godkänd 2026-08-23. Samma plan finns i brasse-pc.eu-v2: docs/gym-activities-plan.md — uppdatera båda vid ändringar.

Cardio/fristående aktiviteter (promenad, jogg, vandring, fäktning/HEMA m.m.) som eget koncept vid sidan av gympass, en daglig kcal-mätare på hemskärmen, mål (dag/vecka/månad) och GPS-livespårning. Kondition markeras med ❤️.

Grundkoncept

  • Pass (finns): gympass med övningar/set.
  • Aktivitet (nytt): något man gör över tid. Har tid, ev. distans/höjd/ rutt, kcal, ansträngning (RPE) och källa (manuellt/spårat/telefon/import).

Aktivitetsbibliotek

~60 kurerade aktiviteter från Compendium of Physical Activities (publika MET-standarden), seedade i gym-API:t: key, namnSv, namnEn, met, kategori, isDistanceBased, iconKey, googleFitType. Google Fit-typmappningen gör framtida import rak. Stadspromenad, jogg, skogsvandring och HEMA/fäktning får tempo-/RPE-justerade MET-kurvor.

Kcal-modellen

Kräver längd/födelseår/kön i API:t (gamla "milstolpe 5" ur openscale-integration.md bakas in i etapp 1).

  • Passivt: BMR (MifflinSt Jeor: 10·vikt + 6.25·längd 5·ålder + k, k = +5 man / 161 kvinna), fylls på linjärt över dygnet.
  • Aktivt loggat: gympass (befintlig MET-modell) + aktiviteter (MET × vikt × timmar; distansaktiviteter justeras efter verkligt tempo och höjdmeter, icke-distans efter RPE-slidern). Netto-kcal (MET1) används så BMR inte dubbelräknas.
  • Telefon-auto: steg + externa pass via Health Connect, med dubbelräkningsskydd (steg under egen loggad aktivitet räknas inte).
  • RPE-slider: "ingen ansträngning" → "kan inte prata mer än ett par ord" (talk test) → intensitetsfaktor på aktivitetens MET.
  • Aktivitetsgissning: tempo + höjdprofil ⇒ promenad (<~6,5 km/h)/jogg/ vandring (lågt tempo + höjdmeter); stillastående + timer ⇒ fäktning/HEMA.

Mätaren på hemskärmen

Dagens kcal överst på Hem, tredelad: aktivt loggat / telefon / passivt. Mål visas som progress-bars/mätare under.

Datamodell (gym-API, EF-migrationer körs vid deploy)

  • User + HeightCm (double?), BirthYear (int?), Sex (string? "male"/"female")
  • ActivityType — seedad tabell (se ovan), utökningsbar
  • Activity — Guid id, userId, activityTypeId, startedAt, durationSeconds, distanceMeters?, elevationGainMeters?, estimatedKcal, rpe? (010), source (manual/tracked/phone/imported), routePolyline? (Google encoded), externalId? (dedup vid import), notes?
  • DailySteps — userId, date, steps (upsert från appen)
  • Goal — metric (KCAL/GYM_SESSIONS/STEPS/ACTIVITIES/DISTANCE_KM) × period (DAY/WEEK/MONTH), targetValue; max ett mål per metrik+period
  • GraphQL: activityTypes, activities(from,to), addActivity/update/ delete, upsertDailySteps, goals + setGoal/deleteGoal, myProfile/updateProfile (+längd/år/kön), dailySummary(date) (kcal-tredelningen serverberäknad så app+webb delar logik)

Tagna designbeslut (2026-08-23)

Fråga Beslut
Karta i appen osmdroid + OpenStreetMap (inga nycklar, GPL-vänligt)
Steg/telefondata Health Connect (även vägen för Google Fit-import)
Ruttlagring Encoded polyline + sammanfattning på servern
Aktivitetsbibliotek ~60 kurerade ur MET-kompendiet

Etapper

Leveransordning per etapp: backend → CI grönt → webb → CI grönt → app → användartest. Endast ETT Pi5-bygge åt gången — polla CI och vänta hellre för länge. (Path-filter: gym-api triggas av backend-gym-traker/**, frontend av src/** m.fl., FitnessDroid av varje push till main.)

  1. Profil & kalorigrund — API: HeightCm/BirthYear/Sex + updateProfile. Webb: profilfält. App: kroppsdata synkas mot servern (lokal cache kvar), BMR, kcal-mätare v1 på hemskärmen (passivt + gympass).
  2. Aktiviteter: bibliotek + manuell logg — API: ActivityType (seed) + Activity CRUD + dailySummary. Webb: aktivitetsflik ❤️ (logga/lista/ rätta). App: aktivitetsflik med bibliotek, manuell loggning (tid/distans/RPE), kcal in i mätaren.
  3. Live-spårning (GPS) — App: starta aktivitet, foreground-service, osmdroid-livekarta, live kcal/distans/tempo/höjdmeter; icke-distansläge (timer + RPE efteråt); aktivitetsgissning; polyline till servern. Webb: Leaflet-karta i aktivitetsdetalj.
  4. Mål & mätare — API: Goal CRUD. App: målkort med progress på Hem (dag/vecka/månad × kcal/pass/steg/aktiviteter/km). Webb: målinställningar
    • progress.
  5. Steg & telefondata — API: DailySteps. App: Health Connect-permissions, daglig stegsynk, auto-aktiviteter från HC ("telefon"-källa), mätarens tredelning komplett. Webb: stegvisning.
  6. Statistik & polish❤️-sektion i statistiken (app+webb): distans/tempo-trender per typ, vecko-km; dokumentation; Google Fit-importens grund (source/externalId/typmappning/HC) verifierad klar.

Status

  • Etapp 1 — Profil & kalorigrund (kod klar 2026-08-23: backend a1cd4d3, webb 560894c, app — väntar på användartest + omdeploy av gym-api/frontend-containrarna)
  • Etapp 2 — Aktiviteter: bibliotek + manuell logg (kod klar 2026-08-23: backend 9a81cf6, webb — aktivitetsflik, app 0.6.0; väntar på användartest)
  • Etapp 3 — Live-spårning (GPS) (kod klar 2026-08-23: ingen backend-ändring krävdes; webb Leaflet-rutt i historiken; app 0.7.0 — osmdroid-livekarta, foreground-service, timer/RPE-läge, aktivitetsgissning, polyline; väntar på användartest)
  • Etapp 4 — Mål & mätare
  • Etapp 5 — Steg & telefondata
  • Etapp 6 — Statistik & polish

Google Fit-importen byggs efter etapp 6 som separat arbete.