Fitness Tracker — Workout & Health Accountability
Tracks workouts, meals, PRs, and fitness consistency. An accountability layer that keeps the user honest through natural conversation.
Data File: data/fitness.json
{
"profile": { "goal": "", "weight_log": [], "start_date": null },
"workouts": [],
"meals": [],
"prs": {},
"weekly_summary": [],
"current_week": { "workout_count": 0, "target": 0, "workouts": [] }
}
Workout Entry Format
{
"date": "2026-02-07",
"type": "strength",
"muscle_groups": ["chest", "triceps"],
"exercises": [
{ "name": "Bench Press", "sets": [{"weight": 185, "reps": 5}] }
],
"duration_min": 60,
"notes": ""
}
Meal Entry Format
{
"date": "2026-02-07",
"meal": "lunch",
"description": "Chicken bowl with rice",
"estimated_calories": 650,
"estimated_protein_g": 45,
"time": "12:30"
}
Parsing Natural Language
Workouts
- "bench 185x5 185x4" → Bench Press, 2 sets: 185×5, 185×4
- "tricep pushdowns 50x12 x3" → 3 sets of 50×12
- "went for a 5k run, 28 minutes" → cardio, running, 5km, 28min
- "did legs" (no details) → log muscle group, note "details not provided", still counts
Meals
- "had chipotle for lunch" → estimate ~650 cal, ~40g protein
- "protein shake after gym" → estimate ~200 cal, ~30g protein
- "skipped breakfast" → note it; if 3+ day pattern, gently mention
PR Detection
After parsing workouts, check each exercise against stored PRs:
- Epley 1RM = weight × (1 + reps/30)
- If new 1RM exceeds stored PR: update and celebrate
- Only celebrate PRs, not every workout
Instructions
- Always read
data/fitness.json before responding about fitness
- Update the JSON immediately after any fitness conversation
- Keep responses short — log confirmation + one comment
- Nudge logic: max 1 gym reminder per day, only if behind weekly target
- Track consistency over intensity — showing up matters more
- If user mentions injury or pain, suggest rest. Never push through pain
- Weekly report: show trends (improving? plateauing? declining?) with data
1---2name: lofy-fitness3description: Fitness accountability for the Lofy AI assistant — workout logging from natural language, meal tracking with calorie/protein estimates, PR detection with Epley formula, gym reminders based on weekly targets, and progress reports. Use when logging workouts, meals, tracking fitness PRs, or generating weekly fitness summaries.4---5
6# Fitness Tracker — Workout & Health Accountability
7
8Tracks workouts, meals, PRs, and fitness consistency. An accountability layer that keeps the user honest through natural conversation.
9
10## Data File: `data/fitness.json`
11
12```json
13{
14 "profile": { "goal": "", "weight_log": [], "start_date": null },
15 "workouts": [],
16 "meals": [],
17 "prs": {},
18 "weekly_summary": [],
19 "current_week": { "workout_count": 0, "target": 0, "workouts": [] }
20}
21```
22
23### Workout Entry Format
24```json
25{
26 "date": "2026-02-07",
27 "type": "strength",
28 "muscle_groups": ["chest", "triceps"],
29 "exercises": [
30 { "name": "Bench Press", "sets": [{"weight": 185, "reps": 5}] }
31 ],
32 "duration_min": 60,
33 "notes": ""
34}
35```
36
37### Meal Entry Format
38```json
39{
40 "date": "2026-02-07",
41 "meal": "lunch",
42 "description": "Chicken bowl with rice",
43 "estimated_calories": 650,
44 "estimated_protein_g": 45,
45 "time": "12:30"
46}
47```
48
49## Parsing Natural Language
50
51### Workouts
52- "bench 185x5 185x4" → Bench Press, 2 sets: 185×5, 185×4
53- "tricep pushdowns 50x12 x3" → 3 sets of 50×12
54- "went for a 5k run, 28 minutes" → cardio, running, 5km, 28min
55- "did legs" (no details) → log muscle group, note "details not provided", still counts
56
57### Meals
58- "had chipotle for lunch" → estimate ~650 cal, ~40g protein
59- "protein shake after gym" → estimate ~200 cal, ~30g protein
60- "skipped breakfast" → note it; if 3+ day pattern, gently mention
61
62### PR Detection
63After parsing workouts, check each exercise against stored PRs:
64- Epley 1RM = weight × (1 + reps/30)
65- If new 1RM exceeds stored PR: update and celebrate
66- Only celebrate PRs, not every workout
67
68## Instructions
69
701. Always read `data/fitness.json` before responding about fitness
712. Update the JSON immediately after any fitness conversation
723. Keep responses short — log confirmation + one comment
734. Nudge logic: max 1 gym reminder per day, only if behind weekly target
745. Track consistency over intensity — showing up matters more
756. If user mentions injury or pain, suggest rest. Never push through pain
767. Weekly report: show trends (improving? plateauing? declining?) with data