# PT Takip Sistemi MVP Planı

## Mevcut Durum

- `danisan.html` ve `antrenör.html` tek dosyada ilerlemiş.
- Veri modeli tutarsız:
  - danışan ekranı `danisanlar/test_danisan`
  - antrenör ekranı `clients`
- `antrenör.html` içinde aynı işlevlerin birden fazla kopyası var:
  - `openProgramBuilder`
  - `addDay`
  - `addExercise`
- Metinlerde karakter bozulması var.
- API anahtarları doğrudan istemci tarafında görünüyor.

## Hedef Ürün

Bu sistemde iki ana panel olacak:

1. Antrenör paneli
- danışan ekleme
- danışan detayını görüntüleme
- egzersiz programı yazma
- beslenme planı yazma
- hareket kütüphanesinden program oluşturma
- danışana program atama
- ilerleme takibi

2. Danışan paneli
- kendine atanmış programı görme
- gün gün egzersizleri takip etme
- beslenme planını görme
- tamamlanan görevleri işaretleme
- ölçü / kilo / not girme
- süreç özetini görme

## Önerilen Veri Yapısı

### `clients/{clientId}`

```json
{
  "name": "Ayşe Kaya",
  "goal": "Kilo vermek",
  "status": "active",
  "calorieTarget": 1800,
  "proteinTarget": 130,
  "waterTarget": 2500,
  "startDate": "2026-04-21",
  "endDate": "2026-06-21",
  "note": "Başlangıç seviyesi",
  "assignedWorkoutProgramId": "program_001",
  "assignedNutritionPlanId": "nutrition_001",
  "createdAt": "serverTimestamp"
}
```

### `exerciseLibrary/{exerciseId}`

```json
{
  "name": "Goblet Squat",
  "category": "Bacak",
  "equipment": "Dumbbell",
  "level": "Başlangıç",
  "primaryMuscles": ["Quadriceps", "Glute"],
  "secondaryMuscles": ["Core"],
  "instructions": [
    "Ayaklar omuz genişliğinde açılır.",
    "Dumbbell göğüs hizasında tutulur.",
    "Kalça geriye gönderilerek squat yapılır."
  ],
  "animationType": "gif",
  "animationUrl": "https://...",
  "videoUrl": "https://...",
  "createdAt": "serverTimestamp"
}
```

### `workoutPrograms/{programId}`

```json
{
  "name": "Upper / Lower Başlangıç",
  "description": "4 haftalık adaptasyon planı",
  "level": "Başlangıç",
  "days": [
    {
      "label": "Gün 1",
      "title": "Upper Body",
      "exercises": [
        {
          "exerciseId": "bench_press",
          "sets": 4,
          "reps": "8-10",
          "restSec": 90,
          "notes": "RPE 7"
        }
      ]
    }
  ],
  "createdAt": "serverTimestamp"
}
```

### `nutritionPlans/{planId}`

```json
{
  "name": "1800 kcal yağ kaybı planı",
  "calories": 1800,
  "macros": {
    "protein": 130,
    "carb": 170,
    "fat": 60
  },
  "meals": [
    {
      "title": "Kahvaltı",
      "items": ["3 yumurta", "50g yulaf", "1 muz"]
    }
  ],
  "createdAt": "serverTimestamp"
}
```

### `clients/{clientId}/checkins/{checkinId}`

```json
{
  "date": "2026-04-21",
  "weight": 72.4,
  "steps": 8400,
  "waterMl": 2100,
  "mood": "İyi",
  "note": "Antrenman iyiydi",
  "createdAt": "serverTimestamp"
}
```

## Öncelikli Ekranlar

### 1. Antrenör paneli
- dashboard
- danışan listesi
- danışan detay sayfası
- hareket kütüphanesi
- program oluşturucu
- beslenme planı oluşturucu

### 2. Danışan paneli
- bugünkü plan
- haftalık program
- beslenme planı
- check-in / ölçüm girişi
- ilerleme özeti

## Teknik Öncelik Sırası

1. veri modelini tekilleştir
2. danışan ve antrenör ekranını aynı koleksiyon yapısına bağla
3. hareket kütüphanesi ekranını oluştur
4. program oluşturucuyu kütüphane tabanlı hale getir
5. danışana program atama akışını ekle
6. danışan ekranında atanan programı göster
7. beslenme planı oluşturma ve atama akışını ekle
8. check-in ve ilerleme kayıtlarını ekle

## İlk Refactor Hedefi

İlk gerçek geliştirme için en mantıklı başlangıç:

- `antrenör.html` dosyasını temizlemek
- tekrar eden fonksiyonları kaldırmak
- `programs` bölümünü gerçek veriyle çalışan hale getirmek
- hareket kütüphanesi modalı eklemek
- seçilen hareketlerden danışana özel program oluşturmak

## Not

Bir sonraki adımda en verimli yaklaşım şu olur:

- mevcut iki HTML dosyasını workspace içine alalım
- encoding sorununu temizleyelim
- ardından tek tek:
  - hareket kütüphanesi
  - program oluşturucu
  - danışana atama
  - danışan ekranı
  akışını kuralım
