- StepsSync: läser dagens + gårdagens stegsumma (StepsRecord.COUNT_TOTAL) och upsertar till gym-API:t; synkas automatiskt (max var 10:e min) när hemskärmen visas - Inställningar → Stegsynk: status, aktivera-flöde (HC-permission), Play-länk om Health Connect saknas, manuell synk - Kcal-mätarens telefonrad visar nu riktiga steg + kcal (serverns beräkning med dubbelräkningsskydd); stegmål får riktig data - connect-client 1.1.0-alpha07 (nyare kräver AGP 8.9/compileSdk 36 — toolchain-bump tas separat); HC-manifest (READ_STEPS, rationale-intents) - Version 0.10.0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
6.2 KiB
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 (Mifflin–St 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 (MET−1) 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ökningsbarActivity— Guid id, userId, activityTypeId, startedAt, durationSeconds, distanceMeters?, elevationGainMeters?, estimatedKcal, rpe? (0–10), 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.)
- 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). - 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. - 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.
- 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.
- Steg & telefondata — API: DailySteps. App: Health Connect-permissions, daglig stegsynk, auto-aktiviteter från HC ("telefon"-källa), mätarens tredelning komplett. Webb: stegvisning.
- 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) (klar & fälttestad 2026-08-26: GPS-väntfas, providerlyssning gps/fused/network, fartgrind (Doppler), rörelsevakt (accelerometer), offline-kö, teknisk logg — GPS-filter justerbara i inställningarna)
- Etapp 4 — Mål & mätare (kod klar 2026-08-26: Goal-modell + goalsWithProgress i API:t, målsektion i webbens aktivitetsflik, målkort med progress-bars på appens hemskärm + målskärm; väntar på användartest)
- Etapp 5 — Steg & telefondata (kod klar 2026-08-26: DailySteps + upsert i API:t med telefon-kcal (0.00038 kcal/steg/kg, dubbelräkningsskydd mot gång/löp/vandringsaktiviteter), Health Connect-läsning i appen (connect-client 1.1.0-alpha07 — nyare kräver AGP 8.9/SDK 36), aktivering under Inställningar → Stegsynk; webben behövde ingen ändring. Väntar på användartest)
- Etapp 6 — Statistik & polish
Google Fit-importen byggs efter etapp 6 som separat arbete.