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.
- 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_stateoch skriver dagens förstaval + två alternativ tilldaily_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.tskö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.
- 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.
workout_templates– aktiva passupplägg. Produktionsdatabasen är auktoritativ för katalogen;db.tsinnehåller endast bootstrap-seed och ska inte användas som komplett lista.sessions– genomförda pass. Nya app-pass harsource = 'val_town'; importerad historik harsource = 'google_sheet'.laps– varv/minuter med elapsed time.performance_entries– specifika progressmått, t.ex.pull_upsochtoes_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_townochrecommendation_owner = chatgpt_project_chatär de viktiga aktuella värdena.
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.
Den externa ChatGPT-tasken ska varje morgon:
- läsa senaste sessioner och eventuella oprocessade app-pass,
- läsa
performance_entries, alla aktivaworkout_templatesochcoach_state/current, - väga träningsmix, återhämtning, aktuell kalibrering och uttalade prioriteringar,
- skriva/upserta dagens rad i
daily_recommendationsmedmodel = 'chatgpt-coach', - endast uppdatera
coach_statenär nya passdata ger en tydlig och bestående lärdom.
Appen ska presentera rekommendationen, inte själv generera en konkurrerande träningsplan.
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.