Public
Mobil träningsapp med logg, timer och dagliga förslag
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

Jonas träning

Mobil-first personlig träningsapp i Val Town. React-frontend, Hono-API och val-scoped SQLite ligger i samma projekt. Val Town är nu primär datakälla för träningshistorik, passbibliotek, progress och dagens rekommendation.

Ansvarsfördelning

  • Val Town – source of truth för strukturerad träningsdata och appens UI/API.
  • ChatGPT-projektchatten för Träning – personlig coach: tolkar genomförda pass, uppdaterar prioriteringar/kalibrering och äger rekommendationslogiken.
  • ChatGPT Scheduled Task – kör dagligen kl. 07:00 Europe/Stockholm, läser Val Town-data + coach_state och skriver dagens förstaval + två alternativ till daily_recommendations.
  • ChatGPT Work – används främst för större produkt-/kodarbete. Work ska bevara datakontrakten och coachingflödet i COACHING_WORKFLOW.md, inte skapa en parallell coachingmodell.
  • Intervals.icu – automatisk aktivitetskälla från Garmin Connect. intervals_sync.ts körs varje timme och kan också triggas on demand från coachchatten direkt efter ett pass. Synken matchar befintliga sessioner före import för att undvika dubbletter.
  • Google Sheets – historisk/importkälla och backup/referens. Arken är inte längre primär source of truth och ska behandlas som read-only om inget annat uttryckligen beslutas.

Det finns ingen Val Town-cron/LLM-coach längre. Intervals-jobbet är endast datasynk, inte coaching. Den tidigare daily.ts är borttagen. Dagliga rekommendationer kommer från ChatGPT Scheduled Task utanför Val Town.

V1

  • Home med dagens förstaval, två alternativ, övningar/reps och kort motivering.
  • Workouts med passbibliotek och övningsdetaljer.
  • Workout mode för AMRAP, EMOM, på tid och öppna pass, med timer och varv/laps.
  • History med genomförda sessioner från Val Town, inklusive importerad historik.
  • Progress för frekvens, kettlebellbelastning, löpning, standardpass och skills som pull-ups/toes-to-bar.
  • Val Town-inloggning och ägarkontroll för jonasolof.

Datamodell

  • workout_templates – aktiva passupplägg. Produktionsdatabasen är auktoritativ för katalogen; db.ts innehåller endast bootstrap-seed och ska inte användas som komplett lista.
  • sessions – genomförda pass. Nya app-pass har source = 'val_town'; importerad historik har source = 'google_sheet'.
  • laps – varv/minuter med elapsed time.
  • performance_entries – specifika progressmått, t.ex. pull_ups och toes_to_bar.
  • coach_state – aktuell kvalitativ coachingkontext: prioriteringar, preferenser, belastningskalibrering och relevanta begränsningar.
  • daily_recommendations – dagens förstaval, två alternativ, motivering, modell/ägare och session som rekommendationen bygger på.
  • sync_state – systemkontrakt och legacy-metadata. training_primary_source = val_town och recommendation_owner = chatgpt_project_chat är de viktiga aktuella värdena.

Coach-API

GET /api/coach/context returnerar nya/oprocessade sessioner, aktuell coach_state och senaste rekommendation. Det är ett bekvämt gränssnitt för coachflöden, men ChatGPT kan också läsa SQLite direkt via Val Town-integrationen.

SELECT * FROM sessions WHERE processed_at IS NULL ORDER BY completed_at ASC;

processed_at betyder coachad/hanterad, inte bara "har lästs av en automation". En morgonrekommendation ska därför inte automatiskt markera sessioner som processed.

Daglig rekommendation

Den externa ChatGPT-tasken ska varje morgon:

  1. läsa senaste sessioner och eventuella oprocessade app-pass,
  2. läsa performance_entries, alla aktiva workout_templates och coach_state/current,
  3. väga träningsmix, återhämtning, aktuell kalibrering och uttalade prioriteringar,
  4. skriva/upserta dagens rad i daily_recommendations med model = 'chatgpt-coach',
  5. endast uppdatera coach_state när nya passdata ger en tydlig och bestående lärdom.

Appen ska presentera rekommendationen, inte själv generera en konkurrerande träningsplan.

Legacy Google Sheets

Historik och bibliotek har importerats från tidigare Google Sheets, inklusive träningsbiblioteket 1_QBlXws3llrLcIfdwR0CC33gSF_HMqFM5Pf8Kqf9PoA. Dessa finns kvar som referens/backup, men nya produktflöden ska i första hand läsa och skriva Val Town.

Se COACHING_WORKFLOW.md för det praktiska arbetsflödet mellan appen, coachchatten och Work.